Python - 在 for 循环中增加范围下限

Python - Increment lower range boundary in a for loop

我正在尝试在 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' 循环中使用它,因此理想情况下,该解决方案可以与之配合使用。

提前致谢!

尝试:

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

等等...

不行! 第一次输入时,它计算 "range(start, 6)" 并使用该结果!所以即使 如果你在完成后更改 "start"!

你可以做的是为你的目的使用一个 while 循环

start = 0  
reset = bool

while start<6:
    print(i)

    if i > 4:
        reset = True

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

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

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

在该代码中,您实际上有一个 outer 循环来管理重置。到了reset的时候,修改下一个外层循环的参数,跳出内层循环即可:

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

问题

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

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

尝试单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

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