Несколько операторов if - можно ли еще использовать «else»? - PullRequest
0 голосов
/ 21 октября 2018

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

Мой код нене похоже на работу.Когда я ввожу пароль, который содержит алфавиты и цифры, но он слишком длинный / короткий, вывод кода говорит мне, что он слишком длинный / короткий, но также вызывает условие «else».Код тогда не возвращается.

Пожалуйста, кто-нибудь может помочь мне понять концепцию здесь?Большое спасибо.

import re


while True :
    password = input('Enter a password')
    if not len(password) >= 6:
        print('password too short')
    if not len(password) <= 12:
        print('password too long')
    if not re.search(r'[a-z]', password):
        print('password must contain at least a lowercase alphabet')
    if not re.search(r'[0-9]', password):
        print('password must contain at least a number')
    else:
        print('your password is fine')
        break

Ответы [ 3 ]

0 голосов
/ 21 октября 2018

else применяется только к последнему if!

Вместо этого вы можете собрать все сообщения в списке и распечатать их, или, если список пуст, выведите сообщение «ok» иразорвать петлю.Таким образом, if будут добавлены в список, а не распечатаны.Последний else будет if, который проверяет, является ли список пустым.После этого if, переберите список и напечатайте каждый элемент.Ваша программа должна быть ровно на 3 строки длиннее.Я дам тебе удар, прежде чем я отправлю его в коде:)

0 голосов
/ 21 октября 2018

Инструкция ELSE используется в качестве «цепочки всех» для цепочки операторов IF / ELIF.

Причина, по которой ваш пример не работает так, как вы ожидаете, заключается в том, что ваш ELSE применяется только к последнимЕсли вы написали.Вы правы, что использование ELIF разрешит эту проблему, но не будет действовать так, как вы собираетесь.

Чтобы эта логика работала, я бы рекомендовал создать новую переменную 'valid = True' перед любым из ваших операторов IF,Затем под каждым IF напечатайте ваше сообщение об ошибке и установите valid = False.

Затем вы можете заменить ELSE на if valid == True:

Надеюсь, это поможет

0 голосов
/ 21 октября 2018

Вы хотите написать что-то вроде

import re

while True :
    ok = True
    password = input('Enter a password')
    if not len(password) >= 6:
        print('password too short')
        ok = False
    if not len(password) <= 12:
        print('password too long')
        ok = False
    if not re.search(r'[a-z]', password):
        print('password must contain at least a lowercase alphabet')
        ok = False
    if not re.search(r'[0-9]', password):
        print('password must contain at least a number')
        ok = False
    if ok:
        print('your password is fine')
        break
Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...