user7865531
user7865531

Reputation:

how to draw a 'x' shape like below

I am new to python, please someone help to draw a shape like below. The program have to take the number of star as an input.

number of star = 7

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

My code:

count = int(input('star count : '))
pattern_size = count + 1
for t in range(1, pattern_size):
    pattern = list(" " * pattern_size)
    pattern[:t] = "*" * t
    pattern[-t:] = '*' * t
    print(''.join(pattern))

star count :  9
*        *
**      **
***    ***
****  ****
**********
**********
**********
**********
**********

Upvotes: 1

Views: 427

Answers (2)

Taku
Taku

Reputation: 33714

Here's a easy-to-understand example using two for-loops with your approach: One just the inverse of another

count = int(input('star count : '))
pattern_size = count + 1
for t in range(1, int(pattern_size/2)):
    pattern = list(" " * pattern_size)
    pattern[:t] = "*" * t
    pattern[-t:] = '*' * t
    print(''.join(pattern))

for t in range(int(pattern_size/2), 0, -1):
    pattern = list(" " * pattern_size)
    pattern[:t] = "*" * t
    pattern[-t:] = '*' * t
    print(''.join(pattern))

And a more advanced method would be to use the string method .center() like so:

count = int(input('star count : '))
pattern_size = count + 1
for t in range(1, int(pattern_size/2)):
    print((" " * (pattern_size-t*2)).center(pattern_size, '*'))
for t in range(int(pattern_size/2), 0, -1):
    print((" " * (pattern_size - t * 2)).center(pattern_size, '*'))

Upvotes: 2

Fogmoon
Fogmoon

Reputation: 569

Just like my comment, this is the complete code:

count = int(input('star count : '))
pattern_size = count + 1
for t in range(1, pattern_size):
    pattern = list(" " * pattern_size)
    len_t = t if t <= (pattern_size / 2) else (pattern_size - t)
    pattern[:len_t] = "*" * len_t
    pattern[-len_t:] = '*' * len_t
    print(''.join(pattern))

Hope this help.

Upvotes: 1

Related Questions