簡體   English   中英

NameError:未定義名稱“值”

[英]NameError: name 'value' is not defined

(背景第一:我是編程新手,目前在我大學的第一個“編程入門課程”中。這是我們處理函數的第二個任務。到目前為止,函數對我來說一直很痛苦,因為它們沒有“真的沒有任何意義。例如:你可以使用miles_gas(gas),但不要在其他任何地方使用“miles_gas”,但程序仍然運行??,無論如何)

好吧,我在網上到處找這個,找不到答案。 一切都在使用“異常”和“嘗試”以及所有高級內容。 我是新來的,所以我不知道什么是例外,或者嘗試過,考慮到我的老師還沒有分配過這樣的東西,我也不想使用它們。

我的項目是制作一個程序,在輸入您的房產價格時為您提供評估價值和房產稅。 這是我想出的代碼(按照我班上的視頻以及書中的內容)

ASSESSMENT_VALUE = .60
TAX = 0.64

def main():
    price = float(input('Enter the property value: '))
    show_value(value)
    show_tax(tax)

def show_value():
    value = price * ASSESSMENT_VALUE
    print('Your properties assessment value is $', \
        format(value, ',.2f'), \
        sep='')

def show_tax(value,TAX):
    tax = value * TAX
    print('Your property tax will be $', \
        format(tax, ',.2f'), \
        sep='')    

main()

運行它后,我得到它詢問“等等等等輸入價格:”所以我輸入價格然后我得到一個巨大的紅色錯誤說

Traceback (most recent call last):
      File "C:/Users/Gret/Desktop/chapter3/exercise6.py", line 41, in <module>
      main()
File "C:/Users/Gret/Desktop/chapter3/exercise6.py", line 24, in main
show_value(value)
NameError: name 'value' is not defined

但我確實定義了“價值”......那為什么它給我一個錯誤?

Python 是詞法范圍的。 函數中定義的變量在函數外部不可見。 您需要從函數返回值並將它們分配給要使用這些值的范圍內的變量。 在您的情況下, valueshow_value本地value

當你定義一個函數時,它需要接受參數。你在函數的括號中傳遞這些參數,當你定義你的函數時,你為函數命名這些參數。 我馬上給你看一個例子。

基本上發生的事情是你在調用函數時傳遞了一個參數,但在你的定義中你沒有參數,所以它不知道如何處理它。

改變這一行:

def show_value():

到這一行:

def show_value(price):

show_valueshow_value(price)

例如:

在這種類型的錯誤中:

def addition(a,b):
    c = a + b
    return c

addition() # you're calling the function, 
           # but not telling it the values of a and b

你的錯誤:

def addition():
    c = a + b
    return c

addition(1,2) # you're giving it values, but it 
              # has no idea to give those to a and b

關於函數的事情,就是那些變量只存在於函數中,而且參數的名字並不重要,只有順序。 我知道這令人沮喪,但如果您以更開放的心態繼續編程,我保證您會感激不盡。 如果你想保留這些值,你只需要在最后返回它們。 您可以通過編寫return c, a, b並編寫這樣的調用來返回多個變量sum, number1, number2 = addition(1,2)

另一個問題是我可以像這樣調用我的加法函數:

b = 1
a = 2
addition(b,a)

現在在函數內部,a = 1 和 b = 2,因為它不是關於變量名,而是關於我將它們傳遞給函數的順序。

您也不需要將 TAX 傳遞給 show_tax,因為 TAX 已經是一個全局變量。 它是在函數之外定義的,因此可以在任何地方使用。 此外,您不想將稅金傳遞給 show_tax,而是希望將值傳遞給它。 但是因為 show_value 沒有返回值,你已經失去了它。 因此,將 show value 中的值返回給變量,例如value = show_value(price)

暫無
暫無

聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.

 
粵ICP備18138465號  © 2020-2024 STACKOOM.COM