Python猜数字游戏双函数自动执行 如何仅运行指定函数
问题说明
你编写的猜数字游戏包含两个核心函数:
guess:实现用户猜测电脑随机生成数字的常规玩法computer_guess:实现反向玩法,由电脑猜测用户提前选定的数字
原代码运行时两个函数会依次自动执行,需要调整代码结构实现按需选择运行指定玩法。
问题原因
原代码在全局作用域直接写了函数调用逻辑:定义完guess函数后立刻执行了获取上限、调用guess的代码,定义完computer_guess后又直接写了computer_guess(100)的调用语句。Python运行脚本时会从上到下顺序执行所有全局作用域的代码,因此两个玩法会依次自动运行。
修改方案
- 删除全局作用域下的直接函数调用代码
- 使用Python标准入口判断
if __name__ == "__main__":包裹启动逻辑,在程序启动时先让用户选择要玩的模式,再根据选择调用对应函数即可 - (可选优化)原代码中
guess函数内部的循环变量和函数同名,容易引发隐性变量冲突,修改时将内部变量重命名区分,可读性更好
修改后的完整代码如下:
import random def guess(x): random_number = random.randint(1, x) user_guess = 0 while user_guess != random_number: user_guess = int(input(f'Guess a number between 1 and {x}:')) if user_guess < random_number: print('Sorry, guess again. Too low.') elif user_guess > random_number: print('Sorry, guess again. Too high.') print(f'You guessed it bro, it was {random_number}') def computer_guess(x): low = 1 high = x feedback = '' while feedback != 'c': if low != high: comp_guess = random.randint(low, high) else: comp_guess = low # 高低边界相等时就是最终答案 feedback = input(f'Is {comp_guess} too high (H), too low (L), or correct (C)?').lower() if feedback == 'h': high = comp_guess - 1 elif feedback == 'l': low = comp_guess + 1 print(f'The computer guessed your number, {comp_guess}, correctly') if __name__ == "__main__": print("=== 猜数字游戏 ===") print("1. 你猜电脑生成的数字") print("2. 电脑猜你选定的数字") mode_select = input("请选择模式(输入1或2):") if mode_select == "1": upper_limit = int(input('请输入数字上限:')) guess(upper_limit) elif mode_select == "2": upper_limit = int(input('请输入你要猜的数字的最大上限:')) computer_guess(upper_limit) else: print("输入无效,请重新运行程序选择正确模式")
补充说明
if __name__ == "__main__":是Python脚本的标准写法,加了这个判断后,只有你直接运行当前脚本时,里面的交互逻辑才会执行;如果后续你把这个文件作为模块导入到其他代码中,游戏不会自动触发运行。- 运行修改后的脚本,会先弹出模式选择菜单,输入对应编号就只会运行你选中的单个玩法,不会出现两个函数顺次执行的问题。
内容的提问来源于stack exchange,提问作者Python Beginner
相关产品推荐
相关产品推荐

