如何编写lookup函数查找二元元组列表首元素?解决名称未定义错误
解决lookup函数的"名称未定义"错误及逻辑问题
嘿,我看你在做一个简单的单词查询系统时遇到了点麻烦,主要是lookup函数里的变量未定义错误,还有几处循环逻辑的小问题,我来帮你理顺清楚:
先说说错误的核心原因:
- 在
lookup(List)里,你写了print(d, "means", #description)——这里的#description是注释,而且你压根没定义描述对应的变量;另外,你用for d in List会直接覆盖掉之前输入的要查找的单词d,根本没法正确匹配到目标元组。 inputfun(List)里的循环逻辑也错了:你用for b in List:遍历的是列表里的元组,但你输入的b是单词,应该检查元组的第一个元素是否等于输入的b,而不是直接拿输入的单词当迭代变量。
修正后的完整代码:
def TupletoList(): List = [] menufun(List) def menufun(List): print(""" Alternatives ----------- 1. Insert 2. Search 3. Exit """) try: val = int(input("Choose an alternative by inputting its assigned number: ")) except ValueError: print("请输入有效的数字!") menufun(List) return if val == 1: inputfun(List) elif val == 2: lookup(List) elif val == 3: print("程序即将退出...") return else: print("无效选项,请重新选择!") menufun(List) def inputfun(List): word = input("输入单词: ") # 检查单词是否已存在:遍历列表中的元组,对比第一个元素 for item in List: if item[0] == word: print("这个单词已经在列表里啦") menufun(List) return # 如果单词不存在,输入描述并添加到列表 description = input("输入单词描述: ") List.append((word, description)) print(f"更新后的列表: {List}") menufun(List) def lookup(List): target_word = input("输入你要查询的单词: ") found = False for item in List: if item[0] == target_word: print(f"{target_word} 的意思是 {item[1]}") found = True break if not found: print(f"列表里找不到 '{target_word}' 这个单词哦") menufun(List) # 启动程序 TupletoList()
关键修改点说明:
- lookup函数的修正:
- 把输入的目标单词改名为
target_word,避免和循环迭代变量冲突; - 遍历列表时用
item指代每个元组,直接用item[1]获取元组的第二个元素(也就是描述),不需要额外定义变量; - 加了未找到单词的提示,查询完自动回到菜单。
- 把输入的目标单词改名为
- inputfun函数的修正:
- 把变量名改成
word和description,代码可读性更高; - 遍历列表时检查每个元组的第一个元素
item[0]是否等于输入的单词,而不是错误地用输入的单词当迭代变量; - 找到重复单词后直接返回菜单,避免后续代码乱跑。
- 把变量名改成
- 其他小优化:
- 给输入数字的地方加了异常处理,防止用户输入非数字导致程序崩溃;
- 修正了菜单选项的标点,统一用点号;
- 优化了提示信息,让用户更清楚当前在做什么;
- 去掉了没必要的
funcex(List),直接用return退出更合理。
这样改完之后,你的程序就能正常执行插入和查询操作,再也不会出现"名称未定义"的错误啦!
内容的提问来源于stack exchange,提问作者Martin_B




