跳转至内容
  • 社区首页
  • 版块
  • 最新
  • 标签
  • 热门
折叠

GitHub中文论坛

  1. 主页
  2. 版块
  3. 技术交流
  4. Python新手请教 - 数7游戏

Python新手请教 - 数7游戏

已定时 已固定 已锁定 已移动 技术交流
4 帖子 3 发布者 1.7k 浏览
  • 从旧到新
  • 从新到旧
  • 最多赞同
回复
  • 在新帖中回复
登录后回复
此主题已被删除。只有拥有主题管理权限的用户可以查看。
  • cyonsoftC 离线
    cyonsoftC 离线
    cyonsoft
    写于 最后由 编辑
    #1

    '''
    我是Python小白 小影子,很高兴认识各位前辈。
    最近我学到推导式,想结合列表推导式编一个数7游戏,目标是在指定列出所有不含7数字和倍数的数字。
    '''

    list1 = [i1 for i1 in range(0,81) if i1 % 7 != 0]

    for i2 in list1:
    CheckNum = str(i2)
    if CheckNum.find('7') != -1:
    list1.remove(int(CheckNum))
    print(list1)

    #但是程序会跳出[72, 74, 76, 79], 我不知道问题出在哪里。请前辈们指教。

    1 条回复 最后回复
    0
    • k1995K 离线
      k1995K 离线
      k1995
      写于 最后由 编辑
      #2

      我改了下代码,第二行 for i2 in list1 变成了 for i2 in list1.copy()。就没问题了

      list1 = [i1 for i1 in range(0,81) if i1 % 7 != 0]
      for i2 in list1.copy():
          CheckNum = str(i2)
          if CheckNum.find('7') != -1:
              list1.remove(int(CheckNum))
      print(list1)
      
      k1995K Q1988kQ 2 条回复 最后回复
      1
      • k1995K k1995

        我改了下代码,第二行 for i2 in list1 变成了 for i2 in list1.copy()。就没问题了

        list1 = [i1 for i1 in range(0,81) if i1 % 7 != 0]
        for i2 in list1.copy():
            CheckNum = str(i2)
            if CheckNum.find('7') != -1:
                list1.remove(int(CheckNum))
        print(list1)
        
        k1995K 离线
        k1995K 离线
        k1995
        写于 最后由 k1995 编辑
        #3

        这个是因为在for循环中,如果你删除列表中一个元素,列表的结构发生了变化。后面的元素向前移,元素的索引发生变化,但你依然按照原来的索引进行遍历,就会有漏网之鱼,所以就出现了你说的这个问题。

        这是Python的一个坑,详情可以参考
        https://blog.csdn.net/weixin_44520259/article/details/89640114
        https://blog.csdn.net/weixin_45912291/article/details/108813240
        Java中这种对列表这么操作会直接报错,叫fail-fast

        1 条回复 最后回复
        0
        • k1995K k1995

          我改了下代码,第二行 for i2 in list1 变成了 for i2 in list1.copy()。就没问题了

          list1 = [i1 for i1 in range(0,81) if i1 % 7 != 0]
          for i2 in list1.copy():
              CheckNum = str(i2)
              if CheckNum.find('7') != -1:
                  list1.remove(int(CheckNum))
          print(list1)
          
          Q1988kQ 离线
          Q1988kQ 离线
          Q1988k
          写于 最后由 编辑
          #4

          @k1995 大佬,能合作下嘛

          1 条回复 最后回复
          0
          回复
          • 在新帖中回复
          登录后回复
          • 从旧到新
          • 从新到旧
          • 最多赞同


          • 登录

          • 第一个帖子
            最后一个帖子
          0
          • 社区首页
          • 版块
          • 最新
          • 标签
          • 热门