当您尝试将数据类型分配给python中的输入时发生错误

时间:2018-07-31 02:54:58

标签: python python-3.x syntax

背景故事: 我是python的新手,并且正在编写一个非常简单的程序来查找三个数字中的最大值,因此我发现它没有给出正确的答案。我认为这可能是一个逻辑问题,并试图制作流程图并在线搜索同一程序的示例,我发现了很多,但直到逐行阅读并意识到这一点之后,我发现这些程序与我的程序之间没有任何区别这不是比较的问题,而是我正在接受输入的方法。我正在接受这样的输入:

num1 = float=(input("Enter first number: "))

浮点后的这个多余的=号似乎可以解决问题。但是,我当时想知道为什么python允许这样做,如果这样做有什么作用? python在这里实际上在做什么?以及它如何改变我程序的结果?

我的程序:

num1 = float=(input("Enter first number: "))
num2 = float=(input("Enter second number: "))
num3 = float=(input("Enter third number: "))

if (num1 > num2) and (num1 > num3):
   print("The largest number is",num1)
elif (num2 > num1) and (num2 > num3):
   print("The largest number is",num2)
else:
   print("The largest number is",num3)

我的输入:

 Enter first number: 11
 Enter second number: 6
 Enter third number: 5

输出:

 The largest number is 6

4 个答案:

答案 0 :(得分:0)

此行是合法的Python,但不是很有用:

num1 = float=(input("Enter first number: "))

这是一条链接分配语句,它将input返回的值分配给两个名称:num1float

这样做不会调用内置的float函数-实际上,它隐藏了内置函数,因此您再也无法调用它。 (如果您尝试这样做,则会得到TypeError关于无法调用字符串的信息。)

这是合法的,因为float和其他内置函数不是关键字,也不是其他特殊内容;它们只是内置命名空间中的变量。

您在这里想要的绝对是呼叫float,而不是隐藏它,就像这样:

num1 = float(input("Enter first number: "))

那么,为什么它似乎起作用?真的,这几乎是偶然的结果。您的num1num2num3及其后的字符串,如字符串'6'(和float最终与{{1} }。将两个字符串与num3进行比较是完全合法的。但是,这并不是您真正想要的。字符串按字母顺序进行比较,因此>(因为第一个字符'6' > '11'大于第一个字符6)。这就是为什么要将这些字符串转换为数字的原因:浮点数1,就像您期望的数字一样。

如果您在代码中遇到问题,则在此处添加6.0 < 11.0并不是解决问题的方法。充其量,您只是将错误隐藏在另一个错误的后面,因此您甚至再也无法解决真正的问题了。

答案 1 :(得分:0)

使用额外的=,您将input()的返回值分配给float作为变量,从而遮盖了内置float()函数。然后将该值分配给num1(以及以下行中的num2num3)。

您应该删除多余的=,以便将输入正确地转换为数字以进行数字比较。否则,您的比较将基于字符串,这就是为什么示例输出中'6'被认为比'11'大的原因。

答案 2 :(得分:0)

num1 = float = (input("Enter first number: "))

此代码读取用户的输入,并将该值分配给num1float

您可能想要这样:

num1 = float(input("Enter first number: "))

就目前而言,您的代码正在将num1num2num3作为字符串进行比较,在这种情况下,6确实是“最大”字符串。

答案 3 :(得分:0)

通过将num1num2num3float分配给input函数,您将获得以下变量:

num1 = '11'
num2 = '6'
num3 = '5'
float = '5'

=操作符是一个赋值操作符,可帮助您隐藏float功能。使用它,您可以将新值设置为float,并在最后一次输入时将其设置为'5'。使用此值,您比较了三个字符串,并且'6'大于'11',因此将num2作为最大输入。 不建议遮盖内置函数,但这是python的灵活性。