我如何将输入读取为数字?

2024-11-15 08:37:00
admin
原创
18
摘要:问题描述:为什么下面的代码中是字符串而不是整数x?y(注意:在 Python 2.x 中使用raw_input()。在 Python 3.x 中使用input()。在 Python 3.x 中raw_input()已重命名为)input()play = True while play: x = i...

问题描述:

为什么下面的代码中是字符串而不是整数xy

(注意:在 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

解决方案 1:

从 Python 3 开始,input返回一个必须明确转换为的字符串int,如下所示

x = int(input("Enter a number: "))
y = int(input("Enter a number: "))

您可以接受任何基数的数字,像这样

>>> 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 "<input>", line 1, in <module>
ValueError: invalid literal for int() with base 2: '1234'

对于可以有小数部分的值,类型应该floatint

x = float(input("Enter a number:"))

Python 2 和 3 之间的区别

概括

  • Python 2 的input函数评估接收到的数据,并隐式地将其转换为整数(阅读下一部分以了解其含义),但 Python 3 的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) 
[GCC 4.8.2]'
>>> data = input("Enter a number: ")
Enter a number: 5 + 17
>>> data, type(data)
(22, <type 'int'>)

数据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'>)

注意:在 Python 2.x 中使用时应小心谨慎。我在此答案input中解释了为什么在使用它时应小心谨慎。

但是,raw_input不会评估输入并将其原样作为字符串返回。

>>> 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.xinput与 Python 2.xraw_input类似,并且raw_input在 Python 3.x 中不可用。

>>> 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'>)

解决方案 2:

在 Python 3.x 中,raw_input被重命名为input并且 Python 2.xinput被删除。

这意味着,就像raw_inputinput在 Python 3.x 中总是返回一个字符串对象。

为了解决这个问题,您需要将这些输入明确地转换为整数int

x = int(input("Enter a number: "))
y = int(input("Enter a number: "))

解决方案 3:

对于一行中的多个整数,map可能会更好。

arr = map(int, raw_input().split())

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

num1, num2 = map(int, raw_input().split())

解决方案 4:

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

x = int(input("Enter a number: "))
y = int(input("Enter a number: "))

解决方案 5:

多道题要求在一行中输入多个整数。最好的方法是逐行输入整个数字串,然后将它们拆分成整数。以下是 Python 3 版本:

a = []
p = input()
p = p.split()      
for i in p:
    a.append(int(i))

您还可以使用列表推导:

p = input().split("whatever the seperator is")

要将所有输入从字符串转换为 int,我们执行以下操作:

x = [int(i) for i in p]
print(x, end=' ')

列表元素应该以直线打印。

解决方案 6:

转换为整数:

my_number = int(input("enter the number"))

对于浮点数类似:

my_decimalnumber = float(input("enter the number"))

解决方案 7:

n=int(input())
for i in range(n):
    n=input()
    n=int(n)
    arr1=list(map(int,input().split()))

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

解决方案 8:

我在解决CodeChef上的一个问题时遇到了输入整数的问题,其中应该从一行读取两个整数(以空格分隔)。

虽然int(input())对于单个整数来说已经足够了,但我没有找到直接输入两个整数的方法。我试过这个:

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:])

现在我使用num1num2作为整数。

解决方案 9:

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

解决方案 10:

虽然在您的示例中,int(input(...))在任何情况下都可以达到目的,python-futurebuiltins.input值得考虑,因为这可以确保您的代码适用于 Python 2 和 3 ,并禁用 Python2input尝试对输入数据类型“聪明”的默认行为(builtins.input基本上只是表现得像raw_input)。

相关推荐
  为什么项目管理通常仍然耗时且低效?您是否还在反复更新电子表格、淹没在便利贴中并参加每周更新会议?这确实是耗费时间和精力。借助软件工具的帮助,您可以一目了然地全面了解您的项目。如今,国内外有足够多优秀的项目管理软件可以帮助您掌控每个项目。什么是项目管理软件?项目管理软件是广泛行业用于项目规划、资源分配和调度的软件。它使项...
项目管理软件   601  
  华为IPD与传统研发模式的8大差异在快速变化的商业环境中,产品研发模式的选择直接决定了企业的市场响应速度和竞争力。华为作为全球领先的通信技术解决方案供应商,其成功在很大程度上得益于对产品研发模式的持续创新。华为引入并深度定制的集成产品开发(IPD)体系,相较于传统的研发模式,展现出了显著的差异和优势。本文将详细探讨华为...
IPD流程是谁发明的   7  
  如何通过IPD流程缩短产品上市时间?在快速变化的市场环境中,产品上市时间成为企业竞争力的关键因素之一。集成产品开发(IPD, Integrated Product Development)作为一种先进的产品研发管理方法,通过其结构化的流程设计和跨部门协作机制,显著缩短了产品上市时间,提高了市场响应速度。本文将深入探讨如...
华为IPD流程   9  
  在项目管理领域,IPD(Integrated Product Development,集成产品开发)流程图是连接创意、设计与市场成功的桥梁。它不仅是一个视觉工具,更是一种战略思维方式的体现,帮助团队高效协同,确保产品按时、按质、按量推向市场。尽管IPD流程图可能初看之下显得错综复杂,但只需掌握几个关键点,你便能轻松驾驭...
IPD开发流程管理   8  
  在项目管理领域,集成产品开发(IPD)流程被视为提升产品上市速度、增强团队协作与创新能力的重要工具。然而,尽管IPD流程拥有诸多优势,其实施过程中仍可能遭遇多种挑战,导致项目失败。本文旨在深入探讨八个常见的IPD流程失败原因,并提出相应的解决方法,以帮助项目管理者规避风险,确保项目成功。缺乏明确的项目目标与战略对齐IP...
IPD流程图   8  
热门文章
项目管理软件有哪些?
云禅道AD
禅道项目管理软件

云端的项目管理软件

尊享禅道项目软件收费版功能

无需维护,随时随地协同办公

内置subversion和git源码管理

每天备份,随时转为私有部署

免费试用