Python列表新增项全局调用及猜数字游戏多用户功能实现咨询
嘿,作为Python入门新手能想到这么多优化点真的超棒!我来帮你一步步实现这些功能,代码都是简单易懂的,完全适合新手学习~
实现你的需求分这几步来
1. 全局存储玩家姓名列表
首先我们需要一个全局列表来保存所有玩过游戏的玩家姓名,这样不管游戏怎么重启,我们都能记住这些用户。你可以在函数外面定义这个列表,需要修改它的时候用global关键字声明一下就行(新手用这个方式最直观)。
2. 全程使用玩家姓名
第一次启动游戏时先询问玩家姓名,如果是新用户就把名字加到全局列表里;如果是老用户,直接欢迎回来就行。之后游戏全程都用这个名字和玩家互动,比如猜中后的祝贺语,结束时的道别。
3. 猜中后不结束,支持重玩+切换用户
猜中数字后先给玩家祝贺,然后分两步询问:
- 要不要再玩一次?如果说“否”,直接结束游戏;
- 如果要重玩,再问是不是同一个玩家:是就直接重启游戏,不是就重新获取新的玩家姓名。
完整代码示例(带注释)
# 全局列表:存储所有玩过游戏的玩家姓名 player_names = [] # 当前正在游玩的玩家姓名 current_player = "" def get_player_name(): """获取玩家姓名,新用户自动加入全局列表""" global current_player, player_names name = input("请输入你的姓名:").strip() if not name: print("姓名不能为空哦!") return get_player_name() # 递归重新输入 if name not in player_names: player_names.append(name) print(f"🎉 欢迎新玩家 {name} 加入游戏!") else: print(f"👋 欢迎回来,{name}!") current_player = name def guess_number_game(): """数字猜谜游戏核心逻辑""" import random secret_number = random.randint(1, 100) attempts = 0 print(f"\n🎮 {current_player},开始猜数字啦!数字范围是 1-100") while True: try: guess = int(input("请输入你的猜测:")) attempts += 1 if guess < secret_number: print("👉 太小啦,再大胆一点!") elif guess > secret_number: print("👉 太大啦,再保守一点!") else: print(f"🥳 太棒了,{current_player}!你用了 {attempts} 次就猜中了数字 {secret_number}!") break except ValueError: print("⚠️ 请输入有效的整数哦!") def main(): """游戏主循环""" global current_player # 第一次启动先获取玩家姓名 get_player_name() while True: # 启动一局游戏 guess_number_game() # 询问是否重玩 play_again = input("\n要不要再玩一次?(是/否):").strip().lower() if play_again != "是": print(f"😘 感谢游玩,{current_player}!下次再见~") break # 询问是否切换玩家 same_player = input("还是同一个玩家吗?(是/否):").strip().lower() if same_player != "是": get_player_name() # 启动游戏 if __name__ == "__main__": main()
关键细节说明
- 全局列表的使用:
player_names是全局变量,在get_player_name函数里用global声明后就能修改它,这样不管多少次重启游戏,列表里的用户都不会丢失(当然,关闭程序后数据会消失,如果想永久保存可以用文件或者数据库,新手暂时不用考虑这个)。 - 姓名输入校验:加了空输入的判断,避免玩家输入空名字。
- 异常处理:防止玩家输入非整数导致程序崩溃,用
try-except捕获ValueError。
新手扩展小建议
如果想进一步优化,可以试试这些:
- 用字典代替列表,存储每个玩家的最佳成绩(比如
player_stats = {"张三": 5, "李四": 3},5是张三最少猜中次数); - 每次游戏结束后显示当前玩家的历史最佳成绩;
- 允许玩家查看所有玩家的排行榜。
内容的提问来源于stack exchange,提问作者EasyC
相关产品推荐
相关产品推荐

