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

如何让Python字典添加新键时识别重复键并终止后续操作

球员管理程序添加功能修复

问题描述

用户编写了一个Python球员管理程序,使用brave_roster字典存储球员数据。核心需求是:当用户选择添加球员选项时,若输入已存在的球员名(字典的key),直接提示**"That player is already on our roster."**(中文:"该球员已在名单中。"),且不继续询问球员的stats数据,但当前代码无法实现该逻辑。

原代码如下:

def main():
# initial roster
    brave_roster = {
        "Austin Riley": "AB: 615, R: 90, H: 168, HR: 38, AVG: 0.273",
        "Ronald Acuna": "AB: 467, R: 71, H: 124, HR: 15, AVG: 0.266",
  }
    
    
    print("\t ***  Braves Stats!  ***\n")
    print("Welcome to My Braves Stats! What can I do for you?\n")
    print("  1. Search for a player")
    print("  2. Add a new player")
    print("  3. Remove a player")
    
    
    name = brave_roster
    stats = brave_roster
    choice = input("Please type your choice number:")
    if (choice == "1"):
        name = input("Enter the name of the player you want to lookup:\n")
        new_roster = lookup_player(brave_roster, name)
       
    elif (choice == "2"):
       name = input("Enter the name of the player you want to add:\n")
       stats = input("Please add the player's stats:\n")
       new_play = add_player_to_dict(brave_roster,name,stats)
    else: 
        (choice == "3")
        name = input("Enter the name of the player you want to remove:\n")
        delete_in_dict(brave_roster,name)


#my code:

    
def add_player_to_dict(brave_roster,name,stats):
   if name not in brave_roster:
        brave_roster[name] = stats
        brave_roster.update([(name, stats)])
        print("Here's", ["name"],"'s stats:\n")
    for name, stats in brave_roster.items():
        print(name, ':', stats)
        return brave_roster[name]
    else:
     if name in brave_roster.items():
        if name in brave_roster:
          brave_roster[name]= [brave_roster[name]]
        print("That player is already on our roster.")
        
    return brave_roster[name]
  
main ()

期望效果示例:

Welcome to My Braves Stats! What can I do for you?

  1. Search for a player
  2. Add a new player
  3. Remove a player
Please type your choice number:2
Enter the name of the player you want to add:
Austin Riley 
That player is already on our roster.

问题分析

  1. 逻辑顺序错误:原代码在选择添加球员时,先询问球员名后直接索要stats,未先判断球员是否存在,导致无论球员是否在名单中,用户都必须输入stats,不符合需求。
  2. add_player_to_dict函数逻辑混乱:函数内条件判断、循环和return语句位置错误,存在球员时无法正确提示,还会错误修改已有数据。
  3. 冗余与错误判断:brave_roster.update([(name, stats)])属于冗余操作(已通过brave_roster[name] = stats添加数据);name in brave_roster.items()判断错误,items()返回键值对元组,应直接用name in brave_roster判断键是否存在。

修正后的代码

def main():
    # initial roster
    brave_roster = {
        "Austin Riley": "AB: 615, R: 90, H: 168, HR: 38, AVG: 0.273",
        "Ronald Acuna": "AB: 467, R: 71, H: 124, HR: 15, AVG: 0.266",
    }

    print("\t ***  Braves Stats!  ***\n")
    print("Welcome to My Braves Stats! What can I do for you?\n")
    print("  1. Search for a player")
    print("  2. Add a new player")
    print("  3. Remove a player")

    choice = input("Please type your choice number: ")
    if choice == "1":
        name = input("Enter the name of the player you want to lookup:\n")
        lookup_player(brave_roster, name)
    elif choice == "2":
        name = input("Enter the name of the player you want to add:\n")
        # 先判断球员是否存在,存在直接提示,不询问stats
        if name in brave_roster:
            print("That player is already on our roster.")
        else:
            stats = input("Please add the player's stats:\n")
            add_player_to_dict(brave_roster, name, stats)
    elif choice == "3":
        name = input("Enter the name of the player you want to remove:\n")
        delete_in_dict(brave_roster, name)
    else:
        print("Invalid choice, please enter 1, 2, or 3.")


def add_player_to_dict(brave_roster, name, stats):
    # 主函数已判断球员不存在,直接添加数据
    brave_roster[name] = stats
    print(f"Here's {name}'s stats:\n")
    print(f"{name}: {stats}")
    return brave_roster


# 补充查询球员函数
def lookup_player(brave_roster, name):
    if name in brave_roster:
        print(f"{name}: {brave_roster[name]}")
    else:
        print("Player not found.")


# 补充删除球员函数
def delete_in_dict(brave_roster, name):
    if name in brave_roster:
        del brave_roster[name]
        print(f"{name} has been removed from the roster.")
    else:
        print("Player not found, cannot remove.")


main()

修正说明

  1. 调整主函数逻辑:选择添加球员后,先获取球员名并判断是否在字典中,存在则直接提示,不存在才询问stats并调用添加函数。
  2. 重构添加函数:简化add_player_to_dict逻辑,仅负责添加数据和反馈结果,存在性判断交给主函数处理。
  3. 补充缺失功能:原代码中lookup_player和delete_in_dict未实现,补充基础功能示例保证程序完整运行。
  4. 修复语法错误:将无效的else: (choice == "3")改为elif choice == "3",增加无效选项提示。

内容的提问来源于stack exchange,提问作者Pislibsco

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.07.25 16:47:48