2015-10-21 57 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)) 

    * 
*** 
*** 
    *