Logo Questions Linux Laravel Mysql Ubuntu Git Menu
 

How to draw this bow tie pattern using Python 2.7?

I need to draw the following pattern using Python While Loops.

enter image description here

I have spent quite a lot of time and came up with this code which prints it perfectly but this code is so much long and I feel like it is not one of those good codes.

If anybody here can help me out shrinking this code or suggesting a better way to output?

here is the code:

#Question 10, Alternate Approach
temp = 1
pattern = ""
innerSpace = 7
starCount = 1
while temp <= 5:
    st = 1
    while st <= starCount:
        pattern = pattern + "*"
        if st != starCount:
            pattern = pattern + " "
        st = st + 1
    sp = 0
    if temp == 5:
            innerSpace = 1
    while sp < innerSpace:
        pattern = pattern + " "
        sp = sp  + 1
    st = 1
    while st <= starCount:
        if temp == 5:
            st = st + 1
        pattern = pattern + "*"
        if st != starCount:
            pattern = pattern + " "
        st = st + 1
    temp = temp + 1
    innerSpace = innerSpace - 2
    pattern = pattern + "\n"
    if temp % 2 == 0:
        pattern = pattern + " "
    else:
        starCount = starCount + 1
starCount = 2
innerSpace = 1
while temp > 5 and temp <= 9:
    st = 1
    while st <= starCount:
        pattern = pattern + "*"
        if st != starCount:
            pattern = pattern + " "
        st = st + 1
    sp = 0
    while sp < innerSpace:
        pattern = pattern + " "
        sp = sp  + 1
    st = 1
    while st <= starCount:
        pattern = pattern + "*"
        if st != starCount:
            pattern = pattern + " "
        st = st + 1
    temp = temp + 1
    innerSpace = innerSpace + 2
    pattern = pattern + "\n"
    if temp % 2 == 0:
        starCount = starCount - 1
        pattern = pattern + " "        
print pattern
like image 652
Parker Queen Avatar asked Dec 12 '25 14:12

Parker Queen


2 Answers

Since this looks like an assignment, I'll give you a hint how I would do it.

Take advantage of the symmetry of the bow. It is symmetrical about the horizontal and vertical axis. Therefore, you really only need to solve 1 corner, then copy/mirror the results to get the rest.

This code gives one way of looking at the problem, which is just shifting a initial string (the middle of the bow) to get the desired shape:

m      = '*'
size   = 4
n      = 5 # must be odd
pad    = ' ' * n
middle = (m + pad) * size
half   = int(n / 2) + 1

print middle
print middle[half*1:]
print middle[half*2:]
print middle[half*3:]
print middle[half*4:]
print middle[half*5:]
print middle[half*6:]

Which yields this:

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

Good luck!

I would use list comprehensions and strings and would exploit the symmetry of the figure.

Not a complete solution, but could be a part of a loop body

In [2]: a = '*' + ' '*8

In [3]: a
Out[3]: '*        '
In [24]: result = ''

In [25]: result += a

In [26]: result
Out[26]: '*        '

In [27]: result += a[-1::-1]

In [28]: result
Out[28]: '*                *'

In [29]: result += '\n'

In [30]: a = ' '+'*' + ' '*7

In [31]: a
Out[31]: ' *       '

In [32]: result += a

In [33]: result += a[-1::-1]

In [34]: result += '\n'

In [36]: print result
*                *
 *              *
like image 22
wl2776 Avatar answered Dec 14 '25 02:12

wl2776



Donate For Us

If you love us? You can donate to us via Paypal or buy me a coffee so we can maintain and grow! Thank you!