如何实现三个功能函数调用主函数?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.")
关键修复说明
- 主函数优化:返回用户选择和初始化的球员字典,确保后续功能函数能获取正确的基础数据。
- 查询函数重构:去掉冗余循环和硬编码,直接通过字典键判断球员是否存在,根据用户输入的名称输出对应统计信息。
- 添加函数修复:新增球员存在性检查,简化输入流程,确保新球员数据正确存入字典。
- 删除函数修复:根据输入的球员名称直接执行删除操作,去掉错误的数值判断和多余输入步骤。
- 主入口流程完善:根据用户选择分支调用对应功能函数,覆盖所有操作场景,避免无效执行。
内容的提问来源于stack exchange,提问作者Pislibsco
相关产品推荐
相关产品推荐

