Не могу понять, почему int ("") ведет себя странно - PullRequest
0 голосов
/ 19 мая 2018

Итак, я делаю код, который берет имя и номер от пользователя, а затем подсчитывает его по единицам.Я использую «while» и «try», чтобы не пропустить ни одну букву, но она не работает с пустым.Я использовал idle, чтобы проверить, является ли int ("") ", и это приводит к ошибке значения, но по какой-то причине, когда он в функции, он действует.Есть идеи?Я оставил остальной код только для этого.

Вот мой код.

testNumber=""

def numQualify(x):
     while x:
         try:
             x=int(x)
         except ValueError:
             print("That was not a proper number.")
             return False
         else:
             print("Great number!")
             break

testNumber=input("Write a number")

while numQualify(testNumber) == False:
    testNumber=input("Please try another number")

print("Done")

1 Ответ

0 голосов
/ 19 мая 2018

В Python некоторые вещи неявно считаются False для целей условного выражения, таких как цикл while или оператор if.Пустая строка - одна из тех вещей.Таким образом, когда вы передаете пустую строку в numQualify, цикл while x немедленно завершается, и, поскольку нет оператора return, он возвращает None и None != False.

.хотя на самом деле нужен цикл while!x никогда не изменяется во время numQualify.На самом деле вы можете немного упростить numQualify:

def numQualify(x):
    try:
        int(x)
    except ValueError:
        print("That was not a proper number.")
        return False
    print("Great number!")
    return True

Теперь пустая строка входит в блок try и поэтому не имеет проблем.Поскольку у вас есть while numQualify(testNumber) == False: цикл, вам не нужен цикл внутри numQualify

...