继续获取未定义的全局名称错误

All*_*ady 1 python variables global

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
Run Code Online (Sandbox Code Playgroud)

这是我正在为一个班级工作的计划的一部分......

# 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
Run Code Online (Sandbox Code Playgroud)

这些是我的全局变量......

Traceback (most recent call last):
  File "C:\Users\Alli\Downloads\HwyRobbery.py", line 13, in <module>
    riskType = none
NameError: name 'none' is not defined
Run Code Online (Sandbox Code Playgroud)

这是我不断变化的错误,具体取决于我尝试解决问题所做的更改

任何帮助将不胜感激!!!

谢谢!阿利

Mar*_*som 16

事实None并非如此none.Python区分大小写.


sen*_*rle 8

我看到的最初问题是它none不是Python中的内置值.None虽然.

此外,第一个函数中的嵌套if语句塔是不必要的.扁平化!

def defineType(riskCode):
    if riskCode == 1:
        riskType = High
    elif riskCode == 2:
        riskType = Moderate
    elif riskCode == 3:
        riskType = Low
    elif RiskCode == 4:
        riskType = No
Run Code Online (Sandbox Code Playgroud)

这不是错误,但它更具可读性,不是吗?(更容易输入:)

另外,我认为High,ModerateLow,并No在代码的其他地方定义?如果您使用它们作为枚举常数(即一组独特的整数,其值不改变), ,HIGH,MODERATE,LOWNO会更地道.

事实上,如果你这样做,整个功能可以像这样完成:

HIGH = 1
MODERATE = 2
LOW = 3
NO = 4
Run Code Online (Sandbox Code Playgroud)

现在你根本不需要映射它们; 你可以分配riskCoderiskType,虽然现在可能有点多余!

riskType = riskCode
Run Code Online (Sandbox Code Playgroud)

如果您想从风险代码中获取字符串,请尝试Artsiom Rudzenka的答案中的第二个字典.

最后......我建议将这些代码放在自己的命名空间中:

class Risk(object):
    HIGH = 1
    MODERATE = 2
    LOW = 3
    NO = 4
Run Code Online (Sandbox Code Playgroud)

然后你可以像这样引用它们:

if riskCode == Risk.HIGH: do_something()
Run Code Online (Sandbox Code Playgroud)

现在你可以像NO其他东西一样使用简短的单词.