2015-10-04 5 views
0

Мой код:«Реферировано Перед назначением» ошибка в условном операторе

def sandwich(str, meat = 'ham', cheese = 'American'): 

    if sandwich(str, meat = None, cheese = None): 
     sandwich = str +' bread sandwich with turkey ' 
    else: 
     sandwich = str +' bread sandwich with ' + meat + ' and '+ cheese + ' cheese' 
    return sandwich 

Я попытался с помощью параметра определения. Это не сработало. Это дало мне ошибку:

The local variable(sandwich) is being referenced before the assignment. 

Пожалуйста, помогите!

+0

Пожалуйста, внесите код проблемы здесь, а не по какой-либо ссылке. – Mureinik

+0

Защиту Сэндвич (ул, мясо = 'ветчина', сыр = 'американский'): глобальный сэндвич если не бутерброд (улица, мясо = None, сыр = None): сэндвич ул + хлеб сэндвич с индейкой '= еще : сэндвич = str + 'хлеб сэндвич с' + мясо + 'и' + сыр + 'сыр' сэндвич с возвратом –

+0

Он также находится в описании. Ссылка на вопрос. –

ответ

1

Вы снова вызываете функцию, и вы называете свою переменную тем же именем, что и функция.

исправляющие оба этих, и вы в конечном итоге с:

def sandwich(bread, meat='ham', cheese='american'): 
    if meat == None and cheese == None: 
     return '{} sandwich with turkey'.format(bread) 
    return '{} sandwich with {} and {} cheese'.format(bread, 
               meat, cheese) 
0

def sandwich( начинает функцию определение. sandwich будет именем функции.

sandwich = начинает задание. sandwich будет называться переменная. Поскольку вы делаете это в теле функции, переменная будет local, а Python предполагает, что вы хотите, чтобы sandwich ссылался на эту переменную, а не на функцию по всему телу функции.

sandwich(str, meat = None, cheese = None) вызывает функцию, удерживаемую в локальной переменной sandwich. (Помните, что Python предположит, что вы имеете в виду локальную переменную, когда вы пишете sandwich внутри тела функции.) Но ничто не было назначено этой переменной, но при этом вы получите упомянутое сообщение об ошибке.

Я предполагаю, что вы хотели бы проверить переданные аргументы функции. Если да, то Burhan's answer показывает, как вы можете это сделать.

0
def sandwich(bread, meat='ham', cheese='american'): 
    if meat == None and cheese == None: 
     return '{} bread sandwich with turkey'.format(bread) 
    return '{} bread sandwich with {} and {} cheese'.format(bread, meat, cheese) 

Я не вижу, как это будет работать. Если установлены значения «ham» и «america», как будет проходить первое условие if? Это никогда не вернет «{} хлеб сэндвич с индейкой», потому что значения установлены.