Python调用game_hints函数后如何返回Game_process且不改变Mystery_NUM
猜数字游戏问题修复方案
现有代码核心问题
- 主流程
Game_Process的循环逻辑错误:每执行一次循环不管本轮是否猜中,都会重新生成随机数Mystery_NUM,这是调用完hint返回后目标数字被重置的核心原因 game_hints函数没有定义形参,调用时传入的用户猜测值、目标数字无法被函数接收,函数内直接访问外部变量会触发报错game_hints内误用了未定义的points变量,实际应该操作全局积分变量SCORE- 猜错后没有设置当前轮次的重试逻辑,直接进入下一轮循环生成新数字
- 随机数生成逻辑有偏差:
random.randrange(10)生成的是0-9的整数,和提示的猜数范围1-10不符
具体修改步骤
- 调整
Game_Process的循环嵌套结构:外层循环控制总轮次,内层循环控制单轮猜数字的重试逻辑,只有猜中后才跳出内层循环进入下一轮、生成新的随机数 - 给
game_hints增加两个形参player_guess和Mystery_NUM,接收调用时传入的参数 - 修复
game_hints内的变量错误,将points改为SCORE,补充用户不购买线索的分支逻辑 - 调整随机数生成逻辑为
random.randrange(1,11),匹配1-10的猜数范围
修复后完整可运行代码
import random SCORE = 0 ROUNDS = 1 def player_stats(): print(f"SCORE: {SCORE} | ROUNDS: {ROUNDS}") def game_hints(player_guess, Mystery_NUM): print("Would you like purchase a hint for 5 points? [1=Yes/2=No]: ") USER_HINT = int(input()) global SCORE if USER_HINT == 1: SCORE -= 5 if Mystery_NUM % 2 == 0: divisibility = "even" else: divisibility = "odd" if player_guess > Mystery_NUM: value = "smaller" else: value = "larger" print(f"CLUE: Mystery Number is {divisibility} and try a {value} guess | -5 POINTS") else: print("You choose not to buy hints, keep guessing!") def Game_Process(): global ROUNDS, SCORE while ROUNDS <= 10: # 每轮仅生成一次目标数字,不会被hint调用影响 Mystery_NUM = random.randrange(1,11) # 单轮猜数字的内层重试循环 while True: print("Guess the num [1-10]: ") USER_GUESS = int(input()) if USER_GUESS == Mystery_NUM: print("\nGood Job! +10 Coins!") SCORE += 10 ROUNDS += 1 player_stats() # 猜中后跳出内层循环,进入下一轮 break else: print("Wrong! Try Again") game_hints(USER_GUESS, Mystery_NUM) # 10轮全部结束触发游戏结束 print("Game Over!") Game() def Game(): user_opt = input("\"Welcome to Guess Game\" \nPress [Y] to Play or [N] to Exit: ").lower() if user_opt == "n": print("Good bye!") exit() elif user_opt == "y": Game_Process() else: print("Invalid Input!") Game() Game()
内容的提问来源于stack exchange,提问作者Timy Villarmia
相关产品推荐
相关产品推荐

