Python3 - TypeError: '>' не поддерживается между экземплярами 'float' и 'NoneType' - PullRequest
0 голосов
/ 12 июня 2018

Я недавно прохожу курс 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))

Я не уверен, почему яполучить этот код ошибки.Пожалуйста, помогите.

Спасибо

1 Ответ

0 голосов
/ 12 июня 2018

В отношении:

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

Преимущество использования знания о том, что smallest и largest либо оба будут None в начале, либо оба non- None после первого значения (первое значение по сути будет одновременно текущим минимумом и максимумом).

Он также не выполняет второй блок if для первого значения - этотеперь нет необходимости, когда вы устанавливаете smallest и largest для этого значения.

...