为了账号安全,请及时绑定邮箱和手机立即绑定

我的石头剪刀布游戏中出现错误,在 pass 语句后循环无法正常工作

我的石头剪刀布游戏中出现错误,在 pass 语句后循环无法正常工作

红糖糍粑 2023-12-20 19:51:33
    # Created By Evan Ryan# we import our random module and time modulefrom random import *import time# this will track our winscomp_wins = 0player_wins = 0# this will let us know when the match is finishedendgame = 0# here we use simple print and sleep function to display a welcome messageprint("Welcome to Rock, Paper, Scissors, Lizard, Spock")time.sleep(3)print("This match will be best 3 out of 5")time.sleep(3)print("Good Luck")time.sleep(1)# this will be our function to allow the user to make a choice# they have 5 choices# if they make a typo or choose a non option they will be asked to choose again# we will also convert their selection to a lowercase letterdef pick_option():    user_pick = input("Choose Rock, Paper, Scissors, Lizard, Spock: ")    if user_pick in ["Rock", "rock", "r", "R"]:        user_pick = "r"    elif user_pick in ["Paper", "paper", "p", "P"]:        user_pick = "p"    elif user_pick in ["Scissors", "scissors", "sc", "SC"]:        user_pick = "sc"    elif user_pick in ["Lizard", "lizard", "l", "L"]:        user_pick = "l"    elif user_pick in ["Spock", "spock", "sp", "SP"]:        user_pick = "sp"    else:        print("Are you speaking english buddy?")        pick_option()    return user_pick# this will act as our function for the computer to choose# they will random select a number 1-5# these number are assinged to one of the five options the user hasdef comp_option():    comp_pick = randint(1,5)    if comp_pick == 1:        comp_pick = "r"    if comp_pick == 2:        comp_pick ="p"    if comp_pick == 3:        comp_pick = "sc"    if comp_pick == 4:        comp_pick = "l"    if comp_pick == 5:        comp_pick = "sp"    return comp_pick所以我遇到的麻烦就是这样。游戏运行良好,一旦计算机或用户取得 3 场胜利,我们就会收到获胜或失败的消息。发生这种情况后,系统会要求您再次玩游戏。如果您点击“否”,则代码结束。如果您点击“是”,游戏将正确重新启动,但在您第一次选择时,它会将您带回获胜或失败屏幕。似乎胜利计数器没有重置或者我有不正确的缩进?任何帮助表示赞赏。PS:我知道可能还有一种更简单的方法来制作游戏,而不是使用所有这些 elif 语句。也许是上课什么的?虽然我是新手,所以这对我来说是最简单的。
查看完整描述

3 回答

?
温温酱

TA贡献1752条经验 获得超4个赞

一些旁注建议:

  • 要检查变量是否是一系列字符串之一,您可以通过执行以下操作使其更加紧凑:

    if user_pick.lower() in ["rock", "r"]:
  • 无需将 int 转换为 int :) int(1) == 1

  • endgame充当旗帜 - 游戏是否结束。True因此,使用布尔值 - / False- 比使用 int更有意义。


现在您的主要问题是您的代码endgame根据player_wins和设置变量comp_wins。当您开始新游戏时,这些值会保留旧值,因此一轮游戏结束后立即再次结束。只需重置代码最后部分中的所有关键变量:

endgame = False

...

if player_wins >= 3: 

    endgame = True

...

if comp_wins >= 3:

    endgame = True

...

if endgame:

    user_pick = input("Do you want to play again (y/n)?")

    if user_pick.lower() in ["y", "yes"]:

        endgame = False

        player_wins = 0

        comp_wins = 0

    else:

        break

附注建议:

通常重复的if//树结构elif可以else被减少。在其他语言中,您有这样的switch语句 - 这有点让代码看起来相同,只是与if/else. 在 Python 中,您通常可以将大多数if树转换为字典中的选择。所以你的comp_option可以改为:


def comp_option():

    comp_pick = randint(1,5)

    options = {1: 'r', 2: 'p', 3: 'sc', 4: 'l', 5: 'sp'}

    return options[comp_pick]


查看完整回答
反对 回复 2023-12-20
?
慕容708150

TA贡献1831条经验 获得超4个赞

我认为您必须添加一些额外的语句,以便在用户选择重新启动游戏时重置游戏内的统计数据。就像是:


 if int(endgame) == int(1):

        user_pick = input("Do you want to play again (y/n)?")

        if user_pick in ["Y", "y", "yes", "Yes"]:

            comp_wins = 0

            player_wins = 0

            endgame = 0

            continue


查看完整回答
反对 回复 2023-12-20
?
神不在的星期二

TA贡献1963条经验 获得超6个赞

你发现问题了!您必须重置残局计数。为此,只需将endgame变量放入循环中while True(在开头)

while True:

   endgame = 0

这应该有效。


查看完整回答
反对 回复 2023-12-20
  • 3 回答
  • 0 关注
  • 63 浏览
慕课专栏
更多

添加回答

举报

0/150
提交
取消
意见反馈 帮助中心 APP下载
官方微信