【问题标题】:How to fix this problem with nested for loops in python?如何用python中的嵌套for循环解决这个问题?
【发布时间】:2021-07-21 10:08:20
【问题描述】:

我想要一个程序在终端打印这个输出:

0000
0001
0002
...
0010
0011
...
9990
9991
...

因为我想找到所有 0 到 9 位的 4 位密码。

于是我开始用python编写这个程序:

num = ""
for a in range(0 , 10) :
num += str(a)
for b in range(0 , 10) :
    num += str(b)
    for c in range(0 , 10) :
        num += str(c)
        for d in range(0 , 10) :
            num += str(d))
            print(num)
            num = ""

但我收到了这个输出:

2
3
4
5
6
7
8
9
9000
1
2
...
30
...
100
...

所以我决定测试另一个程序:

num = []

for a in range(0 , 10) :
    num.append(str(a))
    for b in range(0 , 10) :
        num.append(str(b))
        for c in range(0 , 10) :
            num.append(str(c))
            for d in range(0 , 10) :
                num.append(str(d))
                print(num)
                num = []

但我还是没有成功:

['2']
['3']
['4']
['5']
['6']
['7']
['8']
['9']
['9', '0', '0', '0']
...
['4']
['5']
...
['7']
...
['9', '0']
...
['9']
['9', '0', '0']
...
['5', '0']
['1']
...
['6', '0']
...
['7', '0']
...
['8', '0']
...
['9', '0']
['1']
['2']
['3']
['4']
...
['9']

有人知道如何解决这个问题吗?

【问题讨论】:

  • 我看到这些是连续的数字,为什么不打印一个左填充为 4 的计数器?
  • [str(i).zfill(4) for i in range(0, 10000)]
  • 如果你真的想尝试从0000到9999的所有数字,为什么不使用计数器并正常增加呢?您最终可以将缺失的零填充到左侧(例如,1 是 0001,您只需在左侧添加三个零)。

标签: python for-loop nested-loops


【解决方案1】:

简单地运行会更直接:

for i in range(10000):
    print(f"{i:04}")

另请参阅this SO question,了解 Python 中的零填充字符串。

如果你真的想使用嵌套的 for 循环,我宁愿这样做:

for a in range(0, 10):
    for b in range(0, 10):
        for c in range(0, 10):
            for d in range(0, 10):
                num = f"{a}{b}{c}{d}"
                print(num)

【讨论】:

    【解决方案2】:

    那么明显的东西呢?

    for i in range(10000):
        print('%04i' % (i))
    

    也许还注意到range 隐含地从 0 开始,如果你只传递一个参数;你不需要单独写出来。

    【讨论】:

      【解决方案3】:

      还可以选择使用内置的.zfill()

      for i in range(10000):
          print(str(i).zfill(4))
      

      【讨论】:

        【解决方案4】:

        您也可以使用列表来做到这一点。

        for i in range(10000):
            r = 4-len(list(str(i)))
            r = ['0']*r
            print(''.join(r)+str(i))
        

        这里您只检查长度,并使用连接作为最终字符串。

        【讨论】:

          猜你喜欢
          • 1970-01-01
          • 1970-01-01
          • 1970-01-01
          • 1970-01-01
          • 1970-01-01
          • 2021-12-18
          • 1970-01-01
          • 1970-01-01
          • 2019-07-03
          相关资源
          最近更新 更多