Python主函数调用其他函数及主函数字典跨函数访问问题
Python函数调用与作用域问题修正
核心问题分析
- 函数定义顺序错误:
lookup_player在main()和if __name__ == '__main__'之后定义,导致调用时函数未被识别。 - 变量作用域问题:
brave_roster是main函数的局部变量,外部无法直接访问,需通过函数参数传递。 - 函数参数不匹配:
lookup_player要求两个参数,但原调用仅传入一个。 - 函数内部逻辑错误:重复的
if choice ==1判断,以及错误的字典访问语法brave_roster(player_look)。 - 流程逻辑混乱:菜单选择的后续操作应在
main内部处理,而非在外部提前调用函数。
修正后的代码
def lookup_player(brave_roster): player_look = input("Enter the name of the player you want to look up:") # 用字典get方法直接查找,自动处理球员不存在的情况 stats = brave_roster.get(player_look, "N/A") print(f"{player_look}'s stats: {stats}") return brave_roster 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:")) # 根据用户选择执行对应操作 if choice == 1: brave_roster = lookup_player(brave_roster) elif choice == 2: print("Add player feature coming soon!") elif choice == 3: print("Remove player feature coming soon!") else: print("Invalid choice!") print("Thanks for using my Braves Stats.") # 正确的程序入口 if __name__ == '__main__': main()
关键修改说明
- 调整函数定义顺序:将
lookup_player放在main函数之前,确保调用时函数已被定义。 - 修复作用域问题:在
main内部调用lookup_player时,将brave_roster作为参数传递,让函数能访问该字典。 - 简化查找逻辑:使用字典的
get方法直接查询球员信息,避免冗余判断,同时兼容球员不存在的场景。 - 梳理流程逻辑:将菜单选择后的操作放在
main内部执行,符合程序从上到下的执行逻辑。 - 修正返回值语法:原代码中
return brave_roster(player_look)是错误写法,改为返回处理后的字典(若后续需要修改字典,可在此返回更新后的版本)。
内容的提问来源于stack exchange,提问作者Pislibsco
相关产品推荐
相关产品推荐

