2017-01-29 2 views
-1

prim(n) - это функция, которую я написал, она проверяет, является ли число n prim. prim_2(n) возвращает список всех простых чисел до n.Почему не работает возврат? Код работает, но тест не выполняется. # Разница между print() и return

prim_liste = [] 
def prim_2(n): 
    if n == 1: 
     prim_liste.reverse() 
     print(prim_liste) # return prim_liste doesn't work. 
    elif n > 1: 
     if prim(n) == "Is prim": 
      prim_liste.append(n) 
      prim_2(n-1)     
     elif prim(n) == "Is not prim": 
      prim_2(n-1) 

Если я заменяю print(prim_liste) с return prim_liste, мои тесты не может в любом случае.

prim_2 (5) == [2, 3, 5]

Это действительно возвращается значение False, хотя мой код работает.

Когда я запускал свою программу с return prim_liste, ничего не случилось. С print(prim_liste) он «возвращает» правильный результат.

Благодарим за помощь! :) Извините за мой плохой английский и этот запутанный пост.

+0

Вы видели распечатку основного списка? вы уверены, что prim (n) возвращает то, что вы ожидали? – Shiping

+0

Да, я это увидел. функция работает как разыскиваемая, из-за которой я был смущен. – Mindy

ответ

0

Вы должны использовать return prim_2(n-1) в рекурсии также, в противном случае функция ничего не возвращает ничего другого, чем 1.

Единственный возврат в одном случае не возвращается из всей рекурсии, только от того, этап и все другие вызовы функции также должны вернуть значение.

+0

Большое спасибо! :) Я трачу так много времени, чтобы написать этот код, и Было так расстраивающе, что я не мог понять, почему мой тест терпит неудачу. Я очень в начале кодирования, и ваш ответ помог мне понять, в чем проблема. Я часто был не уверен, когда использовать возврат и как использовать его в рекурсии. Думаю, я понимаю это сейчас. :) – Mindy

0

Вы должны увидеть список адресов, распечатанных в ваших кодах. если нет, prim() должен иметь что-то неправильное. если вам нужно prim_2(), чтобы вернуть основной список, вам нужно сделать следующее.

prim_liste = [] 

def prim_2(n): 
    if n == 1: 
     prim_liste.reverse() 
     return prim_liste 
    elif n > 1: 
     if prim(n) == "Is prim": 
      prim_liste.append(n) 
     # test for "Is not prim" is not necessary. 
     return prim_2(n-1) # be sure to return what prim_2() returns    
0

Моя ошибка в том, что я не использовал возврат в рекурсии. Так что это не могло дать мне результата. С print() он показал мне результат, но тест не мог работать так, потому что без использования возврата функция возвращает только None. Из-за этого все мои тесты терпят неудачу, хотя код казался правильным.

prim_liste = [] 
def prim_2(n): 
    if n == 1: 
     prim_liste.reverse() 
     return prim_liste  
    elif n > 1: 
     if prim(n) == "Is prim": 
      prim_liste.append(n) 
      return prim_2(n-1)     
    else: 
     return prim_2(n-1) 
Смежные вопросы