让pascals以多行打印

时间:2012-03-08 03:34:27

标签: python list

我已经创建了Pascal的Triangle但是它在一行上打印。有任何建议如何让它按行打印(不是三角形)?

row=input("Please enter height: ")
triangle=[]
for rownum in range (0,row+1):
   newvalue=1
   newrow=[]
   if row==0:
       newrow.append(int(newvalue))

   elif row==1:
       newrow.append(int(newvalue,newvalue))

   else:

       for column in range(rownum):
         if column==0:
             newrow.append(1)
         elif column==(rownum-1):
             newrow.append(int(newvalue))
         else:
             new_value=triangle[rownum-1][column]+triangle[rownum-1][column-1]
             newrow.append(int(new_value))
   triangle.append(newrow)
print triangle

3 个答案:

答案 0 :(得分:5)

>>> print '\n'.join(' '.join(str(n) for n in row) for row in triangle)

1
1 1
1 2 1
1 3 3 1
1 4 6 4 1
1 5 10 10 5 1

或者,使用str.center更好地对齐事物:

>>> print '\n'.join(' '.join(str(n) for n in row).center(80) for row in triangle)

                                       1                                        
                                      1 1                                       
                                     1 2 1                                      
                                    1 3 3 1                                     
                                   1 4 6 4 1                                    
                                 1 5 10 10 5 1                                  

要为更大的比例正确保留几何体,可以使用str.format这样的技巧:

>>> print '\n'.join(' '.join('{:3d}'.format(n) for n in row).center(80) for row in triangle)

                                        1                                       
                                      1   1                                     
                                    1   2   1                                   
                                  1   3   3   1                                 
                                1   4   6   4   1                               
                              1   5  10  10   5   1                             
                            1   6  15  20  15   6   1                           
                          1   7  21  35  35  21   7   1                         
                        1   8  28  56  70  56  28   8   1                       
                      1   9  36  84 126 126  84  36   9   1                     

答案 1 :(得分:3)

将最后一行更改为:

for line in triangle:
  print str(line)

给出了这个:

[]
[1]
[1, 1]
[1, 2, 1]
[1, 3, 3, 1]
[1, 4, 6, 4, 1]

将最后一行更改为:

i = row
for line in triangle:
  print ' ' * i + str(line)
  i -= 1

给出了这个:

      []
     [1]
    [1, 1]
   [1, 2, 1]
  [1, 3, 3, 1]
 [1, 4, 6, 4, 1]
[1, 5, 10, 10, 5, 1]

最后,将其更改为:

i = row
for line in triangle:
  str_line = [str(e) for e in line]
  print (' ' * i) + ' '.join(str_line)
  i -= 1

给出了这个:

     1
    1 1
   1 2 1
  1 3 3 1
 1 4 6 4 1
1 5 10 10 5 1

希望这有帮助。

答案 2 :(得分:0)

我为你感到难过。这是你删除的问题的答案.....

例如,任何字符串值都有一个名为center的方法,该方法使用old生成一个新字符串 以值为中心,使用额外的空格将值填充到给定长度。一般形式是:

s.center(n)

此方法采用一个参数n,即结果的大小。例子:

>>> k = "Ni"
>>> k.center(5)
' Ni '
>>> "<*>".center(12)
' <*> '

请注意,在第一个示例中,我们要求Python将字符串“Ni”置于长度为5的字段中。 显然,我们不能将5个字符的2个字符的字符串居中,因此Python随意添加了额外的空间 旧价值之前的字符。

另一个有用的字符串方法左对齐给定长度的字段中的值。一般形式:

s.ljust(n)

对于任何字符串表达式s,此方法返回一个包含s中字符的新字符串 在它之后添加了足够的空格来创建一个长度为n的新字符串。

>>> "Ni".ljust(4)
'Ni '
>>> "Too long to fit".ljust(4)
'Too long to fit'

请注意,.ljust()方法永远不会返回更短的字符串。如果长度不够,它就会返回 原始值。

有一种类似的方法可以对字符串值进行右对齐:

s.rjust(n)

此方法返回一个字符串,在该值之前添加了足够的空格以生成长度为n的字符串。 与.ljust()方法一样,它永远不会返回比原始字符串短的字符串。

>>> "Ni".rjust(4)
' Ni'

>>> m = "floccinaucinihilipilification"
>>> m.rjust(4)
'floccinaucinihilipilification'

有时您想要从字符串中删除空格(空格,制表符和换行符)。对于字符串s, 使用这些方法删除前导和尾随空格:

•s.strip()返回s,删除了任何前导或尾随空白字符。 •s.lstrip()仅删除前导空格。 •s.rstrip()仅删除尾随空格。

>>> spaceCase = ' \n \t Moon \t\t '
>>> spaceCase
' \n \t Moon \t\t '

>>> spaceCase.strip()
'Moon'

>>> spaceCase.lstrip()
'Moon \t\t '

>>> spaceCase.rstrip()
' \n \t Moon'