You need to enable JavaScript to run this app.
优惠活动
大模型
产品
解决方案
定价
更多

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

相关产品推荐
方舟 Agent Plan

超全模态模型 × Harness 升级,最新支持 Deepseek-V4.1-Flash、GLM-5.3 系列、Doubao-Seedream-5.0-pro、Kimi-K3 (部分), 限时 9.9 元起

最近更新时间:2026.05.25 08:11:58