How can I read inputs as numbers?
为什么下面的代码中是
(注意:在python 2.x中,使用
1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 | 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 函数可以(阅读下一节了解其含义)。 - python 2与python 3的
input 的等价物是raw_input 函数。
Python 2 x
有两个函数可以获取用户输入,分别称为
1 2 3 4 5 6 7 8 | >>> import sys >>> sys.version '2.7.6 (default, Mar 22 2014, 22:59:56) [GCC 4.8.2]' >>> data = input("Enter a number:") Enter a number: 5 + 17 >>> data, type(data) (22, <type 'int'>) |
评估数据
1 2 3 4 | >>> data = eval(raw_input("Enter a number:")) Enter a number: 5 + 17 >>> data, type(data) (22, <type 'int'>) |
注意:在python 2.x中使用
但是,
1 2 3 4 5 6 7 8 | >>> import sys >>> sys.version '2.7.6 (default, Mar 22 2014, 22:59:56) [GCC 4.8.2]' >>> data = raw_input("Enter a number:") Enter a number: 5 + 17 >>> data, type(data) ('5 + 17', <type 'str'>) |
Python 3 x
python 3.x的
1 2 3 4 5 6 7 8 | >>> import sys >>> sys.version '3.4.0 (default, Apr 11 2014, 13:05:11) [GCC 4.8.2]' >>> data = input("Enter a number:") Enter a number: 5 + 17 >>> data, type(data) ('5 + 17', <class 'str'>) |
解决方案
为了回答您的问题,因为python 3.x不评估和转换数据类型,所以您必须使用
1 2 | x = int(input("Enter a number:")) y = int(input("Enter a number:")) |
您可以接受任何基数的数字,并使用
1 2 3 4 5 6 7 8 9 10 11 12 | >>> 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 |
第二个参数告诉输入的数字的基数是什么,然后在内部理解和转换它。如果输入的数据错误,它将抛出一个
1 2 3 4 5 | >>> data = int(input("Enter a number:"), 2) Enter a number: 1234 Traceback (most recent call last): File"<input>", line 1, in <module> ValueError: invalid literal for int() with base 2: '1234' |
对于可以有小数部分的值,类型应该是
1 | x = float(input("Enter a number:")) |
除此之外,你的程序可以稍微改变一下,像这样
1 2 3 4 5 | while True: ... ... if input("Play again?") =="no": break |
通过使用
在python 3.x中,
这意味着,就像
要解决这个问题,您需要将这些输入显式地放入
1 2 | x = int(input("Enter a number:")) y = int(input("Enter a number:")) |
对于一行中的多个整数,
1 | arr = map(int, raw_input().split()) |
如果数字已知(如2个整数),则可以使用
1 | num1, num2 = map(int, raw_input().split()) |
1 2 | x = int(input("Enter a number:")) y = int(input("Enter a number:")) |
多个问题需要在一行中输入多个整数。最好的方法是将整个数字串输入一行,然后将它们拆分为整数。下面是python 3版本:
1 2 3 4 5 | a = [] p = input() p = p.split() for i in p: a.append(int(i)) |
转换为整数:
1 | my_number = int(input("enter the number")) |
同样,对于浮点数:
1 | my_decimalnumber = float(input("enter the number")) |
1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 | def dbz(): try: r = raw_input("Enter number:") if r.isdigit(): i = int(raw_input("Enter divident:")) d = int(r)/i print"O/p is -:",d else: print"Not a number" except Exception ,e: print"Program halted incorrect data entered",type(e) dbz() Or num = input("Enter Number:")#"input" will accept only numbers |
我在解决codechef问题时遇到了一个接受整数输入的问题,其中两个整数(由空格分隔)应该从一行中读取。
虽然
1 2 3 4 5 6 7 8 9 10 | num = input() num1 = 0 num2 = 0 for i in range(len(num)): if num[i] == ' ': break num1 = int(num[:i]) num2 = int(num[i+1:]) |
现在我使用num1和num2作为整数。希望这有帮助。
1 2 3 4 5 | n=int(input()) for i in range(n): n=input() n=int(n) arr1=list(map(int,input().split())) |
for循环应运行n次。第二个"n"是数组的长度。最后一个语句将整数映射到一个列表,并以空格分隔的形式进行输入。您还可以在for循环结束时返回数组。
在您的示例中,