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

2024-04-19 21:25:59 发布

您现在位置:Python中文网/ 问答频道 /正文

背景故事: 我是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

Tags: the程序numberinputisfloatfirstprint
3条回答

使用额外的=,您将input()的返回值作为变量赋给float,隐藏了内置的float()函数。然后将该值赋给num1(以及num2num3在下面的行中)。你知道吗

您应该删除额外的=,以便输入可以正确地转换为数字进行数字比较;否则您的比较将基于字符串,这就是为什么在示例输出中'6'被认为大于'11'。你知道吗

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

此代码读取用户的输入并将该值分配给num1float。你知道吗

你可能想要这个:

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

从目前的情况来看,您的代码将num1num2num3作为字符串进行比较,在这种情况下6确实是“最大”的字符串。你知道吗

这一行是合法的,但不是很有用:

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

这是一个链式赋值语句,它将input返回的值赋给两个名称:num1float。你知道吗

这样做不会调用内建函数float实际上,它隐藏了内建函数,因此您不能再次调用它。(如果您尝试,您将得到一个关于字符串不可调用的TypeError

这是合法的,因为float和其他内置函数不是关键字或其他特殊的东西;它们只是内置名称空间中的变量。你知道吗

这里您想要的是明确地调用float,而不是隐藏它,如下所示:

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

那么,为什么它看起来有效呢?真的,这是一个意外。你的num1num2num3都是字符串,就像字符串'6'(和float最后都是与num3相同的字符串)。用>比较两个字符串是完全合法的。然而,这并不是你真正想要的。字符串按字母顺序进行比较,因此'6' > '11'(因为第一个字符6大于第一个字符1)。这就是为什么要将这些字符串转换为数字:float6.0 < 11.0,正如您期望的数字一样。你知道吗

如果代码中有问题,在这里添加=不是解决问题的方法。充其量,你只是把这个bug藏在另一个bug后面,这样你就连真正的问题都找不到了。你知道吗

相关问题 更多 >