2015-10-05 88 views
0

這段代碼執行,但是,一個錯誤消息「NameError:name'p'沒有在第7和11行中定義 - 我嘗試在所有內容中添加float() - 同樣的錯誤 - 任何想法????NameError:name'p'沒有被定義在

def computepay(hrs,rate): 

    if 0 < hrs <=40: 
     print (hrs * rate) 
    elif hrs > 40: 
     print (40 * rate + (hrs-40)*rate*1.5) 
    return p <******** editor claims not defined here 

    hrs = float(input("Enter Hours:")) 
rate = float(input("Enter Rate per Hour:")) 
p = computepay(hrs,rate) <******** editor claims not defined here 
print ("Pay", p) 
+2

好...'p'是*不*'裏面高清computepay(小時,率)定義:'。你應該在'return'語句之前爲'p'賦值。 –

+1

是的,在你調用'computepay'之前'p'變量永遠不會被定義,你只是打印結果,而不是將它存儲在'p'中。 –

+0

'p'是什麼類型?它是一個字符串,一個整數,一個浮點數,一個複數,一個字典,一個布爾值等?你怎麼知道的?它是在哪裏創建的? –

回答

0

那麼,它是不是在功能定義,是

毫無聲明告知:

p = ... 

也許你的意思是分配p來「(40 * rate +(hrs-40)* rate * 1.5)」(如果hrs > 40,而不是隻打印它?

1

您試圖在未聲明p的函數中返回p。我想你想這樣做:

def computepay(hrs,rate): 
    if 0 < hrs <=40: 
     p = (hrs * rate) 
    elif hrs > 40: 
     p = (40 * rate + (hrs-40)*rate*1.5) 
    print p 
    return p 

PS。行hrs = float(input("Enter Hours:"))有一個錯誤的縮進。刪除之前的所有空白處。

0

如果你讀你的腳本由上到下:

def computepay(hrs,rate): 

解釋器使用它來定義一個名爲computepay局部功能。然後,它忽略了塊一切:

if 0 < hrs <=40: 
    print (hrs * rate) 
elif hrs > 40: 
    print (40 * rate + (hrs-40)*rate*1.5) 
return p 

然後,它執行input,將結果轉換成用float一個浮子對象,並創建一個名稱rate它指向浮子對象:

rate = float(input("Enter Rate per Hour:")) 

然後它執行computepay它做它的事情,並試圖返回p,但是,intepreter還沒有看到任何定義的p在本地範圍。即使我們說global p告訴翻譯人員在全球範圍內尋找,它還沒有創建指向任何對象的NAME。所以,你得到一個NameError

p = computepay(hrs,rate) 
+0

你的解釋並不正確。你可以在第一行寫'p = 1',但是儘管解釋者已經明顯看到了'p',但錯誤仍然是一樣的。它在應該返回'p'的函數中沒有看到'p'。那就是問題所在。 – Psytho

+0

@ Alex.S你絕對正確。更新與本地/全球的區別。 –