Python3 - TypeError:'>' ' float'的实例之间不支持和' NoneType'

时间:2018-06-12 03:56:27

标签: python-3.x traceback

我最近参加了Python课程,而我正在进行的练习希望我找到最大和最小的数字。如果我输入"字符串"然后它会提示"输入无效。"这是我到目前为止所得到的,但我收到了追溯错误:

Traceback (most recent call last):
    File "FindingSmallestLargestNum.py", line 15, in <module>
    if num > largest:
TypeError: '>' not supported between instances of 'float' and 
'NoneType'

以下是我的代码行:

largest = None
smallest = None

while True: 
    num = input("Enter a number: ")
    if num == "done": break
    try:
        num = float(num)
except:
    print("Invalid input")
    continue

    if smallest is None:
        smallest = num
    if num > largest:
        largest = num
    elif num < smallest:
        smallest = num

print("Maximum is",int(largest))
print("Minimum is",int(smallest))

我不确定为什么我会收到此错误代码。请帮忙。

谢谢

2 个答案:

答案 0 :(得分:3)

关于:

if smallest is None:
    smallest = num

您正确地将smallest设置为第一个值,但largest执行相同的操作。

这意味着,对于第一个值,表达式num > largest将等同于FloatVariable > NoneVariable,这是您看到的错误的原因。

更好的方法是:

if smallest is None:
    smallest = num
    largest = num
elif num > largest:
    largest = num
elif num < smallest:
    smallest = num

这样做的好处是可以使用smallestlargest 两者在开始时None两者None在第一个值之后(第一个值本身就是当前最小值最大值)。

它也没有为第一个值执行第二个if阻止 - 现在没有必要为此设置smallest largest值。

答案 1 :(得分:0)

你的代码肯定会工作,但我认为赋值已经包含了 None 值,这意味着他们希望我们使用 None 值,这花了我一点时间,但我按照他们的意愿做了 祝你好运

largest = None
smallest = None
while True:
    num = input("Enter a number: ")
    if num == "done" : break
    try:
        numbers = int(num)
    except:
        print("Invalid input")
        continue
    if largest is None:
        largest = numbers 
    elif numbers > largest:
        largest = numbers
    if smallest is None:
        smallest = numbers
    elif numbers < smallest:
        smallest = numbers
print("Maximum is", largest)   
print("Minimum is", smallest)