如何在Python中实现从枚举列表接收用户输入?
用enumerate()实现序号选择列表项的可行方案
完全可行,不过你的代码有几个问题需要修正,下面是具体分析和改进后的实现:
原代码的问题
- 用户输入的是字符串类型,而
enumerate(market['addresses'])返回的是(索引, 元素)格式的元组,直接用in判断永远匹配不上。 - 循环中的
address变量最后只会保留列表的最后一个元素,就算选对序号,输出的也不是用户选中的地址。 - 没有处理用户输入非数字的情况,容易触发类型错误。
修正后的代码
# 示例数据,实际根据你的market字典调整 market = {'addresses': ['123 Main Street', '456 Oak Avenue', '789 Pine Road']} print("Which house do you want to sell") # 使用enumerate从1开始生成序号,方便用户选择 for number, address in enumerate(market['addresses'], 1): print(f"{number} -> {address}") # 循环确保用户输入有效 while True: user_input = input("> ") # 先验证输入是否为数字 if user_input.isdigit(): selected_num = int(user_input) # 检查序号是否在有效范围内 if 1 <= selected_num <= len(market['addresses']): # 通过序号-1得到列表索引,获取对应地址 target_address = market['addresses'][selected_num - 1] print(f"Sold {target_address}") break else: print(f"请输入1到{len(market['addresses'])}之间的有效序号") else: print("请输入有效的数字序号")
关键改进点
- 先验证输入是否为数字,再转换为整数,避免类型错误
- 通过
序号-1直接访问列表索引,比用enumerate做判断更高效直观 - 用
while True循环确保用户输入有效,直到选择正确为止
内容的提问来源于stack exchange,提问作者Isaac England
相关产品推荐
相关产品推荐

