2015-10-20 56 views
0

我工作的這個問題,全文如下:編寫,打印金字塔的功能 - 兩個參數

問題:編寫吸引你的屏幕上一個金字塔的功能。該函數需要兩個參數。首先是金字塔的高度。第二個參數是可選的:如果未提供,則應使用符號「#」繪製金字塔。否則,如果用戶輸入「*」例如,金字塔應該包含星號。

嘗試:我寫了這個程序:

def main(): 
    h = int(input("Please enter the height of the pyramid: ")) 
    symbol = str(input("Enter the desired symbol or press enter for standard (#): ")) 


def pyramid(h,symbol): 
    if symbol == "" or symbol == "#": 
     for i in range(h): 
      pyr = print(" " * (h-i - 1) + "#" * (2 * i + 1)) 

     return pyr 


    else: 
     for i in range(h): 
      pyr = print(" " * (h-i - 1) + symbol * (2 * i + 1)) 

     return pyr 

    print() 

main() 

但是,當我嘗試調用這個,這是不正常。有人能指出我的錯誤嗎?另外,我不確定如何處理函數的'可選'屬性。我應該堅持我的方法還是有更好的方法來定義?

+0

你怎麼知道它不能正常工作? –

+0

'pyr = print'這是一個問題。這是沒有道理的。 – RobertB

回答

2

你的邏輯是好的,你可以嘗試

def pyramid(h,symbol): 
    if symbol == "" or symbol == "#": 
     for i in range(h): 
      print(" " * (h-i - 1) + "#" * (2 * i + 1)) 
    else: 
     for i in range(h): 
      print(" " * (h-i - 1) + symbol * (2 * i + 1)) 
    print() 

pyramid(5, "#") 
 
    # 
    ### 
    ##### 
####### 
######### 

您的問題:

  • pyr = print(" " * (h-i - 1) + "#" * (2 * i + 1)) .... print函數返回None,然後pyrNone

  • return pyr語句返回pyr變量的內容,並完成pyramid功能

  • pyramid功能不調用從未

提高代碼

你可以刪除不必要的,如果,

def pyramid(h,symbol="#"): 
    for i in range(h): 
     print(" " * (h-i - 1) + symbol * (2 * i + 1)) 
    print() 

pyramid(5) 

你可以返回一個STR

def pyramid(h,symbol="#"): 
    out = "" 
    for i in range(h): 
     out += (" " * (h-i - 1)) + (symbol * (2 * i + 1)) + "\n" 
    return out 

print(pyramid(5)) 

,或者在線解決方案

def pyramid(h,symbol="#"): 
    return "\n".join((" " * (h-i - 1)) + (symbol * (2 * i + 1)) for i in range(h)) 

print(pyramid(5)) 
+0

我明白了,謝謝你指出我的錯誤。但是如果我輸入金字塔(5,),即沒有提供第二個參數,它會給我一個錯誤。有沒有辦法讓它用#符號打印金字塔,即使我們沒有提供第二個參數,或者根本不可能?我認爲這就是問題所在。 – Kamil

+0

你可以嘗試:'金字塔(5,「#」)或金字塔5或金字塔(5,「@」) –