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

Python跨函数调用列表实现州信息查询及字典语法排查

问题解决方案

一、原三列表结构的代码修复

你当前代码的核心错误集中在findState()函数的变量取值逻辑:

  • stateInfo()的返回值是按(州列表, 首府列表, 人口列表)顺序排列的三元组,直接赋值给单个变量会导致无法单独读取三类数据,成员判断、索引取值都会失效。
  • Python普通函数不支持通过函数名.变量名的方式读取内部定义的局部变量,stateInfo.capital、stateInfo.population的写法不符合语法规则。
  • 现有逻辑每次调用stateInfo()都会全量打印所有州的信息,和菜单2「查询单个州信息」的功能预期不符。

修正后的findState()代码如下:

def findState():
    # 解包函数返回的三个列表
    states, capitals, populations = stateInfo()
    state_search = input("Which state would you like information for?\n").strip()
    if state_search in states:
        idx = states.index(state_search)
        print(f"州名:{state_search}")
        print(f"首府:{capitals[idx]}")
        print(f"人口:{populations[idx]}")
    else:
        print("输入的州名不存在,请检查拼写后重试")

注意:原stateInfo()中直接对state列表调用sort()会破坏三个列表的索引对应关系——排序仅修改了州名列表的顺序,首府、人口列表顺序不会同步变化,最终输出的信息会完全错位。如果需要按字母序展示州信息,请将三个列表打包为元组后再排序,不要单独修改单个列表的顺序。

二、字典存储方案的语法修正

你写的字典存在三类语法错误,导致无法正常闭合、解析:

  • 键值对格式错误:外层字典的每个条目应为"州名": {首府、人口信息}的格式,你在每个州名前额外加了大括号,把正常的键值对拆成了独立的无效对象。
  • 条目内容缺失:加利福尼亚州的条目漏写了Capital键,直接写了首府名称Sacramento,不符合子字典的键值对结构。
  • 括号缺失:字典末尾、函数末尾缺少足够的闭合大括号,导致语法解析中断。

正确的字典结构示例如下:

def stateinfo():
    state_data = {
        "Alabama": {"Capital": "Montgomery", "Population": 4918689},
        "Idaho": {"Capital":"Boise", "Population": 1823594},
        "Missouri": {"Capital":"Jefferson City", "Population": 6153233},
        "North Dakota": {"Capital":"Bismarck", "Population": 766044},
        # 其余州按照上述格式补充,每个州对应一个键值对
        "California": {"Capital": "Sacramento", "Population": 39562858}, # 补全之前缺失的Capital键
        "Montana": {"Capital":"Helena", "Population": 1076891}
    } # 闭合外层字典
    return state_data

使用字典存储后,查询逻辑无需维护索引对应关系,代码更简洁:

def findState():
    state_data = stateinfo()
    state_search = input("Which state would you like information for?\n").strip()
    if state_search in state_data:
        info = state_data[state_search]
        print(f"州名:{state_search}")
        print(f"首府:{info['Capital']}")
        print(f"人口:{info['Population']}")
    else:
        print("输入的州名不存在,请检查拼写后重试")

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

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.08.31 04:15:55