Python 3.4:创建一个星号菱形

时间:2015-10-21 02:29:20

标签: python python-3.x for-loop

所以我一直在尝试创建一个程序,在其中提示用户输入行数,然后程序打印出一个带有输入行数的菱形。

这是该计划应该做的事情:(image)

这是我的代码看起来像

def main():
    ROWS = get_input()
    draw_pattern(ROWS)

def get_input():
    return int(input("Enter the number of rows (or -1 or -99 to quit): "))

def draw_pattern(ROWS):
    if ROWS == -1 or ROWS == -99:
        quit
    else:
        for x in range(0,(int)((ROWS/2)+1),1):          
            print ((int)((ROWS/2)-(2*x+1)/2)*" " + (2*x+1) * '*')

            for t in range((int)(x),0,-1):
                print((int)((ROWS/2)-(2*t-1)/2)*" " + (2*t-1) * '*')

main()

这就是它最终要做的事情:

Enter the number of rows (or -1 or -99 to quit): 7
   *
  ***
   *
 *****
  ***
   *
*******
 *****
  ***
   *

那么我做错了什么?我认为它在我的for循环中的某些东西使得行没有正确排列。谁能给我一点帮助?感谢。

3 个答案:

答案 0 :(得分:1)

我让它像这样工作。 (< 3分钟)(不要使用偶数数字看起来很奇怪)

def main():
    ROWS = get_input()
    draw_pattern(ROWS)

def get_input():
    return int(input("Enter the number of rows (or -1 or -99 to quit): "))

def draw_pattern(ROWS):
    if ROWS == -1 or ROWS == -99:
        return

    else:
        for x in range(1, ROWS, 2):
            print(' ' * int(ROWS / 2.0 - x / 2.0) + ("*" * x))

        for x in range(ROWS, 1, -2):
            print(' ' * int(ROWS / 2.0 - x / 2.0) + ("*" * x))

        if x != 1:
            print(' ' * int(ROWS / 2.0 - 1 / 2.0) + ("*" * 1))

main()

答案 1 :(得分:0)

有很多方法可以做到这一点,你可以生成所有的字符串然后使用格式将它们打印出来以使钻石居中,例如:

>>> row = 5
>>> d = ('*' * (n if n <= row else 2*row-n) for n in range(1, 2*row, 2))
>>> for i in d:
...     print('{:^{w}}'.format(i, w=row))
  *  
 *** 
*****
 *** 
  *  

row = 4

 *  
*** 
*** 
 *  

答案 2 :(得分:0)

混淆点?

            x|x|o|o
            x|x|o|x
             | | | 
             | | | 

star = lambda rows:'\n'.join(('*'*(2*(i if i<rows//2 else rows-i-1)+1)).center(rows) for i in range(rows))

即使

print(star(5))

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