我有这段代码,可以生成3位数字的所有组合
for n1 in range(10):
for n2 in range(10):
for n3 in range(10):
print(n1,n2,n3)
input()
因此这将生成001,002,003 ...一直到999,并且工作正常,我的问题是如何扩展此代码以使用可以输入的自定义数字位数运行?例如,如果我说5,则应该运行5 for循环并打印所有结果,以获得00001,00002 ...99999。那么,如何动态创建更多的for循环而不自己编写?
答案 0 :(得分:4)
您可以使用递归
[...document.getElementById('options').children].forEach(item => {
item.setAttribute('type', 'checkbox')
})
答案 1 :(得分:3)
使用product
模块的itertools
:
from itertools import product
for i in product(range(10),repeat=5):
print(*i,sep='')
快得多:
from itertools import product
l = list(product(range(10),repeat=5))
print('\n'.join([''.join(map(str,i)) for i in l]))
答案 2 :(得分:2)
您可以使用format
使代码独立于要打印的最大数量。与for
的{{1}}模块相比,在range
上使用直接product
循环似乎非常有效,因为对于每种组合,它都会计算乘积。
collections
输出
max_num = 1000
width=len(str(max_num))
for n1 in range(1, max_num):
print ('{n1:0{width}}'.format(n1=n1, width=width))
答案 3 :(得分:0)
您无需创建多个循环,只能通过单个循环来完成。
digits = int(input("Enter the number of digits you want: "))
for i in range(1, 10 ** digits):
print('{num:0{width}}'.format(num=i, width=digits))
这样您就可以生成尽可能多的数字所需的数字。 受限于整数类型的大小。
答案 4 :(得分:0)
总的来说,我喜欢@Bazingaa的方法,但是我更喜欢power
和zfill
的组合:
def func(digits):
for n in range(1, 10 ** digits):
print(str(n).zfill(digits))
func(3)
# 001
# 002
# 003
# ...
# 997
# 998
# 999