Программа Python запрашивает ввод дважды, не возвращает значение в первый раз

#python

#python

Вопрос:

Вот мой код, в get_response() функции, если вы вводите «y» или «n», в первый раз он говорит «недопустимый», но затем работает во второй раз.
Как мне это исправить?

 import random

MIN = 1
MAX = 6

def main():

    userValue = 0
    compValue = 0

    again = get_response()

    while again == 'y':
        userRoll, compRoll = rollDice()
        userValue  = userRoll
        compValue  = compRoll
        if userValue > 21:
            print("User's points: ", userValue)
            print("Computer's points: ", compValue)
            print("Computer wins")
        else:
            print('Points: ', userValue, sep='')
        again = get_response()

    if again == 'n':
        print("User's points: ", userValue)
        print("Computer's points: ", compValue)
        if userValue > compValue:
            print('User wins')
        elif userValue == compValue:
            print('Tie Game!')
        else:
            print('Computer wins')


def rollDice():

    userRoll = random.randint(MIN, MAX)
    compRoll = random.randint(MIN, MAX)
    return userRoll, compRoll

def get_response():

    answer = input('Do you want to roll? ')

    if answer != 'y' or answer != 'n':
        print("Invalid response. Please enter 'y' or 'n'.")
        answer = input('Do you want to roll? ')

main()
 

Комментарии:

1. if answer != 'y' or answer != 'n': всегда верно. Это либо не ‘y’, либо не ‘n’.

2. Вторая проблема: вы никогда не возвращались answer из этой функции

Ответ №1:

answer != 'y' or answer != 'n': всегда верно; or должно быть and .

Комментарии:

1. или не отвечать в ‘yn’

2. @volcano Это сделало yn бы допустимый ввод

3. @cricket_007, вы правы, не отвечайте в (‘y’, ‘n’)

Ответ №2:

Это должно быть answer != 'y' and answer != 'n':

Ответ №3:

Вы логически думаете, что «ответ не y ИЛИ n», но в коде, который

 not (answer == 'y' or answer == 'n')
 

Примените правило DeMorgans, которое вы получите

 answer != 'y' and answer != 'n'
 

Возможно, вам следует реструктурировать использование in .

Вы также захотите return answer

 def get_response():
    while True:
        answer = input('Do you want to roll? ')

        if answer not in {'y', 'n'}:
            print("Invalid response. Please enter 'y' or 'n'.")
        else:
            return answer