背景故事: 我是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
使用额外的
=
,您将input()
的返回值作为变量赋给float
,隐藏了内置的float()
函数。然后将该值赋给num1
(以及num2
,num3
在下面的行中)。你知道吗您应该删除额外的
=
,以便输入可以正确地转换为数字进行数字比较;否则您的比较将基于字符串,这就是为什么在示例输出中'6'
被认为大于'11'
。你知道吗num1 = float = (input("Enter first number: "))
此代码读取用户的输入并将该值分配给
num1
和float
。你知道吗你可能想要这个:
num1 = float(input("Enter first number: "))
从目前的情况来看,您的代码将
num1
、num2
和num3
作为字符串进行比较,在这种情况下6
确实是“最大”的字符串。你知道吗这一行是合法的,但不是很有用:
这是一个链式赋值语句,它将
input
返回的值赋给两个名称:num1
和float
。你知道吗这样做不会调用内建函数
float
实际上,它隐藏了内建函数,因此您不能再次调用它。(如果您尝试,您将得到一个关于字符串不可调用的TypeError
)这是合法的,因为
float
和其他内置函数不是关键字或其他特殊的东西;它们只是内置名称空间中的变量。你知道吗这里您想要的是明确地调用
float
,而不是隐藏它,如下所示:那么,为什么它看起来有效呢?真的,这是一个意外。你的
num1
、num2
和num3
都是字符串,就像字符串'6'
(和float
最后都是与num3
相同的字符串)。用>
比较两个字符串是完全合法的。然而,这并不是你真正想要的。字符串按字母顺序进行比较,因此'6' > '11'
(因为第一个字符6
大于第一个字符1
)。这就是为什么要将这些字符串转换为数字:float6.0 < 11.0
,正如您期望的数字一样。你知道吗如果代码中有问题,在这里添加
=
不是解决问题的方法。充其量,你只是把这个bug藏在另一个bug后面,这样你就连真正的问题都找不到了。你知道吗相关问题 更多 >
编程相关推荐