一、概述
为什么在下面的代码中使用x
andy
字符串代替ints?
(注意:在Python 2.x中使用raw_input()
。在Python 3.x中使用input()
。在Python 3.x中raw_input()
被重命名为input()
)
play = True
while play:
x = input("Enter a number: ")
y = input("Enter a number: ")
print(x + y)
print(x - y)
print(x * y)
print(x / y)
print(x % y)
if input("Play again? ") == "no":
play = False
二、详解
TLDR
- Python 3不会评估
input
函数接收到的数据,但Python 2的input
函数会评估(阅读下一节以了解含义)。 input
该raw_input
函数相当于Python 2的Python 2 。
Python 2.x
有两个函数用于获取用户输入,分别称为input
和raw_input
。它们之间的区别是,raw_input
不评估数据并以字符串形式按原样返回。但是,input
将对您输入的内容进行评估,评估结果将返回。例如,
>>> import sys
>>> sys.version
'2.7.6 (default, Mar 22 2014, 22:59:56) \n[GCC 4.8.2]'
>>> data = input("Enter a number: ")
Enter a number: 5 + 17
>>> data, type(data)
(22, )
5 + 17
评估数据,结果为22
。当它对表达式求值时5 + 17
,它将检测到您要添加两个数字,因此结果也将是同一int
类型。因此,类型转换是免费完成的,并22
作为的结果返回input
并存储在data
变量中。您可以将其input
视为raw_input
带eval
调用的组成。
>>> data = eval(raw_input("Enter a number: "))
Enter a number: 5 + 17
>>> data, type(data)
(22, )
注意:input
在Python 2.x中使用时应小心。我在这个答案中解释了为什么在使用它时要小心。
但是,raw_input
不评估输入并以字符串形式原样返回。
>>> import sys
>>> sys.version
'2.7.6 (default, Mar 22 2014, 22:59:56) \n[GCC 4.8.2]'
>>> data = raw_input("Enter a number: ")
Enter a number: 5 + 17
>>> data, type(data)
('5 + 17', )
Python 3.x
Python 3.xinput
和Python 2.xraw_input
类似,raw_input
在Python 3.x中不可用。
>>> import sys
>>> sys.version
'3.4.0 (default, Apr 11 2014, 13:05:11) \n[GCC 4.8.2]'
>>> data = input("Enter a number: ")
Enter a number: 5 + 17
>>> data, type(data)
('5 + 17', )
解
要回答您的问题,由于Python 3.x不会评估和转换数据类型,因此必须使用显式转换为int
s int
,如下所示
x = int(input("Enter a number: "))
y = int(input("Enter a number: "))
您可以接受任意基数的数字,并使用int
函数将其直接转换为10基数
>>> data = int(input("Enter a number: "), 8)
Enter a number: 777
>>> data
511
>>> data = int(input("Enter a number: "), 16)
Enter a number: FFFF
>>> data
65535
>>> data = int(input("Enter a number: "), 2)
Enter a number: 10101010101
>>> data
1365
第二个参数告诉输入数字的基础是什么,然后在内部对其进行理解和转换。如果输入的数据有误,将抛出ValueError
。
>>> data = int(input("Enter a number: "), 2)
Enter a number: 1234
Traceback (most recent call last):
File "", line 1, in
ValueError: invalid literal for int() with base 2: '1234'
对于可以包含小数部分的值,类型应为float
而不是int
:
x = float(input("Enter a number:"))
除此之外,您的程序可以像这样更改一点
while True:
...
...
if input("Play again? ") == "no":
break
您可以play
使用break
和摆脱变量while True
。
如若转载,请注明出处:https://www.javaidea.cn/article/8440.html