如何将输入读作数字?

Hos*_*250 261 python int input python-2.7 python-3.x

在下面的代码中为什么xy字符串而不是整数?网上的所有内容都说要使用raw_input(),但是我读input()raw_input()在Python 3.x中重命名的Stack Overflow(在一个不处理整数输入的线程上).

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
Run Code Online (Sandbox Code Playgroud)

the*_*eye 286

TLDR

  • Python 3不会评估使用input函数接收的数据,但Python 2的input函数会这样做(请阅读下一节以了解其含义).
  • Python 2中的等价的Python 3中的inputraw_input功能.

Python 2.x

有两个函数可以获取用户输入,称为inputraw_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, <type 'int'>)
Run Code Online (Sandbox Code Playgroud)

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, <type 'int'>)
Run Code Online (Sandbox Code Playgroud)

注意: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', <type 'str'>)
Run Code Online (Sandbox Code Playgroud)

Python 3.x

Python 3.x input和Python 2.x raw_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', <class 'str'>)
Run Code Online (Sandbox Code Playgroud)

要回答你的问题,因为Python 3.x没有评估和转换数据类型,你必须显式转换为ints int,就像这样

x = int(input("Enter a number: "))
y = int(input("Enter a number: "))
Run Code Online (Sandbox Code Playgroud)

您可以接受任何基数,并使用该int函数将它们直接转换为base-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
Run Code Online (Sandbox Code Playgroud)

第二个参数告诉输入数字的基数是什么,然后在内部理解并转换它.如果输入的数据是错误的,它将抛出一个ValueError.

>>> 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'
Run Code Online (Sandbox Code Playgroud)

对于可以包含小数组件的值,类型将是:float而不是int:

x = float(input("Enter a number:"))
Run Code Online (Sandbox Code Playgroud)

除此之外,您的程序可以稍微改变一下,就像这样

while True:
    ...
    ...
    if input("Play again? ") == "no":
        break
Run Code Online (Sandbox Code Playgroud)

您可以play使用break和删除变量while True.

PS:Python不期望input在行尾:)

  • 我将这个问题与答案用作重复目标,但也许您可以在python 3解决方案中添加TDLR,即顶部的int(input()`...?Python 2即将寿终正寝,而python 3信息太埋藏IMO (4认同)
  • @thefourtheye至少使用[`ast.literal_eval`](https://docs.python.org/3/library/ast.html#ast.literal_eval)。它没有`eval`的安全性问题。 (2认同)

iCo*_*dez 40

在Python 3.x中,raw_input重命名为inputPython 2.x input已被删除.

这意味着,就像raw_input,input在Python 3.X总是返回一个字符串对象.

要解决此问题,您需要将这些输入显式地放入整数int:

x = int(input("Enter a number: "))
y = int(input("Enter a number: "))
Run Code Online (Sandbox Code Playgroud)

此外,Python不需要/使用分号来结束行.所以,拥有它们并没有做任何积极的事情.


小智 25

对于单行中的多个整数,映射可能更好.

arr = map(int, raw_input().split())
Run Code Online (Sandbox Code Playgroud)

如果已知数字(如2个整数),则可以使用

num1, num2 = map(int, raw_input().split())
Run Code Online (Sandbox Code Playgroud)


Mar*_*ers 14

input()(Python 3)和raw_input()(Python 2)总是返回字符串.使用显式将结果转换为整数int().

x = int(input("Enter a number: "))
y = int(input("Enter a number: "))
Run Code Online (Sandbox Code Playgroud)

专业提示:Python中不需要分号.


小智 11

多个问题需要在单行上输入几个整数.最好的方法是将整个数字串输入一行,然后将它们拆分为整数.

a = []
p = input()
p = p.split()      
for i in p:
    a.append(int(i))
Run Code Online (Sandbox Code Playgroud)


小智 6

转换为整数:

my_number = int(input("enter the number"))
Run Code Online (Sandbox Code Playgroud)

对于浮点数类似:

my_decimalnumber = float(input("enter the number"))
Run Code Online (Sandbox Code Playgroud)


小智 5

n=int(input())
for i in range(n):
    n=input()
    n=int(n)
    arr1=list(map(int,input().split()))
Run Code Online (Sandbox Code Playgroud)

for 循环应运行“n”次。第二个“n”是数组的长度。最后一条语句将整数映射到一个列表,并以空格分隔的形式接受输入。您还可以在 for 循环结束时返回数组。