Как сделать так, чтобы мой цикл while проверял оба условия - PullRequest
0 голосов
/ 27 апреля 2019

Для моей программы я прошу у пользователя почтовый индекс.Я пытаюсь заставить программу снова запросить у пользователя его почтовый индекс, если он набрал не только цифры, а ровно 5 символов.Он снова запрашивает почтовый индекс, если это не 5 символов, но не спрашивает снова, набрал ли пользователь что-то, что не является числом.Например, если вы набрали "8789", это не сработало бы, но если вы набрали "8jkf0", это сработало бы.

Я попытался переключить свой или на и, но это все.Я не мог придумать что-нибудь еще, чтобы попробовать.Я очень плохо знаком с Python.Я использую его в школе и иногда делаю это в свое свободное время.

zipcode = input("What is your ZIP code? ")
ziplen = len(zipcode)
while not (char.isnumber() for char in zipcode) or not ziplen == 5:
    zipcode = input("What is your ZIP code? ")
    ziplen = len(zipcode)

Я ожидал, что программа снова запросит почтовый индекс пользователя, если он набрал не только цифры и ровно 5 символов,но он проверяет только 5 символов.

Ответы [ 2 ]

4 голосов
/ 27 апреля 2019

числовой проверяет всю строку, так что это просто:

while not zipcode.isnumeric() or not len(zipcode) == 5:
    ...
1 голос
/ 27 апреля 2019

Вам нужно вызвать функцию all(), чтобы вернуть результат проверки всех символов в zipcode. Ваше понимание списка создает генератор, который всегда будет правдивым.

И правильная функция isdigit, а не isnumber.

while ziplen != 5 or not all(map(str.isdigit, zipcode)):
Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...