石头布剪刀运行两次E

2024-04-26 14:34:46 发布

您现在位置:Python中文网/ 问答频道 /正文

我是编程新手。我已经为石头布剪刀游戏编写了代码,但是有一个bug我似乎无法修复。当游戏结束时,用户会被问到是否想再玩一次。如果用户第一次回答“是”,然后再次播放,第二次回答“否”,计算机出于某种原因再次询问用户是否要再次播放。在这种情况下,用户必须输入no。这是因为尽管用户回答“否”,但答案会被重置为“是”,然后再次返回。如何修复?你知道吗

# This code shall simulate a game of rock-paper-scissors. 
from random import randint
from time import sleep 

print "Welcome to the game of Rock, Paper, Scissors." 
sleep(1) 

def theGame():  
    playerNumber = 4 
    while playerNumber == 4: 
        computerPick = randint(0,2) 
        sleep(1) 
        playerChoice = raw_input("Pick Rock, Paper, or Scissors. Choose wisely.: ").lower()
        sleep(1) 

        if playerChoice == "rock": 
            playerNumber = 0  
        elif playerChoice == "paper":
            playerNumber = 1
        elif playerChoice == "scissors":
            playerNumber = 2    
        else:
            playerNumber = 4 
            sleep(1) 
            print "You cookoo for coco puffs." 

    print "You picked " + playerChoice + "!"
    sleep(1)  
    print "Computer is thinking..." 
    sleep(1)
    if computerPick == 0: 
        print "The Computer chooses rock!" 
    elif computerPick == 1: 
        print "The Computer chooses paper!" 
    else: 
        print "The Computer chooses scissors!" 
    sleep(1) 

    if playerNumber == computerPick:
        print "it's a tie!"
    else:
        if playerNumber < computerPick:
            if playerNumber == 0 and computerPick == 2:
                print "You win!" 
            else:   
                print "You lose!" 
        elif playerNumber > computerPick:
            if playerNumber == 2 and computerPick == 0: 
                print "You lose!" 
            else: 
                print "You win!"            
    replay()

def replay():
    sleep(1) 
    playAgain = "rerun" 
    while playAgain != "no": 
        playAgain = raw_input("Would you like to play again?: ").lower()
        if playAgain == "yes":
            sleep(1) 
            print "Alright then brotha." 
            sleep(1) 
            theGame()
        elif playAgain == "no":
            sleep(1) 
            print "Have a good day." 
            sleep(1)  
            print "Computer shutting down..." 
            sleep(1) 
        else: 
            sleep(1)  
            print "What you said was just not in the books man." 
            sleep(1)  

theGame() 

Tags: no用户youifsleepelsecomputerpaper
2条回答

您应该在调用theGame之后中断循环。想象一下你决定再玩15次。然后在堆栈上有15个replay循环,等待询问您是否要再次播放。因为playAgain在每个循环中都是"yes",所以每个循环都会再次询问您,因为playAgain不是"no"

这是因为调用堆栈的创建方式。你知道吗

第一次播放并输入yes再次播放时,您正在创建另一个对theGame()的函数调用。函数调用完成后,您的程序将继续执行while循环,并询问他们是否要再次播放,而不管他们是否输入了no,因为该输入是第二次调用theGame()。你知道吗

若要解决此问题,请在调用theGame()之后添加一个break或将playAgain设置为no,当它们输入yes

while playAgain != "no": 
    playAgain = raw_input("Would you like to play again?: ").lower()
    if playAgain == "yes":
        sleep(1) 
        print "Alright then brotha." 
        sleep(1) 
        theGame()
        break ## or playAgain = "no"

相关问题 更多 >