#python #loops
#python #циклы
Вопрос:
Мне любопытно, почему эта программа не зацикливается. Программа запустится один раз, но когда будет сыграна другая игра, она не записывает победителя и завершает работу.
Любая помощь будет высоко оценена!
Вот программа на Python:
import random
random.seed()
print ("For each round please select from the following warriors: ")
print ("'C' or 'c' for Cowboy")
print ("'N' or 'n' for Ninja")
print ("'B' or 'b' for Bear")
print ("'Q' or 'q' for quit")
print()
gamesPlayed = 0
print ("Round", gamesPlayed 1, ":")
warriorStr = input("Please choose a warrior: ")
warriorStr = warriorStr.lower()
while not warriorStr.isalpha():
print()
print ("That's not a valid choice!")
warriorStr = input("Please enter a weapon: ")
computer = random.choice("cnb")
count = 0
winCount = 0
lossCount = 0
tieCount = 0
if warriorStr == "n" or "N" and computer == "c" or "C":
winCount = winCount 1
print ("You win")
elif warriorStr == "c" or "C" and computer == "b" or "B":
winCount = winCount 1
print ("You win")
elif warriorStr == "b" or "B" and computer == "n" or "N":
winCount = winCount 1
print ("You win")
elif warriorStr == "c" and computer == "n":
lossCount = lossCount 1
print ("Computer wins")
elif warriorStr == "b" and computer == "c":
lossCount = lossCount 1
print ("Computer wins")
elif warriorStr == "n" and computer == "b":
lossCount = lossCount 1
print ("Computer wins")
elif warriorStr == "c" and computer == "c":
tieCount = tieCount 1
print ("You tied")
elif warriorStr == "n" and computer == "n":
tieCount = tieCount 1
print ("You tied")
elif warriorStr == "b" and computer == "b":
tieCount = tieCount 1
print ("You tied")
gamesPlayed = gamesPlayed 1
print()
print ("Round", gamesPlayed 1, ":")
warriorStr = input("Choose a warrior: ")
if warriorStr == "q" and "Q":
print("Game Over!")
print ("You have played a total of", gamesPlayed, "games.")
print ("You won", winCount, "times")
print ("The computer won", lossCount, "times")
print ("You tied", tieCount, "times")
Комментарии:
1. Ваша программа содержит один цикл (
while not warriorStr.isalpha()
). Почему остальная часть этого цикла?2. Я хочу продолжать играть, пока пользователь не введет «q», чтобы выйти
3. Вам нужно обернуть большую часть этого кода в цикл while. В значительной степени все это.
4. потому что python не может читать ваши мысли 😉 он будет зацикливаться только тогда, когда вы укажете ему цикл. Кроме того, пожалуйста, инкапсулируйте больше, используйте больше функций, это сделает ваш код более читаемым и поддерживаемым.
Ответ №1:
Оберните все это в цикл while. Попробуйте что-то вроде этого:
warriorStr = input("Please choose a warrior: ")
warriorStr = warriorStr.lower()
acceptables = ['a','c','n','q']
while warriorStr not 'q' and warriorStr in acceptables:
warriorStr = input("Please enter a weapon: ")
computer = random.choice("cnb")
count = 0
winCount = 0
lossCount = 0
tieCount = 0
if warriorStr == "n" or "N" and computer == "c" or "C":
winCount = winCount 1
print ("You win")
elif warriorStr == "c" or "C" and computer == "b" or "B":
winCount = winCount 1
print ("You win")
elif warriorStr == "b" or "B" and computer == "n" or "N":
winCount = winCount 1
print ("You win")
elif warriorStr == "c" and computer == "n":
lossCount = lossCount 1
print ("Computer wins")
elif warriorStr == "b" and computer == "c":
lossCount = lossCount 1
print ("Computer wins")
elif warriorStr == "n" and computer == "b":
lossCount = lossCount 1
print ("Computer wins")
elif warriorStr == "c" and computer == "c":
tieCount = tieCount 1
print ("You tied")
elif warriorStr == "n" and computer == "n":
tieCount = tieCount 1
print ("You tied")
elif warriorStr == "b" and computer == "b":
tieCount = tieCount 1
print ("You tied")
gamesPlayed = gamesPlayed 1
print()
print ("Round", gamesPlayed 1, ":")
warriorStr = input("Choose a warrior: ")
print("Game Over!")
print ("You have played a total of", gamesPlayed, "games.")
print ("You won", winCount, "times")
print ("The computer won", lossCount, "times")
print ("You tied", tieCount, "times")
Комментарии:
1. … Спасибо! Это помогает!!
2. И последнее… Я только хочу, чтобы пользователи вводили символы «a», «c», «n» и «q». Есть ли простой способ сделать это??
3. Есть несколько способов сделать это… Одним из быстрых и грязных способов было бы добавить условие в ваш оператор while. Я отредактировал свой первоначальный ответ.
4. … Я также заставил его работать, добавив оператор Else в конце… Спасибо за весь ваш вклад!!
5. Пожалуйста. Не забудьте поддержать мой ответ, пожалуйста!