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

购物清单程序开发问题:移除项需仅显示首尾字符

解决方案

你的核心需求是把"移除项"的逻辑改成标记项为已完成(仅显示首尾字母),而非真的从列表中删除元素。以下是修改后的代码及关键说明:

修改后的完整代码

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

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.08.18 05:45:56