2011-02-06 121 views
5

我用C++编写了一个程序,它显示了一个星号金字塔(见下文),现在我想看看它是如何在Python中完成的,但并不像我想象的那么容易这将是。Python中的星号程序金字塔

有没有人试过这个,如果是的话,你能告诉我的代码会帮助吗?

在此先感谢。

 * 
     *** 
    ***** 
    ******* 
    ********* 
    *********** 
************* 
*************** 
+3

你怎么把它写在C++? – Jordan 2011-02-06 03:26:42

+2

到目前为止你有什么,它怎么不工作? – 2011-02-06 03:26:51

+0

看看这个[圣诞树](http://stackoverflow.com/a/34241421/389289) – zvone 2016-09-04 17:28:32

回答

22
def pyramid(rows=8): 
    for i in range(rows): 
     print ' '*(rows-i-1) + '*'*(2*i+1) 

pyramid(8) 
     * 
     *** 
    ***** 
    ******* 
    ********* 
    *********** 
************* 
*************** 

pyramid(12) 
      * 
      *** 
     ***** 
     ******* 
     ********* 
     *********** 
    ************* 
    *************** 
    ***************** 
    ******************* 
********************* 
*********************** 
3

您可以使用字符串倍增,像这样:

>>> for i in range(size): 
...  print '%s%s'%(' '*(size-(i-1)),'*'*((i*2)-1)) 
... 
2

此代码不是很Python的,但它的可读性。看看休Bothewell的回答了压缩金字塔绘图功能:

def drawPyramid(rows): 
    result = '' 

    for i in xrange(rows): 
    row = '' 
    row += ' ' * (rows - i - 1) 
    row += '*' * (2 * i + 1) 

    result += row + '\n' 

    return result 

print drawPyramid(20) 
2

我建议以下功能:

pyramid() 

或:

def pyramid(rows=8): 
    pyramid_width = rows * 2 
    for asterisks in range(1, pyramid_width, 2): 
     print("{0:^{1}}".format("*" * asterisks, pyramid_width)) 

然后尝试

pyramid(4) 
5

或你可以尝试:

def pyramid(size=8): 
    for i in range(size): 
     row = '*'*(2*i+1) 
     print row.center(2*size) 
-1

还可以绘制一个钻石

def pyramid(r): 
    for i in range(r): 
     print (" "*(r-i-1) + "*"*(2*i+1)) 
    for i in range(r-1,-1,-1): 
     print (' '*(r-i-1) + "*"*(2*i+1)) 

n=int(input("Enter no of rows:")) 
pyramid(n) 

pyramid(10) 

        * 
       * * * 
       * * * * * 
      * * * * * * * 
      * * * * * * * * * 
     * * * * * * * * * * * 
     * * * * * * * * * * * * * 
    * * * * * * * * * * * * * * * 
    * * * * * * * * * * * * * * * * * 
* * * * * * * * * * * * * * * * * * * 
* * * * * * * * * * * * * * * * * * * 
    * * * * * * * * * * * * * * * * * 
    * * * * * * * * * * * * * * * 
     * * * * * * * * * * * * * 
     * * * * * * * * * * * 
      * * * * * * * * * 
      * * * * * * * 
       * * * * * 
       * * * 
        * 
>>> 
-1
def pyramid(row): 
     for n in range(row): 
       print(' '*(n+1)+' '*(2*(row-n))+'x'+'x'*(2*n+1)) 

pyramid(row=8) 
-1

虽然我非常新的Python,所以这里是我如何解决它:

k=int(input("Enter the number of rows")) 
for i in range(1,k): 
    print(' '*(k-i),'* '*(i)) 

     * 
    * * 
    * * * 
    * * * * 
    * * * * * 
* * * * * * 
* * * * * * * 


1
Pyramid, Inverted Pyramid and Diamond Rhombus in Python: 

Pyramid 

i=1 
j=5 
while i<=5: 
print((j*' ')+i*'* ') 
j=j-1 
i=i+1 




    * 
    * * 
    * * * 
    * * * * 
* * * * * 


Inverted Pyramid 

i=1 
j=5 
while i<=5: 
print((i*' ')+j*'* ') 
j=j-1 
i=i+1 

* * * * * 
    * * * * 
    * * * 
    * * 
    * 

Diamond Rhombus 

i=1 
j=5 
while i<=5: 
print((j*' ')+i*'* ') 
while j<=5 & i==5: 
    print(((j+1)*' ')+(5-j)*'* ') 
    j=j+1 
j=j-1 
i=i+1 



    * 
    * * 
    * * * 
    * * * * 
* * * * * 
    * * * * 
    * * * 
    * * 
    * 
-2
#!/usr/bin/python 
for i in range(1,6): 
for j in range(1,i+1): 
    print "*", 
print 

O/P: 
=== 
* 
* * 
* * * 
* * * * 
* * * * * 

2) 
#!/usr/bin/python 
for i in range(1,6): 
for j in range(1,7-i): 
    print "*", 
print 

O/P: 
* * * * * 
* * * * 
* * * 
* * 
* 

3) 
#!/usr/bin/python 
for i in range(1,6): 
for j in range(1,6-i): 
    print "", 
for k in range(1,i+1): 
    print "*", 
print 

O/P: 

    * 
    * * 
    * * * 
* * * * 
* * * * * 

4) 
#!/usr/bin/python 
for i in range(1,6): 
for j in range(1,1+i): 
    print "", 
for k in range(1,7-i): 
    print "*", 
print 

O/P: 
* * * * * 
    * * * * 
    * * * 
    * * 
    * 
5) 
#!/usr/bin/python 
for i in range(1,6): 
for j in range(1,6-i): 
    print "", 
for k in range(1,i+1): 
    print "*", 
print 
for i in range(1,5): 
for j in range(1,1+i): 
    print "", 
for k in range(1,6-i): 
    print "*", 
print 


O/P: 
    * 
    * * 
    * * * 
* * * * 
* * * * * 
* * * * 
    * * * 
    * * 
    * 
0
$ cat tree.py 
def line(n, i): 
    line = '' 
    for j in range(n - i - 1): 
     line += ' ' 
    for j in range(2 * i + 1): 
     line += '*' 
    for j in range(n - i - 1): 
     line += ' ' 
    return line 

def tree(n): 
    for i in range(n): 
     line_ = line(n, i) 
     print(line_) 

def run(): 
    tree(3) 

if __name__ == '__main__': 
    run() 
$ python3 tree.py 
    * 
*** 
***** 
$ _ 
0

如果你喜欢列表解析:

> n = 5 
> print("\n".join((i*"*").center(n*2) for i in range(1, n*2, 2))) 

    * 
    *** 
    ***** 
******* 
*********