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

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

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.07.25 12:07:34