Warning: file_get_contents(/data/phpspider/zhask/data//catemap/9/loops/2.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
Python 如何重复for循环_Python_Loops_Repeat - Fatal编程技术网

Python 如何重复for循环

Python 如何重复for循环,python,loops,repeat,Python,Loops,Repeat,我对Python有一个问题。我尝试多次重复for循环。我在循环中有一个条件,如果条件为真,循环应该重新开始。我只需要一个for循环的解决方案。例如: for i in range (10): if i==4: i=0 print(i) 不幸的是,这不起作用 输出应该是:0 1 2 3 0 1 2 0 1 2 3…在循环的底层将贯穿变量i转换为0并不意味着在下一次迭代中变量应该是0,因为在每次迭代中python都会自动重新分配它 对于这类任务,您可以使用一种更具

我对Python有一个问题。我尝试多次重复for循环。我在循环中有一个条件,如果条件为真,循环应该重新开始。我只需要一个for循环的解决方案。例如:

for i in range (10):
    if i==4:
        i=0
    print(i) 
不幸的是,这不起作用


输出应该是:
0 1 2 3 0 1 2 0 1 2 3…

在循环的底层将贯穿变量
i
转换为0并不意味着在下一次迭代中变量应该是0,因为在每次迭代中python都会自动重新分配它

对于这类任务,您可以使用一种更具python风格的方法

或者您可以使用
yield
返回生成器:

>>> def range_printer(r,N):
...     a=cycle(range(r))
...     for i in range(N*r):
...         yield next(a)
... 
>>> list(range_printer(4,3))
[0, 1, 2, 3, 0, 1, 2, 3, 0, 1, 2, 3]

在循环的最底层将贯穿变量
i
转换为0并不意味着在下一次迭代中变量应为0,因为在每次迭代中python都会自动重新分配它

对于这类任务,您可以使用一种更具python风格的方法

或者您可以使用
yield
返回生成器:

>>> def range_printer(r,N):
...     a=cycle(range(r))
...     for i in range(N*r):
...         yield next(a)
... 
>>> list(range_printer(4,3))
[0, 1, 2, 3, 0, 1, 2, 3, 0, 1, 2, 3]

在循环中写入循环的变量(
i
)始终不是一个好主意(这包括我熟悉的所有语言)

尝试改用while循环:

i = 0
while i < 10:
    i += 1
    if i == 4:
        i = 0
或使用循环时常见的模运算符:

i = 0
while True:
    print(i % 4)
    i += 1

在循环中写入循环的变量(
i
)始终不是一个好主意(这包括我熟悉的所有语言)

尝试改用while循环:

i = 0
while i < 10:
    i += 1
    if i == 4:
        i = 0
或使用循环时常见的模运算符:

i = 0
while True:
    print(i % 4)
    i += 1
使用以下内容的版本:

使用以下内容的版本:


仍然itertools.cycle可能是OP想要/应该使用的。而且你不能真正更改i变量,因为它是由范围动态生成的。为什么人们总是说你不能更改(重新绑定)i??你当然可以。打印前将i设置为8,您将看到8已打印。唯一的问题是,该范围产生的下一个值与我设置的值无关。@Veky确实如此,但这是另一种情况,请检查编辑!谢谢大家的关注!仍然itertools.cycle可能是OP想要/应该使用的。而且你不能真正更改i变量,因为它是由范围动态生成的。为什么人们总是说你不能更改(重新绑定)i??你当然可以。打印前将i设置为8,您将看到8已打印。唯一的问题是,该范围产生的下一个值与我设置的值无关。@Veky确实如此,但这是另一种情况,请检查编辑!谢谢大家的关注!哎呀,总的来说,你想做的事情听起来是个坏主意。结构化编程通常不能很好地处理
goto
continue
break
,更不用说随机地修改循环索引了。在这个问题上有许多不同的看法。此外,考虑<代码>打印[x(4)范围(10)] /<代码>一个更大的Python方式:)tobase>什么是错误的代码>继续< /代码>和<代码>破解< /代码>?@ MKRIGER1可能是代码>过滤器< /代码>和<代码>下< /代码>是更好的抽象。@ MKRIGER1:有很多关于它的文献,从EWD文件到。TL;主要的争论点是,提前退出通常会破坏结构化编程,因为结构化编程最干净,只有一个入口和一个出口。当然也有一些时候,
中断
,这确实是一个好主意,但我怀疑OP暂时远离他们会更好。我已经尝试了一段时间,但是TLE,所以我的算法可能会有问题,你试图做的事情听起来总的来说是个坏主意。结构化编程通常不能很好地处理
goto
continue
break
,更不用说随机地修改循环索引了。在这个问题上有许多不同的看法。此外,考虑<代码>打印[x(4)范围(10)] /<代码>一个更大的Python方式:)tobase>什么是错误的代码>继续< /代码>和<代码>破解< /代码>?@ MKRIGER1可能是代码>过滤器< /代码>和<代码>下< /代码>是更好的抽象。@ MKRIGER1:有很多关于它的文献,从EWD文件到。TL;主要的争论点是,提前退出通常会破坏结构化编程,因为结构化编程最干净,只有一个入口和一个出口。当然也有一些时候,这里有一个
中断
,实际上这是一个好主意,但我怀疑OP暂时远离他们会更好。我已经尝试了一段时间,但是TLE,所以我的算法可能会有问题