list1 = [1,2,3,4]
    需求:显示这个list,然后让人选,输出选择的结果,选过的不要再选了
    (隐含需求:防止用户胡乱输入)

    其实面对这个需求,不是特别明确,会产生以下3种需求:

    需求1:用户选择后,显示的时候还是1,2,3,4,选择的时候提示已经输过了
    需求2:用户选择后(比如选择1),显示的是2,3,4,原始内部数据是,2,3,4,输入提示已经输入过了
    需求3:用户选择后(比如选择1),显示的是2,3,4,原始内部数据还是1,2,3,4,输入提示已经输入过了

    面对需求1:我们只要造一个集合出来,把已经选择的放进去,然后用户输入的时候,判断在不在里面就行了

    面对需求2:我们可以使用pop这个方法,一箭双雕,一方面拿到数据,一方面剔除源数据
    但是这样会导致一个问题,你无法防止用户胡乱输入!!!
    因为用户胡乱输入的时候 ,你用的是in,但是pop之前剔除过了,所以面对list1 =[2,3,4]的时候,
    用户选择1,你就会很难受,除非你引入更复杂的逻辑,否则没有办法区别1到底是不在还是胡乱输入的
    (——————这里想到更复杂逻辑的方法了!!!后面说)
    但是需求2仍然有借鉴意义,比如,我们抽奖的时候,奖池是可以用这个方法实现一箭双雕的
    还有抽牌,打牌的时候,都可以用pop,非常好用!!!

    面对需求3:这个一方面显示的时候要是删除过的,一方面因为为了防止胡乱输入,还不能动源数据:
    此时创建两个列表,一个用来存放已经选择过的selected,一个用来遍历源数据list1,当item在selected的时候
    就不放进去list,不在的时候放进list
    遍历这个list,如果item 在selected集合中,跳过这个循环,否则的话添加这个元素进list
    最后用”,”join一下这个list,这样的话合成的字符串,你最后来个print就可以

    1. list1 = [1,2,3,4]
    2. selected = {}
    3. list = []
    4. while True:
    5. for item in list1:
    6. if item in selected:
    7. continue
    8. list.append(item)
    9. str = ','.join(list)
    10. if not str:
    11. print('你已经选完了,不能再选了')
    12. break
    13. user = int(input('以下数字供您选择:{},请选择一个数'.format(str)))
    14. if user not in list1:
    15. print('选择超出范围')
    16. continue
    17. if user in selected:
    18. print('你已经选择过了')
    19. continue

    在不使用一个删除的情况下,完成这个需求!!!非常好用
    —————后续再看需求3的这个方法,觉得不好,完全可以不用遍历和创建,仅用2个变量完成

    1. list1 = [1,2,3,4]
    2. selected = set()
    3. while True:
    4. if not list1:
    5. break
    6. print('以下数据供您选择:{}'.format(list1))
    7. userinput = int(input('请选择您需要输入的数据:'))
    8. if userinput not in list1:
    9. if userinput not in selected:
    10. print('选择超出范围')
    11. continue
    12. print('您已经选过了')
    13. continue
    14. selected.add(list1.pop(list1.index(userinput)))