我正在执行py4e分配5.2。在浏览器中,当我键入我的代码时,一切正常,但是当我尝试使用CMD时,代码无法正常工作并给出错误:“ int”和“ NoneType”的实例之间不支持TypeError:'>'
largest = None
smallest = None
while True:
sval = input("enter a number ")
if sval=="done":
break
try:
fval = int(sval)
except:
print("Invalid input")
continue
if fval > largest:
largest = fval
elif smallest is None:
smallest = fval
elif fval < smallest :
smallest = fval
print("Maximum is",largest)
print("Minimum is ",smallest)
it is giving error Traceback (most recent call last):
File "hw_ch_5_2.py", line 12, in <module>
if fval > largest:
TypeError: '>' not supported between instances of 'int' and 'NoneType'
答案 0 :(得分:2)
正如@JaredSmith在他们的评论中所说,您将largest
设置为None
的{{1}}。您可以在开始时将NoneType
设置为很小的值(有些较大的负数),并将largest
设置为很大的值。
作为示例,您可以执行以下操作,而不是将其设置为smallest
:
None
您还需要稍微更改代码
largest = -10000000000
smallest = 10000000000
当您知道数字范围在-10000000000和10000000000之间时,这是一种方法。
答案 1 :(得分:0)
另一种确保不将int
与None
进行比较(这会导致您的TypeError
)的方法是检查largest
或{{ 1}}是smallest
之前,您可以进行其他任何比较。
None
这是一个布尔逻辑函数,称为short-circuiting。简而言之,由于表达式(if largest is None or fval > largest:
largest = fval
if smallest is None or fval < smallest:
smallest = fval
的第一部分如果要检查的变量为largest is None
则返回True
,因此解释器无需费心尝试计算第二部分(None
或fval > largest
),因为整个表达式的计算结果为fval < smallest
。