2015-09-14 49 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)