Python终端电影制作小游戏玩家得分无法累积叠加问题求助
问题修复方案
核心问题原因
- 输入校验顺序错误:未先校验输入是否合法就直接把用户输入的值加到总得分里,非法输入也会累积到得分中,是得分异常增长的主要原因
- 分支判断逻辑错误:用
elif score > 0作为合法输入的执行条件,初始总得分是0时第一次合法输入会直接跳过加分逻辑;TAB输入的判断写法错误,无论输入什么都会触发返回菜单的逻辑 - 函数定义位置错误:
game_menu被定义在filmClicker函数内部,每次调用制作电影逻辑都会重复定义菜单,还会导致递归调用层级不断升高 press_enter函数逻辑冗余,存在无意义的变量赋值
修复后完整代码
import random # 全局总得分初始化 total_score = 0 def press_enter(): input("\n按回车键继续...") def filmClicker(): global total_score # 先获取用户输入并做校验 user_input = int(input(">> Enter a number: ")) if user_input < 1 or user_input > 5: print(">> Not a valid number.") filmClicker() return # 校验通过后再计算本轮得分、累加到总分 round_produced = user_input + random.randint(1, 50) total_score += round_produced print(f"\n>> 本轮你制作了:{round_produced} 部电影 <<") go_back_or_menu = input(">> 按回车键继续制作,输入TAB返回菜单:").strip() if go_back_or_menu == "": filmClicker() elif go_back_or_menu.lower() == "tab": game_menu() def game_menu(): print("\n>>>>>>>>>>>>>>>>>>>> 菜单 >>>>>>>>>>>>>>>>>>>>") print(">> 输入A开始制作电影") print(">> 输入B查看当前总得分") print(">> 输入C查看当前票房") print(">> 输入D查看你的数据") press_button_menu = input("请输入选项:").strip().upper() if press_button_menu == "A": filmClicker() elif press_button_menu == "B": print(f"当前总得分 = {total_score}") press_enter() game_menu() elif press_button_menu in ["C", "D"]: # 这两个功能可后续自行补充逻辑 print("功能开发中...") press_enter() game_menu() else: print("无效选项,请重新输入") press_enter() game_menu() if __name__ == "__main__": print("TERMINAL FILM by Dominick") print("---------------------") game_menu()
改动说明
- 把全局得分变量名改为
total_score和本轮得分做区分,避免逻辑混淆 - 调整校验顺序,输入不合法直接重试,不修改总得分
- 把TAB的判断改为统一转小写后匹配,避免大小写判断遗漏
- 把
game_menu移到全局作用域,避免重复定义和递归层级问题 - 补充了菜单其他选项的兜底逻辑,避免输入C、D等选项直接跳转到制作电影页面
- 优化了提示语的可读性,删除无意义的打印操作
内容的提问来源于stack exchange,提问作者Dominick
相关产品推荐
相关产品推荐

