【问题标题】:Python - Increment lower range boundary in a for loopPython - 在for循环中增加下限边界
【发布时间】:2020-09-01 07:52:55
【问题描述】:

我正在尝试在 for 循环期间逐渐增加范围的下限。据说这就是它的工作方式(我是 Python 新手,所以假设完全无知):

start = 0
reset = bool

for i in range(start, 6):
    print(i)

    if i > 4:
        reset = True

    if reset == True:
        start += 1
        i = start

理想情况下,输出如下:

0、1、2、3、4、5 重置

1、2、3、4、5 重置

2、3、4、5 *重置

我尝试了上面的代码,但无济于事..

等等

这一定是可以做到的,不是吗? 请注意,我正在尝试在更复杂的嵌套“for”循环中使用它,因此理想情况下该解决方案可以使用它。

提前致谢!

【问题讨论】:

  • 不可能,因为range(start, 6) 根据 i 正在排序的初始起始值创建了一个迭代器。之后更改开始对这个数字序列没有影响。你需要一个while循环。
  • 您可以为此使用whilefor 循环的组合。
  • Python 中的 for 循环在开始下一次迭代时不关心 x 的当前值(与大多数类 C 语言不同);它只记住范围内的当前位置并分配下一个值。为了能够操作循环变量,您需要使用一个 while 循环,它不会对任何变量施加任何控制(它只是评估您给它的条件)。

标签: python loops for-loop increment


【解决方案1】:

试试:

for i in range(0, 6):
    for j in range(i,6):
        print("{}, ".format(j))

输出:

  • i = 0 -> j = 0 1 2 3 4 5

  • i = 1 -> j = 1 2 3 4 5

  • i = 2 -> j = 2 3 4 5

  • i = 3 -> j = 3 4 5

等等……

【讨论】:

    【解决方案2】:

    问题

    单个 for 循环将不起作用,因为 range(start, 6) 基于 i 正在排序的初始起始值创建了一个迭代器。

    之后更改开始对这个数字序列没有影响。

    尝试单个 while 循环

    start = 0
    i = start
    while i < 6:
      print(i)
      i += 1
    
      reset = i > 4
    
      if reset:
        print('reset')
        start += 1
        i = start
    

    输出

    0
    1
    2
    3
    4
    reset
    1
    2
    3
    4
    reset
    2
    3
    4
    reset
    3
    4
    reset
    4
    reset
    5
    reset
    

    【讨论】:

      【解决方案3】:

      不会工作! 第一次进入时,它评估“范围(开始,6)”并使用该结果!所以即使 如果你在完成后更改“开始”!

      你可以做的是使用一个while循环来达到你的目的

      start = 0  
      reset = bool
      
      while start<6:
          print(i)
      
          if i > 4:
              reset = True
      
          if reset == True:
              start += 1
              i = start
      

      【讨论】:

        【解决方案4】:

        改变循环控制变量对你没有好处,因为:

        for i in some_range:
            do_something_with(i)
        

        实际上与(类似 Python 的伪代码)相同:

        i = some_range.start
        while i != some_range.end:
            do_something_with(i)
            i = some_range.next
        

        换句话说,无论您在循环中对i 做出何种更改,循环本身都会在下一次迭代中将其丢弃。

        这样的事情可能是一个很好的起点:

        # Starting limits.
        
        start = 0
        stop = 6
        
        # Outer loop responsible for resets.
        
        while start < stop:
            # Disallow reset to start with.
        
            reset = False
        
            # Inner loop responsible for a single sequence.
        
            for i in range(start, stop):
                print(i, end=' ')
        
                 # Whatever rule you need to trigger reset.
        
                if i > 4:
                    reset = True
        
                # The actual reset that sets up and starts the next sequence.
        
                if reset == True:
                    print()
                    start += 1
                    break
        

        在该代码中,您实际上有一个管理重置的外部循环。当需要重置时,您只需修改下一个外循环的参数,然后跳出内循环:

        0 1 2 3 4 5    
        1 2 3 4 5
        2 3 4 5
        3 4 5
        4 5
        5
        

        【讨论】:

          【解决方案5】:

          range 一经声明就无法更新。或者使用while 并在循环结束时更改下限。您可以有一个单独的变量 start 用于每次初始化 i

          print("") 只是换行符

          k = 6
          i = 0
          start = 0
          while i < k:
              print(i, end="")
              i += 1
              if i == k:
                  print("")
                  start += 1
                  i = start
          

          【讨论】:

            猜你喜欢
            • 1970-01-01
            • 1970-01-01
            • 1970-01-01
            • 1970-01-01
            • 1970-01-01
            • 2014-12-12
            • 2022-01-01
            • 1970-01-01
            • 2013-11-25
            相关资源
            最近更新 更多