2011-09-05 10 views
5

Tôi muốn tạo hình ảnh này bằng python!Nghệ thuật hoa thị trong python

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

tôi bước này:

x=1 
while x<10: 
print '%10s' %'*'*x 
x=x+1 

Mà dường như buồn bã để sản xuất một cái gì đó bao gồm các số bên phải của dấu chấm như hình trên, nhưng mỗi người trong số những dấu sao chấm được ngăn cách bởi khoảng cách tách bạch nhau , chứ không phải là hợp lý như một tổng thể.

Bất kỳ ai có tâm trí thông minh về cách tôi có thể đạt được những gì tôi muốn?

+8

Còn Obelix thì sao? – Tsar

+3

3 chỉnh sửa và không có chỉnh sửa nào Asterix-> Asterisk =) – Tsar

Trả lời

13
'%10s' %'*'*x 

đang được phân tích cú pháp như

('%10s' % '*') * x 

%* nhà khai thác có cùng độ ưu tiên và nhóm trái sang phải [docs]. Bạn cần phải thêm dấu ngoặc đơn, như thế này:

x = 1 
while x < 10: 
    print '%10s' % ('*' * x) 
    x = x + 1 

Nếu bạn muốn lặp thông qua một loạt các con số, nó được coi là thành ngữ hơn để sử dụng một vòng lặp hơn một vòng lặp while for. Như thế này:

for x in range(1, 10): 
    print '%10s' % ('*' * x) 

for x in range(0, 10) tương đương với for(int x = 0; x < 10; x++) trong Java hoặc C.

+0

Thật tuyệt vời! Walla! Thật là một câu trả lời hay! Cảm ơn bạn rất nhiều - hoạt động hoàn hảo! - đây là câu trả lời đầu tiên tôi thấy nên tôi bình luận cảm ơn bạn nhưng dĩ nhiên là rất nhiều người cảm ơn mọi người khác! Sự đánh giá sâu sắc nhất của tôi về khóa học! – Azz

+0

Tôi nghĩ bạn có nghĩa là "Voila!", Tiếng Pháp cho "Có nó!", "Presto!", Hoặc "Woot, doggie!" – PaulMcG

+0

http://en.wikipedia.org/wiki/Wallah_(Arabic) –

8

chuỗi đối tượng có rjustljust phương pháp chính xác điều này.

>>> n = 10 
>>> for i in xrange(1,n+1): 
... print (i*'*').rjust(n) 
... 
     * 
     ** 
     *** 
     **** 
    ***** 
    ****** 
    ******* 
    ******** 
********* 
********** 

hoặc, cách khác:

>>> for i in reversed(xrange(n)): 
... print (i*' ').ljust(n, '*') 
... 
     * 
     ** 
     *** 
     **** 
    ***** 
    ****** 
    ******* 
    ******** 
********* 
********** 

ví dụ thứ hai của tôi sử dụng một nhân vật không gian như các nhân vật có thể in được, và * là ký tự lấp đầy.

Đối số cho ljust hoặc rjust là độ rộng đầu cuối. Tôi thường sử dụng chúng để tách các phần có tiêu đề khi bạn có bản in gỡ lỗi trò chuyện, ví dụ: print '--Spam!'.ljust(80, '-').

1
print '\n'.join(' ' * (10 - i) + '*' * i for i in range(10)) 
2

Đó là vì sự ưu tiên khai thác, sử dụng cái này:

x=1 
while x<10: 
print '%10s' % ('*'*x) 
x=x+1 
1

Chính xác hơn, là hình ảnh của bạn kết thúc với 10 dấu hoa thị, bạn cần.

for i in range(1, 11): 
    print "%10s"%('*' *i)