背景故事: 我是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
答案 0 :(得分:0)
此行是合法的Python,但不是很有用:
num1 = float=(input("Enter first number: "))
这是一条链接分配语句,它将input
返回的值分配给两个名称:num1
和float
。
这样做不会调用内置的float
函数-实际上,它隐藏了内置函数,因此您再也无法调用它。 (如果您尝试这样做,则会得到TypeError
关于无法调用字符串的信息。)
这是合法的,因为float
和其他内置函数不是关键字,也不是其他特殊内容;它们只是内置命名空间中的变量。
您在这里想要的绝对是呼叫float
,而不是隐藏它,就像这样:
num1 = float(input("Enter first number: "))
那么,为什么它似乎起作用?真的,这几乎是偶然的结果。您的num1
,num2
和num3
及其后的字符串,如字符串'6'
(和float
最终与{{1} }。将两个字符串与num3
进行比较是完全合法的。但是,这并不是您真正想要的。字符串按字母顺序进行比较,因此>
(因为第一个字符'6' > '11'
大于第一个字符6
)。这就是为什么要将这些字符串转换为数字的原因:浮点数1
,就像您期望的数字一样。
如果您在代码中遇到问题,则在此处添加6.0 < 11.0
并不是解决问题的方法。充其量,您只是将错误隐藏在另一个错误的后面,因此您甚至再也无法解决真正的问题了。
答案 1 :(得分:0)
使用额外的=
,您将input()
的返回值分配给float
作为变量,从而遮盖了内置float()
函数。然后将该值分配给num1
(以及以下行中的num2
,num3
)。
您应该删除多余的=
,以便将输入正确地转换为数字以进行数字比较。否则,您的比较将基于字符串,这就是为什么示例输出中'6'
被认为比'11'
大的原因。
答案 2 :(得分:0)
num1 = float = (input("Enter first number: "))
此代码读取用户的输入,并将该值分配给num1
和float
。
您可能想要这样:
num1 = float(input("Enter first number: "))
就目前而言,您的代码正在将num1
,num2
和num3
作为字符串进行比较,在这种情况下,6
确实是“最大”字符串。
答案 3 :(得分:0)
通过将num1
,num2
,num3
和float
分配给input
函数,您将获得以下变量:
num1 = '11'
num2 = '6'
num3 = '5'
float = '5'
=
操作符是一个赋值操作符,可帮助您隐藏float
功能。使用它,您可以将新值设置为float
,并在最后一次输入时将其设置为'5'
。使用此值,您比较了三个字符串,并且'6'
大于'11'
,因此将num2
作为最大输入。
不建议遮盖内置函数,但这是python的灵活性。