Проблема с циклом While. Даже если условие не сработало, все равно продолжается цикл

Рейтинг: -1Ответов: 3Опубликовано: 30.03.2023
user_naber_1 = ('1. В компании (на вечеринке) Вы a) общаетесь со многими, включая и незнакомцев б) общаетесь с немногими - Вашими знакомыми. \n Введите ответ: ')
user_naber_2 = ('2. Вы человек скорее а) реалистичный, чем склонный теоретизировать б) склонный теоретизировать, чем реалистичный. \n Введите ответ: ')


def user_naber_func(user_naber):
    user_naber = input(user_naber)
    while user_naber != 'а' or user_naber != 'б':
        print("Введите ответ а или б!")
        user_naber = input()
    return user_naber


user_naber_1 = user_naber_func(user_naber_1)
user_naber_2 = user_naber_func(user_naber_2)
print(user_naber_1)
print(user_naber_2)`

Выводится "Введите ответ а или б!" и просит еще раз ввести значение user_naber. И так бесконечно.

Ответы

▲ 0Принят

Вместо оператора or нужно использовать оператор and

def user_naber_func(user_naber):
    user_naber = input(user_naber)
    while user_naber != 'а' and user_naber != 'б':
        print("Введите ответ а или б!")
        user_naber = input()
    return user_naber
▲ 0

Логическая ошибка:

while user_naber != 'а' or user_naber != 'б':

выполняется до тех пор пока ответ не равен "а" ИЛИ "б". Одновременно ответ никогда не будет равен обоим значениям )))

Немного переделал:

def ask_query(number, question):
    print(f'{number}.', question)
    answer = ''
    while answer not in ['а', 'б']:
        answer = input('Введите ответ "а" или "б": ')
    return answer

questionnaire = [
    'В компании (на вечеринке) Вы \n\ta) общаетесь со многими, включая и незнакомцев\n\tб) общаетесь с немногими вашими знакомыми.',
    'Вы человек скорее\n\tа) реалистичный, чем склонный теоретизировать\n\tб) склонный теоретизировать, чем реалистичный.'
]
answers = []
counter = 1
for query in questionnaire:
    answers.append(ask_query(counter, query))
    counter += 1
print()
counter = 1
for answer in answers:
    print(f'Ответ {counter}: "{answer}"')
    counter += 1
▲ -1
def user_naber_func(user_naber):
    user_naber = input(user_naber)
    while user_naber != 'а' and user_naber != 'б':
        print("Введите ответ а или б!")
        user_naber = input()
    return user_naber