解决以下问题的更有效方法

时间:2018-11-26 07:36:24

标签: python-3.x

Limit = int(input('Enter the limit: '))
Number = 1
NumberIncrement = 1
while( NumberIncrement < ( Limit+1 ) ):
    val = NumberIncrement - 1
    space = NumberIncrement
    while ( space < Limit ):
        print(' ',end = '')
        space += 1
    for x in range( Number ,(NumberIncrement+1)  ):
        print( x, end = '')
    while ( val > 0):
        print( val, end = '')
        val -= 1
    print('\n')
    NumberIncrement += 1
NumberIncrement = 1
val1 = Limit
while( Limit > (NumberIncrement-1) ):
    val = Limit - 2
    space = (val1-1) - val
    for x in range( 0, space ):
        print(' ',end = '')
    for x in range( Number ,Limit ):
        print(x, end = '')
    while ( val > 0):
        print( val, end = '')
        val -=1
    print('\n')
    Limit -=1

输出为:

输入限制:5

    1

   121

  12321

 1234321

123454321

 1234321

  12321

   121

    1

我是编码的新手,我正在寻找解决上述问题的不同方法。

是否有一种更好的方法可以使用较少的代码循环来解决此问题。

3 个答案:

答案 0 :(得分:1)

使用itertools.chainstr.joinstr.center的一种简洁而优雅的方法:

from itertools import chain

def upanddown(n):  # lazy iterator producing 1, 2, ..., n-1, n, n-1, ..., 2, 1
    return chain(range(1, n), range(n, 0, -1))

def diamond(n):
    for i in upanddown(n):
        print(''.join(map(str, upanddown(i))).center(2*n-1))

>>> diamond(5)
    1    
   121   
  12321  
 1234321 
123454321
 1234321 
  12321  
   121   
    1    

答案 1 :(得分:0)

请参阅此文档。您会知道的。 https://docs.python.org/3/library/string.html

答案 2 :(得分:0)

也许不是最好的解决方案,但我认为这是可行的:

limit=5

d=[]
s=''

for i in map(str,range(1,limit+1)):
    s += i
    l = s+s[-2::-1]
    ll = ' ' * (limit - len(l) // 2) +l
    d.append(ll)
    print(ll)

for i in d[-2::-1]:
    print(i)

您还有其他换行符,我不确定它们是否是预期的,但是您可以轻松地将其重新添加。