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
相关产品推荐
相关产品推荐

