2014-02-20 74 views
-3

我試着迭代三個函數,但得到這個錯誤:NameError:全局名稱'dash'未定義。如何解決呢 這是代碼:我該如何修復這個功能代碼

def draw(): 
    name = input('Please type here: ').lower()#.split() 
    if name == 'what draw': 
     print('draw here') 
    else: 
     dash() 

draw() 
def paint(): 
    name = input('Please type here: ').lower()#.split() 
    if name == 'what paint': 
     print('paint here') 
    else: 
     draw() 

paint() 
def erase(): 
    name = input('Please type here: ').lower()#.split() 
    if name == 'what erase': 
     print('erase here') 
    else: 
     paint() 

erase() 
def dash(): 
    name = input('Please type here: ').lower()#.split() 
    if name == 'what dash': 
     print('dash here') 
    else: 
     erase() 

dash() 
+4

在重複什麼錯誤信息的風險已經告訴你,'dash'沒有在你發佈的代碼中的任何地方定義。 – jonrsharpe

+0

有人可以更熟悉pyhthon評論爲什麼這可能被標記爲「功能編程」?我看不到任何高階函數的使用,也沒有任何類型的元編程。 –

+0

關於錯誤...有沒有辦法,我可能會要求修復這個問題?謝謝。 – wakamdr

回答

1

上述代碼,代碼:

  1. 試圖調用dash()已定義的函數之前;和
  2. 一直要求用戶重新輸入他們的輸入,直到他們碰巧在正確的功能中輸入正確的輸入。

這似乎是不明智的。您可以從功能上分離的輸入解決這兩個:

# function definitions here 

while True: 
    name = input('Please type here: ').lower() 

    if 'dash' in name: 
     dash() 
    # repeat for other functions 
    elif 'quit' in name: 
     break 
    else: 
     print("Don't know that name.") 
4

你想它的定義之前使用它。

def paint(): 
    ... 

def draw(): 
    ... 

def dash(): 
    ... 

def erase(): 
    ... 


draw() 
paint() 
erase() 
dash() 
+0

這個效果很好,但只有使用draw()打印......是因爲它的第一個被調用?..你按順序列出了draw(),paint(),erase()和dash()。如果我用paint()替換draw(),則調用paint並且其餘部分不會迭代 – wakamdr

+0

@wakamdr您問過如何解決您遇到的錯誤,如果您希望某人查看您的代碼,則不是這個地方爲了那個原因。 – corn3lius

+0

很酷的人,我只是建議我注意到的東西。不管怎麼說,還是要謝謝你!! – wakamdr

2

看那行號錯誤發生的情況。這是寫在例外。 但我認爲你的問題可能是在這裏:

def draw(): 
    name = input('Please type here: ').lower()#.split() 
    if name == 'what draw': 
    print('draw here') 
    else: 
    dash() 
draw() 

你叫平局(),但平局()將調用破折號()和破折號尚未確定