Я новичок, в настоящее время работаю над небольшим проектом на 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: ")
Возникающая проблема заключается в том, что вместо этого он печатает «неверный ввод» независимо от того, истинно ли условие или нет.
Попробуйте while storedAnswer.strip().lower() not in ["higher", "lower"]
.
Значение всегда не равно тому или иному значению.
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)
Проблема в том, что вы не пишете строчными буквами (и используете 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()
.
Можете ли вы предоставить копию вашего ввода и вывода вашей программы? Технически вы запрашиваете
Higher
(с большой буквы H), но ваше условие проверяетhigher
(с маленькой буквы h).