石头剪刀布游戏中,如何让compPick()仅在while循环迭代时变更返回值?
石头剪刀布游戏逻辑错误修复
你的核心问题是每轮游戏多次调用compPick(),导致电脑在同一回合里不断生成新的随机选择,胜负判断完全混乱。除此之外代码还有几处小问题,一起给你修正:
问题点梳理
- 每轮游戏中,从打印调试到胜负判断,多次调用
compPick(),每次调用都会重新生成随机选择,导致同一回合电脑选择不固定 - 部分得分提示文本错误(比如用户得分时却打印"+1 point for computer!")
- 用户输入判断存在拼写错误(
Scissor应该是Scissors) - 循环条件错误,原
while userScore != 10 or compScore != 10会导致一方达到10分后游戏仍继续,应该改成while userScore < 10 and compScore < 10
修正后的完整代码
# Rock, Paper, Scissors created by Manpreet Singh from random import randint userScore = 0 compScore = 0 def compPick(): # 生成1-3的随机数,对应返回石头/布/剪刀 guess = randint(1,3) if guess == 1: guess = 'Rock' elif guess == 2: guess = 'Paper' else: guess = 'Scissors' return guess while userScore < 10 and compScore < 10: userPick = input("Rock, Paper or Scissors: ") userPick = userPick.title() # 每轮只生成一次电脑选择,存在变量中复用 computer_choice = compPick() print(f"电脑选择了: {computer_choice}") # 调试打印 if userPick == computer_choice: # 平局 print("平局!不得分。") elif (userPick == 'Rock' and computer_choice == 'Scissors') or \ (userPick == 'Paper' and computer_choice == 'Rock') or \ (userPick == 'Scissors' and computer_choice == 'Paper'): userScore += 1 print(f"+1分!玩家得分\n电脑:{compScore} 玩家:{userScore}") elif (userPick == 'Rock' and computer_choice == 'Paper') or \ (userPick == 'Paper' and computer_choice == 'Scissors') or \ (userPick == 'Scissors' and computer_choice == 'Rock'): compScore += 1 print(f"+1分!电脑得分\n电脑:{compScore} 玩家:{userScore}") else: print('输入错误,请输入Rock、Paper或Scissors') # 游戏结束后显示结果 if userScore == 10: print("恭喜你获胜!") else: print("电脑获胜!")
关键改动说明
- 每轮游戏开始后,先获取用户输入,然后只调用一次
compPick(),把结果存在computer_choice变量里,后续所有判断都用这个变量,保证电脑选择固定 - 重构胜负判断逻辑,用更简洁的条件组替代重复的elif,减少冗余
- 修正得分提示文本,确保得分方和提示一致
- 修复循环结束条件,任意一方达到10分时立刻终止游戏
- 增加游戏结束后的最终结果提示
内容的提问来源于stack exchange,提问作者Manpreet Singh
相关产品推荐
相关产品推荐

