Зацикливание ввода до тех пор, пока не будет задано условие

Я новичок, в настоящее время работаю над небольшим проектом на Python. Это игра в кости, в которой есть игрок 1 и игрок 2. Игроки по очереди бросают кости, и всего игра состоит из 10 раундов (по 5 раундов для каждого игрока). Побеждает игрок с наибольшим количеством очков.

Я пытаюсь проверить первый ввод, чтобы, например, когда игрок вводит число вместо «Выше» или «Меньше», программа должна была ответить «Неверный ввод, пожалуйста, ответьте «Выше» или «Меньше».

Вот мой код до сих пор

import random

goAgain = "y"
activePlayer = 1
player1Score = 0
player2Score = 0
maxGuesses = 9
while (goAgain == "y"):
    randNum = random.randint(1, 10)
    print(randNum)
    storedAnswer = input("Will you roll higher or lower?: ")
    while(storedAnswer.strip() != 'higher' or storedAnswer.strip() != 'lower'):
        print('Invalid input, please respond with "Higher" or "Lower"')
        storedAnswer = input("Will you roll higher or lower?: ")
        
    randNum2 = random.randint(1, 10)
    print(randNum2)
    if (storedAnswer.strip() == "lower" and randNum2 < randNum):
        if (activePlayer == 1):
            player1Score+=1
        else:
            player2Score+=1
        print("You Win!")
        maxGuesses+=1
        # print(player1Score)
        # print(player2Score)
    elif (storedAnswer.strip() == "lower" and randNum2 > randNum):
        print("You Lose!")
        maxGuesses+=1
        # print(player1Score)
        # print(player2Score)
    elif (storedAnswer.strip() == "higher" and randNum2 > randNum):
         if (activePlayer == 1):
            player1Score+=1
         else:
            player2Score+=1
         print("You Win!")
         maxGuesses+=1
        # print(player1Score)
        # print(player2Score)
    elif (storedAnswer.strip() == "higher" and randNum2 < randNum):
        print("You Lose!")
        maxGuesses+=1
        # print(player1Score)
        # print(player2Score)
    elif (randNum2 == randNum):
        print("Draw!")
        maxGuesses+=1
        
    print(player1Score)
    print(player2Score)
        
        
    if (activePlayer == 1):
        activePlayer = 2
    else:
        activePlayer = 1
        
    if (maxGuesses == 10):
        if (player1Score > player2Score):
            print("Player 1 wins!")
        elif (player2Score > player1Score):
            print("Player 2 wins!")
        else: 
            print("DRAW!")
        break
    else:
        goAgain = input("Do you want to play again: ")

Возникающая проблема заключается в том, что вместо этого он печатает «неверный ввод» независимо от того, истинно ли условие или нет.

Можете ли вы предоставить копию вашего ввода и вывода вашей программы? Технически вы запрашиваете Higher (с большой буквы H), но ваше условие проверяет higher (с маленькой буквы h).

Robert Seaman 13.12.2020 17:51

Попробуйте while storedAnswer.strip().lower() not in ["higher", "lower"].

Lakshya Raj 13.12.2020 18:07
Почему в Python есть оператор "pass"?
Почему в Python есть оператор "pass"?
Оператор pass в Python - это простая концепция, которую могут быстро освоить даже новички без опыта программирования.
Некоторые методы, о которых вы не знали, что они существуют в Python
Некоторые методы, о которых вы не знали, что они существуют в Python
Python - самый известный и самый простой в изучении язык в наши дни. Имея широкий спектр применения в области машинного обучения, Data Science,...
Основы Python Часть I
Основы Python Часть I
Вы когда-нибудь задумывались, почему в программах на Python вы видите приведенный ниже код?
LeetCode - 1579. Удаление максимального числа ребер для сохранения полной проходимости графа
LeetCode - 1579. Удаление максимального числа ребер для сохранения полной проходимости графа
Алиса и Боб имеют неориентированный граф из n узлов и трех типов ребер:
Оптимизация кода с помощью тернарного оператора Python
Оптимизация кода с помощью тернарного оператора Python
И последнее, что мы хотели бы показать вам, прежде чем двигаться дальше, это
Советы по эффективной веб-разработке с помощью Python
Советы по эффективной веб-разработке с помощью Python
Как веб-разработчик, Python может стать мощным инструментом для создания эффективных и масштабируемых веб-приложений.
0
2
59
3
Перейти к ответу Данный вопрос помечен как решенный

Ответы 3

Ответ принят как подходящий

Значение всегда не равно тому или иному значению.

answer = input("Will you roll higher or lower?: ")
while answer.strip() not in ['higher', 'lower']:
    print('Invalid input, please respond with "Higher" or "Lower"')
    answer = input("Will you roll higher or lower?: ")

Попробуйте это с and вместо этого:

storedAnswer = input("Will you roll higher or lower?: ")
while(storedAnswer.strip().lower() != 'higher' and storedAnswer.strip().lower() != 'lower'):
    print('Invalid input, please respond with "Higher" or "Lower"')
    storedAnswer = input("Will you roll higher or lower?: ")

Помнить:

no(A) or no(B)  = no(A and B)

no(A) and no(B) = no(A or B)

Источник: https://en.wikipedia.org/wiki/Булевая_алгебра

Проблема в том, что вы не пишете строчными буквами (и используете or вместо list). Это ваш код правильно:

import random

goAgain = "y"
activePlayer = 1
player1Score = 0
player2Score = 0
maxGuesses = 9
while goAgain == "y":
    randNum = random.randint(1, 10)
    print(randNum)
    storedAnswer = input("Will you roll higher or lower?: ").strip().lower()
    while storedAnswer not in ['higher', 'lower']:
        print('Invalid input, please respond with "Higher" or "Lower"')
        storedAnswer = input("Will you roll higher or lower?: ").strip().lower()
        
    randNum2 = random.randint(1, 10)
    print(randNum2)
    if storedAnswer == "lower" and randNum2 < randNum:
        if activePlayer == 1:
            player1Score+=1
        else:
            player2Score+=1
        print("You Win!")
        maxGuesses+=1
        # print(player1Score)
        # print(player2Score)
    elif storedAnswer == "lower" and randNum2 > randNum:
        print("You Lose!")
        maxGuesses+=1
        # print(player1Score)
        # print(player2Score)
    elif storedAnswer == "higher" and randNum2 > randNum:
         if (activePlayer == 1):
            player1Score+=1
         else:
            player2Score+=1
         print("You Win!")
         maxGuesses+=1
        # print(player1Score)
        # print(player2Score)
    elif storedAnswer == "higher" and randNum2 < randNum:
        print("You Lose!")
        maxGuesses+=1
        # print(player1Score)
        # print(player2Score)
    elif randNum2 == randNum:
        print("Draw!")
        maxGuesses+=1
        
    print(player1Score)
    print(player2Score)
        
        
    if (activePlayer == 1):
        activePlayer = 2
    else:
        activePlayer = 1
        
    if maxGuesses == 10:
        if player1Score > player2Score:
            print("Player 1 wins!")
        elif player2Score > player1Score:
            print("Player 2 wins!")
        else: 
            print("DRAW!")
        break
    else:
        goAgain = input("Do you want to play again: ")

Я удаляю () из условий if и while, потому что они не нужны.

Некоторые люди говорили, что вам нужно заменить or на and. Вместо этого лучше использовать while storedAnswer not in ["higher", "lower"].

storedAnswer = input(...).strip().lower() вместо storedAnswer = input(...), чтобы не нужно было постоянно писать storedAnswer.strip().

Другие вопросы по теме