购物清单程序开发问题:移除项需仅显示首尾字符
解决方案
你的核心需求是把"移除项"的逻辑改成标记项为已完成(仅显示首尾字母),而非真的从列表中删除元素。以下是修改后的代码及关键说明:
修改后的完整代码
add_item = [] choice = 0 while True: choice = int(input('Welcome to your Shopping list! \n 1) Add Item \n 2) Check Off Item \n 3) Print list \n 4) Exit \n Enter a Choice: ')) if choice == 1: add = input('What will you add to the list? ') add_item.append(add) elif choice == 2: # 把用户输入的1-based序号转为Python的0-based索引 remove_idx = int(input('Which item will you check off? ')) - 1 if 0 <= remove_idx < len(add_item): original_item = add_item[remove_idx] # 生成掩码字符串:首尾字母+中间横线 if len(original_item) <= 2: masked_item = original_item else: masked_item = original_item[0] + '-' * (len(original_item) - 2) + original_item[-1] # 替换原列表中的项,而非删除 add_item[remove_idx] = masked_item else: print('Invalid item number!') elif choice == 3: for i, item in enumerate(add_item, 1): print(i, item.title()) elif choice == 4: print('Goodbye!') break
关键修改点
- 替换而非删除:放弃原代码的
pop()删除逻辑,改为直接修改对应索引的元素,保持列表长度不变。 - 索引适配:用户看到的是1开头的序号,输入的项号需要减1转为Python默认的0-based索引,避免越界报错。
- 掩码生成规则:
- 长度≤2的项直接保留原内容(比如"Ki"不会变成"K-i",保持自然显示)
- 长度>2时,用首字符 + (长度-2)个横线 + 尾字符拼接,保证掩码长度和原字符串一致(完美匹配
Oranges→O-----s的示例)
- 边界校验:增加索引有效性判断,防止用户输入不存在的项号导致程序崩溃。
内容的提问来源于stack exchange,提问作者Mridge458
相关产品推荐
相关产品推荐

