Printing Simple Diamond Pattern in Python

后端 未结 15 2529
执笔经年
执笔经年 2020-12-19 23:14

I would like to print the following pattern in Python 3.5 (I\'m new to coding):

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


        
相关标签:
15条回答
  • 2020-12-19 23:42

    Since the middle and largest row of stars has 9 stars, you should make n equal to 9. You were able to print out half of the diamond, but now you have to try to make a function that prints a specific number of spaces, then a specific number of stars. So try to develop a pattern with the number of spaces and stars in each row,

    Row1: 4 spaces, 1 star, 4 spaces
    Row2: 3 spaces, 3 stars, 3 spaces
    Row3: 2 spaces, 5 stars, 2 spaces
    Row4: 1 space, 7 stars, 1 space
    Row5: 0 spaces, 9 stars, 0 spaces
    Row6: 1 space, 7 stars, 1 space
    Row7: 2 spaces, 5 stars, 2 spaces
    Row8: 3 spaces, 3 stars, 3 spaces
    Row9: 4 spaces, 1 star, 4 spaces
    

    So what can you deduce? From row 1 to (n+1)/2, the number of spaces decreases as the number of stars increase. So from 1 to 5, the # of stars = (row number * 2) - 1, while # of spaces before stars = 5 - row number.

    Now from row (n+1)/2 + 1 to row 9, the number of spaces increase while the number of stars decrease. So from 6 to n, the # of stars = ((n+1 - row number) * 2) - 1, while # of spaces before stars = row number - 5.

    From this information, you should be able to make a program that looks like this,

    n = 9
    print("Pattern 1")
    for a1 in range(1, (n+1)//2 + 1): #from row 1 to 5
        for a2 in range((n+1)//2 - a1):
            print(" ", end = "")
        for a3 in range((a1*2)-1):
            print("*", end = "")
        print()
    
    for a1 in range((n+1)//2 + 1, n + 1): #from row 6 to 9
        for a2 in range(a1 - (n+1)//2):
            print(" ", end = "")
        for a3 in range((n+1 - a1)*2 - 1):
            print("*", end = "")
        print()
    

    Note that you can replace n with any odd number to create a perfect diamond of that many lines.

    0 讨论(0)
  • 2020-12-19 23:42
    side = int(input("side length: "))
    count = 0
    bl = 0
    while count < side:
        x = side - count
        print (x * " ", (count * "*") * 2)
        count += 2
    while count >= 0:
        print (bl * " ", (count * "*") * 2)
        count -= 1
        bl += 1
    

    if you want both upper part and down side to be same change the count += 2 to count += 1

    0 讨论(0)
  • 2020-12-19 23:44

    As pointed out by Martin Evans in his post: https://stackoverflow.com/a/32613884/4779556 a possible solution to the diamond pattern could be:

    side = int(input("Please input side length of diamond: "))
    
    for x in list(range(side)) + list(reversed(range(side-1))):
        print('{: <{w1}}{:*<{w2}}'.format('', '', w1=side-x-1, w2=x*2+1))
    
    0 讨论(0)
提交回复
热议问题