2011-02-06 38 views
5

Tôi đã viết một chương trình trong C++ hiển thị một kim tự tháp dấu sao (xem bên dưới) và bây giờ tôi muốn xem nó được thực hiện bằng Python như thế nào nhưng nó không dễ như tôi nghĩ nó sẽ là.Pyramid of asterisks program in Python

Có ai đã thử điều này không và liệu bạn có thể cho tôi xem mã có thể trợ giúp không?

Xin cảm ơn trước.

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

Làm sao bạn viết nó trong C++? – Jordan

+2

Bạn có những gì cho đến nay và nó hoạt động như thế nào? –

+0

Kiểm tra [cây giáng sinh] này (http://stackoverflow.com/a/34241421/389289) – zvone

Trả lời

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

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

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

Wow, dòng 'print' '* (hàng- i-1) + '*' * (2 * i + 1) 'chắc chắn sẽ làm rất nhiều! Đó là khá darn mát mẻ. :) ... và những gì biến i "không" trong chương trình là cái gì đó của ... đã không nghĩ đến việc sử dụng nó như thế. Cảm ơn bạn đã trả lời, tôi đánh giá cao nó! – jimmyc3po

3

Bạn có thể sử dụng chuỗi nhân như vậy:

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

Mã này không phải là rất pythonic, nhưng nó có thể đọc được. Nhìn vào câu trả lời Hugh Bothewell cho một chức năng vẽ hình chóp nhỏ gọn:

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) 
+0

Cảm ơn! Mặc dù điều này không thực sự liên quan đến câu hỏi của tôi, tôi nhận thấy từ "pythonic" và tôi tò mò. Có một cuốn sách hay (hay tài liệu hướng dẫn) nào về cách viết mã có nhiều chất pythonic hơn không? Viết thêm Python có lẽ là câu trả lời nhưng tôi nghĩ tôi sẽ hỏi.:) Tất cả mọi thứ tôi dường như cố gắng và viết bằng Python luôn luôn đi ra như tôi đang cố gắng để mã trong một ngôn ngữ C-like và tbh Tôi nghĩ rằng đó là một phần lý do tại sao tôi đã có một số rắc rối, chỉ là một đoán. Cảm ơn một lần nữa! – jimmyc3po

2

tôi sẽ đề nghị các chức năng sau:

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

Sau đó thử với:

pyramid() 

hoặc với:

pyramid(4) 
5

Hoặc bạn có thể thử:

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

Bạn cũng có thể vẽ một DIAMOND

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

Mặc dù tôi rất nhiều mới để trăn, vì vậy đây là cách tôi giải quyết nó:

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ếu bạn thích danh sách comprehensions:

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

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