【问题标题】:Nested Loop Python嵌套循环 Python
【发布时间】:2014-07-06 01:25:56
【问题描述】:
count = 1
for i in range(10):
    for j in range(0, i):
        print(count, end='')
        count = count +1
    print()
input()

我正在编写一个程序,它的输出应该是这样的。

1

22

333

4444

55555

666666

7777777

88888888

999999999   

使用上面的代码,我已经非常接近了,但是我的计数工作方式只是逐字逐句递增。我只需要帮助让它只数到 9,但显示如上。谢谢。

【问题讨论】:

  • 我来这里是为了确保缩进正确。

标签: python python-3.x nested-loops


【解决方案1】:

您在内部循环中增加 count,这就是为什么您在想要之前不断获得更大的数字

你可以这样做。

>>> for i in range(1, 10):
        print str(i) * i


1
22
333
4444
55555
666666
7777777
88888888
999999999

或者如果你出于某种原因想要嵌套循环

from __future__ import print_function

for i in range(1, 10):
    for j in range(i):
        print(i, end='')
    print()

【讨论】:

  • 是的,这是每个需要嵌套循环的分配。所以我需要第二种方式。非常感谢!
【解决方案2】:

这适用于 python2 和 python3:

for i in range(10):
  print(str(i) * i)

【讨论】:

    【解决方案3】:
    for i in range(1,10):
        for j in range(0,i):
            print i,
    print "\n"
    

    【讨论】:

      【解决方案4】:

      代码中的简单错误是 count = count + 1 的位置。它应该放在第二个 for 循环块之后。我对您自己的代码进行了简单的更改,以获得您想要的输出。

          from __future__ import print_function
          count = 0
          for i in range(10):
              for j in range(0, i):
                  print(count,end='')
              count = count +1
          print()
      

      这将使用您编写的代码提供您想要的输出。 :)

      【讨论】:

        【解决方案5】:

        这是一条线解决方案。 有点长:

        print ('\n'.join([str(i)*i for i in range(1,10)]))
        

        【讨论】:

          【解决方案6】:

          print(count, end='') 更改为print(i + 1, end='') 并删除count。只要确保您了解它的工作原理。

          【讨论】:

          • 我怀疑你的意思是i,而不是j
          • @MattBryant 在您发表评论时修复了它。
          • 这对@David 很有帮助,但我的台词从 2 开始,而不是现在。
          • @iMaxPrime 也从 1 开始你的内部范​​围,而不是 0。for j in range(1, i): 同样,这里重要的是你自己调试一下并仔细考虑,而不仅仅是复制和粘贴其他人。
          【解决方案7】:

          这是你想要的吗:

          for i in range(10):
              print(str(i) * i)
          

          【讨论】:

            【解决方案8】:
            """2. 111 222 333 printing"""
            
            for l in range (1,10):
                for k in range(l):
                    print(l,end='')
            print()
            

            【讨论】:

            • 为了其他读者的利益,请简要描述您的代码中发生了什么。
            【解决方案9】:
            count = 1
            for i in range(9):
                for j in range (-1, i):
                    print (count, end = '')
                count = count + 1
                print (" ")
            

            【讨论】:

            • 请阅读此how-to-answer 以提供高质量的答案。只是发布代码不是最好的答案。
            【解决方案10】:

            您正在尝试做的事情涉及一个名为repunit numbers的数学概念

            你也可以这样做:

            for i in range(1,n):
                print (int(i*((10**i)-1)/9))
            

            【讨论】:

              【解决方案11】:

              我意识到问题已解决,但这是您希望代码的样子。

              count=0
              for i in range(10):
                  for j in range(0, i):
                      print (count, end='')
              count +=1
              print()
              

              我认为@Dannnno 的答案更简短直接:)

              【讨论】:

                【解决方案12】:

                这可能是您解决问题的一行代码

                print(''.join([str(x)*x+ '\n' for x in range(1,10)]))
                

                【讨论】:

                  【解决方案13】:

                  其他人提出了一些有趣的解决方案,但这也可以通过简单的观察在数学上完成。请注意:

                  1 - 1*1

                  22 - 2*11

                  333 - 3*111

                  4444 - 4*1111

                  等等....

                  我们可以有一个通用公式在每次迭代时产生 1,11,111,1111,...。请注意:

                  1 = 9/9 = (10 - 1)/9 = (10^1 - 1)/9

                  11 = 99/9 = (100 - 1)/9 = (10^2 - 1)/9

                  111 = 999/9 = (1000 - 1)/9 = (10^3 - 1)/9

                  ......

                  也就是说,对于第 i 次迭代,我们有 (10^i - 1)/9。

                  现在实现起来很简单。我们将在每次迭代中将 i 与上述公式相乘。因此,总体公式为:

                  i*(10^i - 1)/9 (对于每个第 i 次迭代)。 这是python代码:

                  for i in xrange(1,10):
                      print i*(10**i-1)/9
                  

                  希望这会有所帮助。

                  【讨论】:

                    猜你喜欢
                    • 2010-12-21
                    • 2017-04-24
                    • 1970-01-01
                    • 1970-01-01
                    • 2021-12-30
                    • 2012-06-27
                    • 1970-01-01
                    • 1970-01-01
                    • 1970-01-01
                    相关资源
                    最近更新 更多