2016-04-02 3 views
0

Я создал простую, произвольную функцию, которая выводит значение (1) на основе первого элемента из случайного перетасованного списка.Python: Неожиданные значения печати из простой функции

Посмотрите на следующий код: Я создаю переменную и устанавливаю ее в 1, тогда я создаю небольшой список (1,2,3), а затем перетасовываю список. Идея состоит в том, что если первый элемент этого списка (после перетасовки) равен 1 или 2, напечатайте значение «правильно», НО если первым элементом списка будет 3, установите «правильный» на 0 и затем снова запустите функцию. Как видно из инструкции if, когда значение «value» установлено равным 0, я не ожидаю, что это будет напечатано вообще, потому что функция запускается снова (chair()) до того, как произойдет какая-либо печать.

Запустив это, я ожидал найти распечатку из 5 значений 1. Проблема в том, что я тоже вижу 0 значений. Это кажется очень простой функцией, и я чувствую себя немного, но глупо, потому что не вижу, почему это происходит. Есть идеи?

def chair(): 

    correct = 1 

    a = [1,2,3] 
    random.shuffle(a) 

    if a[0] == 3: 
     correct = 0 
     chair()    #run function again without printing 

    print correct 


for i in range(5): 
    chair() 

ответ

0

Ваша функция является рекурсивной, поэтому при вызове функции еще раз, чтобы избежать печати, функция будет по-прежнему закончить. Если вы добавили инструкцию else, вы увидите, что эти нули исчезнут. Пример:

def chair(): 

    correct = 1 

    a = [1,2,3] 
    random.shuffle(a) 

    if a[0] == 3: 
     correct = 0 
     chair()    #run function again without printing 
    else: 
     print correct 


for i in range(5): 
    chair() 

редактировать: грамматика редактировать: пример

+0

Отлично. Это небольшое изменение было именно тем, что мне было нужно. Спасибо. – Steve

1

Просто вызова chair() не изменяет correct. Вам нужно сделать correct = chair(). Проблема с этим: chair() ничего не возвращает; он печатает его. Вы должны переместить печать на внешней стороне функции и возврата вместо:

def chair(): 

    correct = 1 

    a = [1,2,3] 
    random.shuffle(a) 

    if a[0] == 3: 
     correct = chair() 

    return correct 


for i in range(5): 
    print chair() 
+0

почему вы не можете просто 'возврат стул()' вместо назначения его на 'correct' – danidee

+0

@danidee: Нет причин. Я не вижу никакой пользы в любом случае. – zondo

+0

@ danidee Не будет ли в основном делать «правильный» лишний? Будет ли значение возвращено в цикл for? – jDo

Смежные вопросы