2015-10-21 53 views
1

所以我一直在试图创建一个程序,提示用户输入的行数,然后程序打印出输入行数的菱形。Python 3.4:创建一个星号钻石

这是什么程序应该做的事:(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循环,使行不正确排列。任何人都可以给我一点帮助吗?谢谢。

+2

你有一个压痕问题,你的第二个'for'循环是不正确缩进。什么是“退出”? – AChampion

+0

好的,我会检查缩进。退出是,如果在提示输入行数时输入-1或-99,则会停止程序。 代码运行,但不是我想让它运行的菱形图案,我不知道为什么。我在Windows 7上。 – Altairis

+0

它应该是'quit()' –

回答

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() 
+0

TypeError:无法乘以类型为'float'的非int的序列 –

+0

您是否在python 3中尝试这样做?您不必要的附加if子句会引发TypeError。 – AChampion

+0

我没有。给我一下 –

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

* 
*** 
*** 
* 
0

点的困惑?

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)) 

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

即使

print(star(4)) 

    * 
*** 
*** 
    *