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

如何在Python中实现从枚举列表接收用户输入?

用enumerate()实现序号选择列表项的可行方案

完全可行,不过你的代码有几个问题需要修正,下面是具体分析和改进后的实现:

原代码的问题

  1. 用户输入的是字符串类型,而enumerate(market['addresses'])返回的是(索引, 元素)格式的元组,直接用in判断永远匹配不上。
  2. 循环中的address变量最后只会保留列表的最后一个元素,就算选对序号,输出的也不是用户选中的地址。
  3. 没有处理用户输入非数字的情况,容易触发类型错误。

修正后的代码

# 示例数据,实际根据你的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

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.08.18 00:10:50