Python:从嵌套循环打印数字序列

Python:从嵌套循环打印数字序列,python,for-loop,Python,For Loop,我知道这看起来很简单,如果我浪费了大家的时间,我很抱歉,但是我被卡住了,已经好几个小时了 我有4个循环,最后我必须打印从1到结尾的所有数字。在您看到代码后,它将被清除: for a in range (0,7): for b in range (1,118): for c in range (0,7): for d in range (1,118): print(...) 我所期望的是: 1 2 3 ... 383

我知道这看起来很简单,如果我浪费了大家的时间,我很抱歉,但是我被卡住了,已经好几个小时了

我有4个循环,最后我必须打印从1到结尾的所有数字。在您看到代码后,它将被清除:

for a in range (0,7):
    for b in range (1,118):
        for c in range (0,7):
            for d in range (1,118):
                print(...)
我所期望的是:

1
2
3
...
383292
其中383292=118*118*7*4

请记住,如图所示,我确实需要这4个循环

我应该在印刷品里放什么?我现在觉得自己很愚蠢,因为这似乎是一道简单的数学题,但我似乎想不出答案。 非常感谢

编辑:要回答所有评论,假设我有:

for a in range (0,2):
    for b in range (1,3):
        for c in range (0,2):
            for d in range (1,3):
                print(...)
我希望将以下内容作为输出:

1
2
3
...
24
我需要在a、b、c和d上找到一些操作来得到结果。我希望它更清楚一点。

一个简单的解决方案(按照您正在做的格式)是:

counter = 0 
myrange = lambda x: range(1,x+1)

for a in myrange(118):
    for b in myrange(118):
        for c in myrange(7):
            for d in myrange(4):
                counter+= 1 
                print('counter %d gives: %d = %d * %d * %d * %d'%(counter,a*b*c*d,a,b,c,d))


myrange
运行一个从1开始到x 打印使用cstyle格式,其中
%d
是一个整数
%s
是一个字符串etc,
%
后面的参数中的subs

这将产生:

counter 1 gives: 1 = 1 * 1 * 1 * 1

...

counter 389869 gives: 97468 = 118 * 118 * 7 * 1
counter 389870 gives: 194936 = 118 * 118 * 7 * 2
counter 389871 gives: 292404 = 118 * 118 * 7 * 3
counter 389872 gives: 389872 = 118 * 118 * 7 * 4

或者,您可以将值保存在列表中,然后一次打印一个值

myrange = lambda x: range(1,x+1)
output=[]
for a in myrange(118):
    for b in myrange(118):
        for c in myrange(7):
            for d in myrange(4):
                output.append(a*b*c*d)

for i in output:
   print(i)
这使得:

1
...
250632
334176
97468
194936
292404
389872
如果需要对值进行大小排序,可以这样做

output.sort()

for i in output:
   print(i)
一个简单的解决方案(按照您正在使用的格式)是:

counter = 0 
myrange = lambda x: range(1,x+1)

for a in myrange(118):
    for b in myrange(118):
        for c in myrange(7):
            for d in myrange(4):
                counter+= 1 
                print('counter %d gives: %d = %d * %d * %d * %d'%(counter,a*b*c*d,a,b,c,d))


myrange
运行一个从1开始到x 打印使用cstyle格式,其中
%d
是一个整数
%s
是一个字符串etc,
%
后面的参数中的subs

这将产生:

counter 1 gives: 1 = 1 * 1 * 1 * 1

...

counter 389869 gives: 97468 = 118 * 118 * 7 * 1
counter 389870 gives: 194936 = 118 * 118 * 7 * 2
counter 389871 gives: 292404 = 118 * 118 * 7 * 3
counter 389872 gives: 389872 = 118 * 118 * 7 * 4

或者,您可以将值保存在列表中,然后一次打印一个值

myrange = lambda x: range(1,x+1)
output=[]
for a in myrange(118):
    for b in myrange(118):
        for c in myrange(7):
            for d in myrange(4):
                output.append(a*b*c*d)

for i in output:
   print(i)
这使得:

1
...
250632
334176
97468
194936
292404
389872
如果需要对值进行大小排序,可以这样做

output.sort()

for i in output:
   print(i)

首先,有一个简单直接的方法:

计数器=1
对于范围(0,7)内的a:
对于范围(1118)内的b:
对于范围(0,7)内的c:
对于范围(1118)内的d:
打印(计数器)
计数器+=1

如果我们不想这样做,那么我们可能会注意到,这就好像你在写一个混合基数的数字(相对于基数10)。你的号码好像在表格里

A B C D
| | | |__ base 118
| | |____ base 7
| |______ base 118
|________ base 7
要将一个数字从这个混合基数转换为基数10,需要

def转换(a、b、c、d):
返回d+7*c+118*7*b+7*118*7*a
(或反转数字和尾端)

那么你可能会这么做

适用于范围内的(0,7):
对于范围(118)内的b:
对于范围(0,7)内的c:
对于范围(118)内的d:
打印(d+7*c+118*7*b+7*118*7*a)

首先,有一种简单直接的方法:

计数器=1
对于范围(0,7)内的a:
对于范围(1118)内的b:
对于范围(0,7)内的c:
对于范围(1118)内的d:
打印(计数器)
计数器+=1

如果我们不想这样做,那么我们可能会注意到,这就好像你在写一个混合基数的数字(相对于基数10)。你的号码好像在表格里

A B C D
| | | |__ base 118
| | |____ base 7
| |______ base 118
|________ base 7
要将一个数字从这个混合基数转换为基数10,需要

def转换(a、b、c、d):
返回d+7*c+118*7*b+7*118*7*a
(或反转数字和尾端)

那么你可能会这么做

适用于范围内的(0,7):
对于范围(118)内的b:
对于范围(0,7)内的c:
对于范围(118)内的d:
打印(d+7*c+118*7*b+7*118*7*a)

我想更简单的方法是:

res = 0
for a in range (0,2):
    for b in range (1,3):
        for c in range (0,2):
            for d in range (1,3):
                res += 1
                print(res)
但它最多打印16个数字,而不是24个。
你应该从0开始数到n,或者如果你想让你的循环重复3次,你应该写
(1,4)
,而不是
(1,3)

我想更简单的方法是:

res = 0
for a in range (0,2):
    for b in range (1,3):
        for c in range (0,2):
            for d in range (1,3):
                res += 1
                print(res)
但它最多打印16个数字,而不是24个。 你应该从0开始计数到n,或者如果你想循环重复3次,你应该写
(1,4)
,而不是
(1,3)

(是的,在大多数情况下计数器可能更容易,但这更酷!)

您需要知道每个循环每次迭代发生的输出量

假设您的循环有这么多个循环:

cycles_a = 7
cycles_b = 117
cycles_c = 4
cycles_d = 117
您有以下输出:

outputs_d = 1
outputs_c = outputs_d * cycles_d
outputs_b = outputs_c * cycles_c
outputs_a = outputs_b * cycles_b
如果运行此循环:

for a in range(0,cycles_a):
    for b in range(0,cycles_b):
        for c in range(0,cycles_c):
            for d in range(0,cycles_d):
                print(d*outputs_d + c*outputs_c + b*outputs_b + a*outputs_a)
您将打印:

0
1
...
<7*117*4*117 - 1>
0
1.
...
如果要从打印1开始,请在公式中添加一个

如果您的范围从1开始而不是0,请在公式中使用
(a-1)
/
(b-1)
/
(c-1)
/
(d-1)

(是的,计数器在大多数情况下可能更容易,但这更酷!)

您需要知道每个循环每次迭代发生的输出量

假设您的循环有这么多个循环:

cycles_a = 7
cycles_b = 117
cycles_c = 4
cycles_d = 117
您有以下输出:

outputs_d = 1
outputs_c = outputs_d * cycles_d
outputs_b = outputs_c * cycles_c
outputs_a = outputs_b * cycles_b
如果运行此循环:

for a in range(0,cycles_a):
    for b in range(0,cycles_b):
        for c in range(0,cycles_c):
            for d in range(0,cycles_d):
                print(d*outputs_d + c*outputs_c + b*outputs_b + a*outputs_a)
您将打印:

0
1
...
<7*117*4*117 - 1>
0
1.
...
如果要从打印1开始,请在公式中添加一个


如果您的范围从1开始而不是0,请在公式中使用
(a-1)
/
(b-1)
/
(c-1)
/
(d-1)

另一种方法是使用生成器:

>>> def infinite_counter(n=0):
        while True:
            n += 1
            yield n

>>> counter = infinite_counter()

>>> for i in range(3):
       for j in range(2):
           print(next(counter))
1
2
3
4
5
6
itertools.product
甚至更好,如果你真的不需要为循环使用难看的嵌套
的4+级别(如果你丢弃iterables中的值,只需要计数):


另一种方法是使用发电机:

>>> def infinite_counter(n=0):
        while True:
            n += 1
            yield n

>>> counter = infinite_counter()

>>> for i in range(3):
       for j in range(2):
           print(next(counter))
1
2
3
4
5
6
itertools.product
甚至更好,如果你真的不需要为
循环使用难看的嵌套
的4+级别(如果你丢弃iterables中的值,只需要计数):


您想只打印一次号码吗?或者多次?可能从一个小范围开始,并提供
输入
输出
?您的问题不太清楚,但您是否只需要在开始时声明
e=1
,打印e,然后在打印后打印
e+=1