Программа не выполняет цикл

#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. Пожалуйста. Не забудьте поддержать мой ответ, пожалуйста!