如何通过输入枚举编号获取Python列表对应元素值
问题背景
需求为通过选择界面展示的枚举编号(1、2或3)获取列表内的对应值,要求choosen变量最终存储的是列表中的对应元素,而非用户输入的字符内容。原有实现代码无法达到预期效果,需要修正。
原有错误代码如下:
List = ['apple', 'berry', 'cherry'] List_Display = '\n'.join(['[{}]{}'.format(n,i) for n, i in (enumerate(List,start=1))]) print(List_Display) choosen = [] choose = input('Enter choices: ') if choose in List_Display: choosen.append(choose) print('choosen:',choosen) else: print('No item choosed')
原有代码缺陷
- 判断逻辑错误:
if choose in List_Display仅检查用户输入的字符串是否存在于拼接后的展示文本中,没有实现编号到列表元素的映射转换 - 无有效输入校验:用户输入非数字、超出编号范围的内容时,原有逻辑会出现误判,甚至抛出运行时错误
- 存储内容不符合要求:最终追加到
choosen里的是用户输入的原始字符串(比如输入1时存储的是字符"1",而非对应的列表元素"apple")
正确实现方案
# 避免使用List作为变量名,防止覆盖Python内置list类型引发异常 fruit_list = ['apple', 'berry', 'cherry'] # 生成带编号的选项展示文本 list_display = '\n'.join([f'[{n}]{item}' for n, item in enumerate(fruit_list, start=1)]) print(list_display) choosen = [] # 获取输入时自动过滤首尾多余空格 choose = input('Enter choices: ').strip() # 分层做输入合法性校验 if choose.isdigit(): choose_num = int(choose) # 编号从1开始计数,对应列表索引需要减1 if 1 <= choose_num <= len(fruit_list): selected_item = fruit_list[choose_num - 1] choosen.append(selected_item) print('choosen:', choosen) else: print('No item choosed') else: print('No item choosed')
实现逻辑说明
- 输入获取阶段增加
strip()处理,自动过滤用户误输入的首尾空格,提升交互容错性 - 先用
isdigit()判断输入是否为纯数字,避免字符串转整数时抛出类型错误 - 转成整数后判断编号是否落在1到列表长度的合法区间内,后续如果增减列表选项,不需要修改判断逻辑即可自动适配
- 合法编号通过
编号-1取到对应的列表原始元素存入choosen,完全满足存储列表元素而非输入字符的要求 - 所有非法输入(非数字、超出范围的数字)都会触发无有效选择的提示,逻辑闭环无遗漏
内容的提问来源于stack exchange,提问作者Kalious Linoox
相关产品推荐
相关产品推荐

