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
Это моя глобальная переменная...
Traceback (most recent call last):
File "C:\Users\Alli\Downloads\HwyRobbery.py", line 13, in <module>
riskType = none
NameError: name 'none' is not defined
Это ошибка, которую я продолжаю получать с различными вариантами в зависимости от того, какие изменения я предпринимаю, чтобы попытаться решить проблему.
Любая помощь будет принята с благодарностью.
Спасибо! Алли
Это None
не None
. Python чувствителен к регистру.
Первоначальная проблема, которую я вижу, заключается в том, что none
не является значением built- в 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
Это не ошибка, но она намного читаема, нет? (Легче вводить тоже:)
Кроме того, я полагаю, что High
, Moderate
, Low
и No
определены в другом месте вашего кода? Если вы используете их как перечисляемые константы (т.е. Как набор уникальных целых чисел, значения которых не изменяются), High
, Moderate
, Low
и No
будут более идиоматичными.
И на самом деле, если вы это сделали, вся функция может быть устранена следующим образом:
HIGH = 1
MODERATE = 2
LOW = 3
NO = 4
Теперь вам не нужно отображать их вообще; и вы можете просто назначить riskCode
riskType
, хотя теперь это может быть немного лишним!
riskType = riskCode
Если вы хотите получить строки из кодов риска, попробуйте второй словарь от ответа Арциома Рудзенки.
Наконец... Я бы предложил помещать эти коды в собственное пространство имен:
class Risk(object):
HIGH = 1
MODERATE = 2
LOW = 3
NO = 4
Затем вы можете ссылаться на них следующим образом:
if riskCode == Risk.HIGH: do_something()
Теперь вы можете использовать короткие слова, такие как No
для других вещей.
Нет необходимости использовать функцию для использования функции для сопоставления рисков, вы можете просто использовать следующее:
riskmapping = {1:High, 2:Moderate, 3:Low, 4:No}
Но в случае, если High,... No не является экземплярами или переменными, а просто строками, чем:
riskmapping = {1:'High', 2:'Moderate', 3:'Low', 4:'No'}
Использование:
highRisk = riskmapping[1]
Или
if riskmapping[currentRiskCode]:
#do smth
Кроме того, мой вклад в простоту:
riskCodes = {1: 'High', 2: 'Moderate', 3: 'Low', 4: 'No'}
def defineType(riskCode):
riskType = riskCodes[riskCode]
Если вы изменяете глобальные переменные в функции, отличной от той, которая была объявлена, не вам нужно использовать глобальное ключевое слово.
def defineType(riskCode):
global riskType
if riskCode == 1:
riskType = High
global
означает, что вы делаете что-то ужасно, ужасно неправильно.
Настройка riskType
внутри вашей функции является локальной для этой функции и не влияет на значение в глобальном. Вы должны сообщить своей функции, чтобы использовать глобальное значение, помещая global riskType
перед кодом, который пытается его изменить.
None
следует загладить.
Я полагаю, вы хотели установить riskType для строки, и поэтому эти значения должны быть указаны.
Python имеет elif
для else if
.
Исправленный код:
# Global Variables
riskCode = 0
estimatePrice = 0
riskType = None
def defineType(riskCode):
global riskType
if riskCode == 1:
riskType = "High"
elif riskCode == 2:
riskType = "Moderate"
elif riskCode == 3:
riskType = "Low"
elif RiskCode == 4:
riskType = "No"