Reputation:
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
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
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