Python:从嵌套循环打印数字序列
我知道这看起来很简单,如果我浪费了大家的时间,我很抱歉,但是我被卡住了,已经好几个小时了 我有4个循环,最后我必须打印从1到结尾的所有数字。在您看到代码后,它将被清除: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
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%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%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