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]
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
TA贡献1963条经验 获得超6个赞
你发现问题了!您必须重置残局计数。为此,只需将endgame
变量放入循环中while True
(在开头)
while True: endgame = 0
这应该有效。
添加回答
举报