需要结束玩家回合,但我的代码一直在无限重复 (python)

need to end the players turn but instead my code keeps repeating itself infinitely (python)

所以当 tiros 达到 3 时它基本上应该停止,但是当它达到 3 时代码只是继续运行而没有机会输入任何东西,它只是继续写入结果的输出并无限递增。

这里是完整代码

import random
import sys
import time
from os import system, name


num_jogadores = 0
min_jogadores = 2
dados = {"d_verde": {0: "cérebro", 1: "cérebro", 2: "cérebro", 3: "espingarda", 4: "pegada", 5: "pegada"}, "d_amarelo": {0: "cérebro", 1: "cérebro", 2: "espingarda", 3: "espingarda", 4: "pegada", 5: "pegada"}, "d_vermelho": {0: "cérebro", 1: "espingarda", 2: "espingarda", 3: "espingarda", 4: "pegada", 5: "pegada"}}
tiros = 0
cerebros = 0


#função para limpar o console
def limpar_tela():
    if name == 'nt':
        _ = system('cls')

#função para sortear a cor do dado
def cor_seletor():
    cor = random.randrange(13)
    if cor < 6:
        return "verde"
    elif cor >= 6 and cor < 10:
        return "amarelo"
    elif cor >= 10 and cor < 13:
        return "vermelho"

#definir qual lado será escolhido aleatoriamente
def dado_lado():
    lado = random.randrange(6)
    return lado

def jogar_dados():
    dado = cor_seletor()
    lado = dado_lado()
    if dado == "verde":
        return (dado, dados["d_verde"][lado])
    elif dado == "amarelo":
        return (dado, dados["d_amarelo"][lado])
    elif dado == "vermelho":
        return (dado, dados["d_vermelho"][lado])

def rodada():
    global cerebros
    global tiros
    j = 0
    while j < 3:
        cor_dado, resultado = jogar_dados()
        if resultado == "cérebro":
            cerebros += 1
        elif resultado == "espingarda":
            tiros += 1

        print("A cor do seu dado foi:", cor_dado, ", e a face foi:", resultado,"!")
        j += 1
        print("Cérebros: ", cerebros, " e Tiros:", tiros)

#menu inicial.
print("Bem-vindos ao ZOMBIE DICE!")
inicio = input("Para começar o jogo digite qualquer coisa para começar ou para sair do jogo digite 'sair'\n")
if inicio.casefold() == "sair":
    limpar_tela()
    sys.stdout.write("Saindo...")
    sys.stdout.flush()
    time.sleep(1)
    sys.exit()
else:
    print("Vamos começar!")

jogar = input("Caso esteja pronto para o jogo, digite s, caso não esteja, digite n: ")

这是在 tiros 计数器超过 3 后不断重复的代码部分

while jogar not in "sn":
    print("Sinto muito, sua resposta precisa ser 's' ou 'n' ")
    jogar = input("Caso esteja pronto para o jogo, digite 's', caso não esteja, digite 'n': ")
else: 
    if jogar == "n":
        print("Obrigado por jogar!")
    
    while jogar == "s":
        rodada()
        if tiros < 3:
            jogar = input("Você gostaria de rolar novamente? Caso sim, digite 's' caso não 'n': ")
            while jogar not in "sn":
                print("Sinto muito, sua resposta precisa ser 's' ou 'n'")
                jogar = input("Você gostaria de rolar novamente?\n Digite 's' para sim e 'n' para não")
            else: 
                if jogar == "s":
                    print("Jogando novamente...")
                else: 
                    print("Sua vez acabou.")
        else:
            print("Você tem três espingardas, seu turno acabou.")
            play = "n"

如果您希望循环迭代三次,作为更好的做法,最好这样做:

for _ in range(3):
    do something

比:

j = 0
while  j < 3:
    j += 1 

你将不太可能更改变量并出现无限循环。无论如何,这里你的主 while 循环应该在 jogar != "s" 时结束。 但是,如果您的代码中有 tiros > 3,我看不到任何可能的修改方法,因为最后一行可能应该是:

jogar = "n"

而不是

play = "n"