2015-09-14 48 views
0

我正在學習使用Python編寫代碼。 我創建將進行單位轉換程序,但我一直堅持這個錯誤了好一會兒:在python腳本中處理變量作用域

NameError: name 'ini' is not defined

下面是代碼:

a = ("Distance") 
b = ("Time") 
c = ("Volume") 
d = ("Temp") 
e = ("Weight") 

def conversion_type(first): 
    if first == ("Distance"): 
     ini = input("How great a distance am I converting?\n") 
    elif first == ("Time"): 
     ini = input("How much time am I converting?\n") 
    elif first == ("Volume"): 
     ini = input("How great a volume am I converting?\n") 
    elif first == ("Temp"): 
     ini = input("How many degrees am I converting?\n") 
    elif first == ("Weight"): 
     ini = input("How much weight am I converting?\n") 
    else: 
     print("That not was an afformentioned dimension you dolt.") 

def variable_type_converter(ini): 
    ini = float(ini) 

print ("\n Welcome to the Convert-O-Matic\n==============================\n") 
print ("I support the following dimensions:\n") 
print ("%s, %s, %s, %s, and %s," % (a,b,c,d,e)) 
first = input("What kind of conversion would you like to do?\n") 
conversion_type(first) 
variable_type_converter(ini) 
print("==========================================") 

+3

呃哦!,代碼截圖讓我難過。 –

+0

我很抱歉,插入代碼功能正在吐出垃圾 –

+2

@John,再試一次。我們可以隨時修改格式,特別是如果您將截圖留在那裏進行驗證(並且驗證代碼後我們最終會刪除截圖)。 – paxdiablo

回答

2

ini未在全局範圍內聲明,僅在函數內部使用(它在conversion_type()中使用,因此在那裏隱式聲明,並且它是的參數)。但是由於它沒有在全球範圍內宣佈,所以並不存在。如果要將ini的值設置爲conversion_type()並且該值可在其他地方使用,請在致電conversion_type()之前在某處聲明ini的值。

This answer對Python的範圍規則有一個很好的總結。

更新:正如MadWombat在評論中指出的,您的variable_type_converter()函數不會執行任何操作。它需要一個參數ini,它會將其轉換爲float並重新指定爲ini,但不會返回值。因此,當variable_type_converter()函數退出時,該值將被丟棄,並且不會使用浮點型轉換。

+0

這是一個很好的答案。我想補充一點,通過做ini = float(ini)你實際上並沒有轉換任何東西。您需要返回一個值並將函數結果分配給函數外部。 def to_float(ini): return float(ini) ini = to_float(ini) –

+0

@MadWombat好點,我會補充一點。 –

1

定義變量時,應該使用a = "Distance"。您還應該檢查使用的轉換類型first == "Distance"

ini未定義,因爲函數conversion_type(first)正在返回一個未存儲的值。嘗試:

# get conversion type 
conversion_type_chosen = conversion_type(first) 

# calculate value 
converted_value = variable_type_convertor(conversion_type_chosen) 

# print result 
print "result: {}".format(converted_value)