石头剪刀布游戏循环异常求助:电脑仅生成一次随机选择
问题分析与修复方案
你的代码存在几个关键逻辑问题,导致电脑仅生成一次随机选择、后续忽略玩家输入:
games_played变量未初始化就直接使用,运行时会触发未定义错误- 循环内调用
get_choices()后,没有将新获取的玩家/电脑选择赋值给choices,始终使用第一次的选择数据 result仅在程序开头计算了一次,循环内未更新,导致每次打印的都是第一局的结果- 循环内调用
check_win时未接收返回值,也没有输出每一局的对战结果
修正后的完整代码
import random def get_choices(): player_choice = input("Enter a choice (rock, paper, scissors): ") options = ["rock", "paper", "scissors"] computer_choice = random.choice(options) answers = {"player": player_choice, "computer": computer_choice} return answers def check_win(player, computer): print(f"You chose {player}, Computer chose {computer}") if player == computer: return "It's a tie!" elif player == "rock": if computer == "scissors": return "Rock smashes scissors! You win!" else: return "Paper covers rock. You lose." elif player == "paper": if computer == "rock": return "Paper covers rock! You win!" else: return "Scissors cut paper. You lose." elif player == "scissors": if computer == "paper": return "Scissors cut paper! You win!" else: return "Rock beats scissors. You lose." # 初始化游戏次数计数器 games_played = 0 while games_played < 5: games_played += 1 # 每局重新获取玩家和电脑的选择 choices = get_choices() # 计算当前局的对战结果 result = check_win(choices["player"], choices["computer"]) print(f"Number of games played: {games_played}") print(result) print("---") else: print("\nEnd of game")
主要修改说明
- 补充
import random(原代码遗漏,运行会报错) - 初始化
games_played为0,解决变量未定义问题 - 将
choices和result的赋值逻辑移入循环,确保每局都获取新选择、计算新结果 - 在
check_win中添加玩家/电脑选择的打印语句,提升对战过程的可读性 - 将循环条件改为
games_played < 5,逻辑更直观,避免次数计算偏差 - 增加局间分隔线,优化输出格式
内容的提问来源于stack exchange,提问作者Michael Grayson
相关产品推荐
相关产品推荐

