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

如何实现三个功能函数调用主函数?Python棒球统计程序调试求助

问题分析与修复方案

原代码存在多处逻辑错误、变量作用域问题和流程缺失,导致无法正常运行,以下是具体问题和修复后的完整代码:

原代码核心问题

  • 主函数无有效返回:main()未返回用户选择和初始化的球员字典,导致主入口无法获取正确的操作指令和基础数据。
  • 各功能函数逻辑混乱:
    • 查询函数硬编码球员名称,遍历字典时重复判断同一条件,未根据用户输入的球员名做匹配查询。
    • 添加函数未检查球员是否已存在,输入流程冗余,错误依赖全局变量判断操作。
    • 删除函数错误将字符串类型的统计数据与数字做比较,存在多余输入步骤,未按球员名称执行删除操作。
  • 主入口流程缺失:未根据用户选择调用对应功能函数,仅调用了查询函数,还重新定义空字典覆盖了初始球员数据。

修复后的完整代码

def main():
    # 初始化球员名单
    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 = int(input("Please type your choice number:"))
    # 返回用户选择和球员字典,供后续函数调用
    return choice, brave_roster

def lookup_player(brave_roster):
    player_name = input("Enter the name of the player you want to look up:")
    # 直接通过字典键查询球员是否存在
    if player_name in brave_roster:
        print(f"Here are {player_name}'s stats:", brave_roster[player_name])
    else:
        print(f"N/A: {player_name} is not in the roster.")

def add_player_to_dict(brave_roster):
    player_name = input("Enter the name of the player you want to add:")
    # 先检查球员是否已存在
    if player_name in brave_roster:
        print(f"That player already exists: {player_name}")
        return
    
    # 获取并存储球员统计数据
    stats_input = input("Enter the player's stats (format: AB: xxx, R: xxx, H: xxx, HR: xxx, AVG: xxx):")
    brave_roster[player_name] = stats_input
    print(f"Successfully added {player_name} to the roster.")

def delete_in_dict(brave_roster):
    player_name = input("Enter the name of the player you want to remove:")
    # 根据球员名称执行删除操作
    if player_name in brave_roster:
        del brave_roster[player_name]
        print(f"Successfully removed {player_name} from the roster.")
    else:
        print(f"Uh typo? {player_name} does not play for us.")

if __name__ == '__main__':
    choice, brave_roster = main()
    # 根据用户选择分支调用对应功能函数
    if choice == 1:
        lookup_player(brave_roster)
    elif choice == 2:
        add_player_to_dict(brave_roster)
    elif choice == 3:
        delete_in_dict(brave_roster)
    else:
        print("Invalid choice number.")
    print("Thanks for using my Braves Stats.")

关键修复说明

  1. 主函数优化:返回用户选择和初始化的球员字典,确保后续功能函数能获取正确的基础数据。
  2. 查询函数重构:去掉冗余循环和硬编码,直接通过字典键判断球员是否存在,根据用户输入的名称输出对应统计信息。
  3. 添加函数修复:新增球员存在性检查,简化输入流程,确保新球员数据正确存入字典。
  4. 删除函数修复:根据输入的球员名称直接执行删除操作,去掉错误的数值判断和多余输入步骤。
  5. 主入口流程完善:根据用户选择分支调用对应功能函数,覆盖所有操作场景,避免无效执行。

内容的提问来源于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 12:17:54