Python:石头剪刀布循环问题

2024-05-08 07:35:38 发布

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

我对Python的石头、布、剪刀的编程有问题。我的问题发生在打平的时候。当有一个平局,我的程序应该进入一个while循环,在平局的if语句中,再次搜索相同的问题,石头,布或剪刀,直到它打破平局。我附上了问题图片的链接:

第五轮:你可以看到问题所在。在

我正在参加一个编程课程的介绍,所以我还是一个初学者,我不知道我做错了什么。在

一个Python程序的石头,布,剪刀游戏

import random

def rock_paper_scissors():
playerscore = 0
computerscore = 0
rounds = input('\nHow many points does it take to win?: ')
count = 1
while playerscore or computerscore != int(rounds):
    print('\n********************* ROUND #',count,'*********************')
    player = input('\nPick your throw: [r]ock, [p]aper, or [s]cissors?: ')
    computerthrow = random.randint(0,2)
    if (computerthrow == 0):
        computer = "rock"
        computer = 'r'
    elif (computerthrow == 1):
        computer = "paper"
        computer = 'p'
    elif (computerthrow == 2):
        computer = "scissors"
        computer = 's'
    if (player == computer):
        print('Tie!')
        while (player == computer):
            player = input('\nPick your throw: [r]ock, [p]aper, or [s]cissors?: ')
            computerthrow = random.randint(0,2)
            if (computerthrow == 0):
                computer = "rock"
                computer = 'r'
            elif (computerthrow == 1):
                computer = "paper"
                computer = 'p'
            elif (computerthrow == 2):
                computer = "scissors"
                computer = 's'      
            print(computer)
    elif (player == 'r'):
        if (computer == "p"):
            print('Computer threw paper, you lose!')
            computerscore=computerscore+1
        else:
            print('Computer threw scissors, you win!')
            playerscore = playerscore+1
        #count = count + 1
    elif (player == 'p'):
        if (computer == "r"):
            print('Computer threw rock, you win!')
            playerscore = playerscore+1
        else:
            print('Computer threw scissors, you lose!')
            computerscore=computerscore+1
        #count = count + 1
    elif (player == 's'):
        if (computer == "p"):
            print('Computer threw paper, you win!')
            playerscore = playerscore+1
        else:
            print('Computer threw rock, you lose!')
            computerscore=computerscore+1
    count = count + 1
    print('\nYour score: ',playerscore)
    print('Computer''s score: ',computerscore,'\n')
print('********************* GAME OVER ********************')

def main(): 
print('ROCK PAPER SCISSORS in Python')
print()
print('Rules: 1) Rock wins over Scissors.')
print('       2) Scissors wins over Paper.')
print('       3) Paper wins over Rock.')

rock_paper_scissors()

main()

Tags: youifcountcomputerpaperplayerprintscissors
2条回答

您的问题来自于控制语句(if、elif、else)的结构化方式。当你进入你的平局,而循环,你是不断运行,直到有人获胜,这似乎没有问题。问题是一旦你这样做了,python解释器会跳过控制块中的所有elif和else语句(如果我说if x==3:do this else:do that),如果x确实==3,我不希望python继续执行else条件。抱歉,如果这是令人困惑,长话短说,你需要确保,即使你的平局得到执行,你仍然继续得分,并开始新的一轮。简单的方法是将elif(player==“r”)改为if语句。这样,解释器将得分控制序列视为自己的块,一旦分配了每个球员的掷球数,它将始终被执行。在

示例:

def f(x):
    if (x == 0):
        print("1")
        x += 1
    elif (x == 1):
        print("2")
    print("Done!")

def g(x):
   if (x == 0):
       print("1")
       x += 1
   if (x == 1):
       print("2")
   print("Done!")

如果您调用f(0): Python将打印出1,然后完成!在

如果你叫g(0): Python将打印出1到2然后完成!在

你的直接问题是,你有一个平局的处理代码在同一个if/elif链中,作为另一个得分的处理。在

你会说这样的话:

if tied
    stuff
elif player == r
    ...

结果,当有平局时,游戏正确地循环直到没有平局。但是,is会跳过更新分数的代码,因为如果/elif/else就是这样工作的!在

一个直接的解决办法是打破if/elif链,并将领带处理放入单独的if块中:

^{pr2}$

话虽如此,让我再补充几点:

  1. 将两个值按顺序分配给同一个变量:

    ^{3}$

    这没有任何作用,因为第二个覆盖了第一个。你应该删除每一对中的第一行。

  2. 您可能应该编写一个函数,反复要求用户选择一个,直到它得到石头、布或剪刀。使用while循环。

  3. ^{} module中有一个函数将从列表、元组或字符串中选择一个项并返回它。你可以用它让电脑直接选择r,p,s。

  4. 您可以通过预先确定结果来简化代码。假设你让电脑先选。如果电脑选“r”,你就知道“p”是赢,“s”是输。将胜负选择存储在一对变量中,所有测试都可以归结为一个测试:

    computer = computer_pick()
    if computer == 'r':
        winner = 'p'
        computer = 'rock'
    elif computer == 'p':
    ...
    
    player = player_pick()
    if tied ...
    
    if player == winner:
        print("Computer picked", computer, "- you win!")
    else:
       ...
    

相关问题 更多 >

    热门问题