Python 继续获取未定义的全局名称错误
这是我为一个班级做的一个项目的一部分Python 继续获取未定义的全局名称错误,python,variables,global,Python,Variables,Global,这是我为一个班级做的一个项目的一部分 def defineType(riskCode): if riskCode == 1: riskType = High else: if riskCode == 2: riskType = Moderate else: if riskCode == 3: riskType = Low else
def defineType(riskCode):
if riskCode == 1:
riskType = High
else:
if riskCode == 2:
riskType = Moderate
else:
if riskCode == 3:
riskType = Low
else:
if RiskCode == 4:
riskType = No
这些是我的全局变量
# Global Variables
custName = input('Please enter your name: ')
custAge = int(input('Please enter your age: '))
custViolation = int(input('Please enter the number of violations: '))
riskCode = 0
estimatePrice = 0
riskType = none
回溯(最近一次呼叫最后一次):
文件“C:\Users\Alli\Downloads\hwhorbbery.py”,第13行,在
风险类型=无
名称错误:未定义名称“无”
这是我不断得到的错误,根据我试图解决问题所做的更改而有所不同
任何帮助都将不胜感激
谢谢!
Alli它是
None
不是None
。Python区分大小写。它是None
而不是None
。Python区分大小写。我看到的最初问题是,none
不是Python中的内置值<但代码>无为空
此外,第一个函数中的嵌套if语句塔是不必要的。把它压扁
Traceback (most recent call last):
File "C:\Users\Alli\Downloads\HwyRobbery.py", line 13, in <module>
riskType = none
NameError: name 'none' is not defined
这不是一个错误,但它更具可读性,不是吗?(也更容易键入:)
另外,我认为高
、中等
、低
和无
在代码的其他地方都有定义?如果将它们用作枚举常量(即,作为一组值不变的唯一整数),高、中、低和无将更为惯用
事实上,如果你这样做了,整个功能就可以被取消了,就像这样:
def defineType(riskCode):
if riskCode == 1:
riskType = High
elif riskCode == 2:
riskType = Moderate
elif riskCode == 3:
riskType = Low
elif RiskCode == 4:
riskType = No
现在你根本不需要绘制它们的地图;您只需将riskCode
分配给riskType
,尽管现在这可能有点多余
HIGH = 1
MODERATE = 2
LOW = 3
NO = 4
如果要从风险代码中获取字符串,请尝试第二个字典
最后。。。我建议将这些代码放在它们自己的名称空间中:
riskType = riskCode
然后,您可以这样引用它们:
class Risk(object):
HIGH = 1
MODERATE = 2
LOW = 3
NO = 4
现在,您可以自由地使用诸如NO
之类的短词来表示其他内容。我看到的最初问题是none
在Python中不是内置值<但代码>无
为空
此外,第一个函数中的嵌套if语句塔是不必要的。把它压扁
Traceback (most recent call last):
File "C:\Users\Alli\Downloads\HwyRobbery.py", line 13, in <module>
riskType = none
NameError: name 'none' is not defined
这不是一个错误,但它更具可读性,不是吗?(也更容易键入:)
另外,我认为高
、中等
、低
和无
在代码的其他地方都有定义?如果将它们用作枚举常量(即,作为一组值不变的唯一整数),高、中、低和无将更为惯用
事实上,如果你这样做了,整个功能就可以被取消了,就像这样:
def defineType(riskCode):
if riskCode == 1:
riskType = High
elif riskCode == 2:
riskType = Moderate
elif riskCode == 3:
riskType = Low
elif RiskCode == 4:
riskType = No
现在你根本不需要绘制它们的地图;您只需将riskCode
分配给riskType
,尽管现在这可能有点多余
HIGH = 1
MODERATE = 2
LOW = 3
NO = 4
如果要从风险代码中获取字符串,请尝试第二个字典
最后。。。我建议将这些代码放在它们自己的名称空间中:
riskType = riskCode
然后,您可以这样引用它们:
class Risk(object):
HIGH = 1
MODERATE = 2
LOW = 3
NO = 4
现在,您可以自由地使用诸如NO
之类的短词来表示其他内容。无需使用函数来表示风险映射,您只需使用以下内容:
if riskCode == Risk.HIGH: do_something()
但在高的情况下,…No不是实例或变量,而是字符串,而不是:
riskmapping = {1:High, 2:Moderate, 3:Low, 4:No}
用法:
riskmapping = {1:'High', 2:'Moderate', 3:'Low', 4:'No'}
或
无需使用函数要使用函数进行风险映射,您只需使用以下内容:
if riskCode == Risk.HIGH: do_something()
但在高的情况下,…No不是实例或变量,而是字符串,而不是:
riskmapping = {1:High, 2:Moderate, 3:Low, 4:No}
用法:
riskmapping = {1:'High', 2:'Moderate', 3:'Low', 4:'No'}
或
除此之外,我对简洁性的贡献是:
if riskmapping[currentRiskCode]:
#do smth
除此之外,我对简洁性的贡献是:
if riskmapping[currentRiskCode]:
#do smth
如果您正在修改函数中的全局变量,而不是声明它,请不要这样做
您必须使用全局关键字
riskCodes = {1: 'High', 2: 'Moderate', 3: 'Low', 4: 'No'}
def defineType(riskCode):
riskType = riskCodes[riskCode]
如果您正在修改函数中的全局变量,而不是声明它,请不要这样做
您必须使用全局关键字
riskCodes = {1: 'High', 2: 'Moderate', 3: 'Low', 4: 'No'}
def defineType(riskCode):
riskType = riskCodes[riskCode]
在函数中设置riskType
是该函数的本地设置,不会影响全局设置中的值。您需要将global riskType
放在试图修改它的代码之前,告诉您的函数使用全局风险类型
None
应大写
我相信您的意思是将riskType设置为字符串,因此应该引用这些值
Python的else if
有一个elif
更正后的代码:
def defineType(riskCode):
global riskType
if riskCode == 1:
riskType = High
在函数中设置riskType
是该函数的本地设置,不会影响全局设置中的值。您需要将global riskType
放在试图修改它的代码之前,告诉您的函数使用全局风险类型
None
应大写
我相信您的意思是将riskType设置为字符串,因此应该引用这些值
Python的else if
有一个elif
更正后的代码:
def defineType(riskCode):
global riskType
if riskCode == 1:
riskType = High
NameError:name'High'没有定义我猜Alli OGrady是python新手(如果没有的话,很抱歉!),所以我想你应该展示一下它的用法。实际上我已经根据OP代码添加了我的代码,所以我想他对这个变量有定义,我只给出了他的代码的简短版本。def main():assignRisk()calculateIns()defineType()如果custAge<16或custAge>105:print('Invalid Entry')elif custViolation<0:print('Invalid Entry')else:print(custName',作为',riskType,'risk driver,您的保险将花费美元',estimatePrice,.00')def defineType():全局风险类型如果riskCode==1:riskType=High-elif-riskCode==2:riskType=Medium-elif-riskCode==3:riskType=Low-elif-riskCode==4:riskType=NoNameError:name“High”未定义我猜Alli OGrady是python的新手(如果不是,很抱歉!)所以我想你应该展示一下用法。实际上我已经添加了基于OP代码的代码,所以我想他对这个变量有定义,我只给出了他的代码的简短版本。def main():assignRisk()calculate