我知道这似乎很简单而且很简单,很抱歉,如果我在浪费每个人的时间,但是我被困住了,已经有几个小时了。
我有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
请记住,如图所示,我确实需要这四个循环。
我应该在印刷品中放入什么?我现在觉得很愚蠢,因为这似乎是一个简单的数学问题,但我似乎无法找出解决方案。 非常感谢。
编辑:回答所有评论,让我说:
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上进行的操作才能得到我的结果。我希望它更清晰一些。
答案 0 :(得分:1)
首先,有一种直接直接的方法:
counter = 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(counter)
counter += 1
如果我们不想这样做,那么我们可能会注意到,就好像您是在混合基数(而不是基数10)中写数字一样。好像您的电话号码是
A B C D
| | | |__ base 118
| | |____ base 7
| |______ base 118
|________ base 7
要将数字从此混合基数转换为10基数,您可以这样做
def convert(a, b, c, d):
return d + 7 * c + 118 * 7 * b + 7 * 118 * 7 * a
(或反转数字和字节序)。
所以你可能会做
for a in range (0,7):
for b in range (118):
for c in range (0,7):
for d in range (118):
print(d + 7 * c + 118 * 7 * b + 7 * 118 * 7 * a)
答案 1 :(得分: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>
如果要从打印开始,请在公式中添加1。
如果范围从1而不是0开始,请在公式中使用(a-1)
/ (b-1)
/ (c-1)
/ (d-1)
。
答案 2 :(得分:0)
一个简单的解决方案(采用您正在执行的格式)将是:
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))
打印使用cstyle格式,其中 这将产生: 或者,您可以将值保存在列表中,然后一次打印一个。 这给出了: 如果您需要对值进行大小排序,则可以myrange
运行从1开始到x %d
是整数%s
是字符串等,并且%
之后的参数中包含了子元素。 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)
答案 3 :(得分:0)
我想更简单的方法是:
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, 3)
来代替(1,4)
。
答案 4 :(得分:0)
另一种实现方法是使用生成器:
>>> 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
如果您确实不需要丑陋的4+级嵌套itertools.product
循环(如果您要舍弃可迭代对象中的值而只想计数),那么for
会更好: / p>
>>> for i, _ in enumerate(product(range(3), range(2))):
print(i+1)
1
2
3
4
5
6