Возврат ошибок при запуске функции внутри функции - PullRequest
0 голосов
/ 04 мая 2019

Я запускаю функцию внутри функции, и у меня возникают проблемы с получением верного значения.

a = ['123', '132', '231', '213', '312', '321']
u = a[0]
a.remove(u)

def sp(x,y):
  b = len(x.copy())
  for i in range (0,len(x)):
    if y[-2:] == x[i][0:2]:
      y = y + x[i][2]
      x.remove(x[i])
      break
  if b > len(x):
    sp(x,y)
  else:
    print(y)
    return y

С sp (a, u)

print (y)дает мне то, что я ищу, но возвращение у меня нет.Я понимаю, что y также является исходным вводом функции, поэтому он просто возвращает исходный ввод, однако я не знаю, как написать код по-другому, поэтому я получаю тот же результат, что и print (y).

Ответы [ 3 ]

1 голос
/ 04 мая 2019

Ваша рекурсивная функция кажется немного неправильной, попробуйте изменить это:

if b > len(x):
    sp(x,y)

на это

if b > len(x):
    y = sp(x,y)
0 голосов
/ 04 мая 2019

Как примерно так:

def sp(x,y):
  b = len(x.copy())
  if b > len(x):
    for i in range (0,len(x)):
      if y[-2:] == x[i][0:2]:
        y = y + x[i][2]
        x.remove(x[i])
        break
    return y    #returns the calculated y 
  else:
    return y    #returns original y

 print(sp(x, y))
0 голосов
/ 04 мая 2019

Я пытаюсь дать несколько общих ответов.

1.Рекурсия

Ваша функция является рекурсивной функцией.Это означает, что вы вызываете одну и ту же функцию внутри себя.Простой пример - функция faculty .В рекурсивной функции вам всегда нужно условие, которое останавливает рекурсию.

def faculty(num):
    if num <= 1:
        return 1
    else:
        return faculty(num-1) * num 

2.Печать против возврата

Мне кажется, у вас возникли проблемы с пониманием разницы между print и return оператором.

print : вы печатаете некоторый текст наконсоль, чтобы пользователь мог ее увидеть.Для ПК эта информация совершенно неактуальна.За пределами этой функции она не может работать с информацией, выводимой на консоль.

return : Это значение, которое возвращается при вызове функции.

Я думаю, что этот маленький пример может помочь:

def get_something():
    number = 5
    return number 

x = get_something()
print(x)  # In the console: 5

def print_something():
    number = 5
    print(number)    # in the console: 5

v = print_something()
print(v)  # in the console: None
# because the function didn't return anything (or to be precise: retured implicitly None)

3.Решение для вас

Если присмотреться, как работает рекурсия.Например, здесь https://medium.freecodecamp.org/how-recursion-works-explained-with-flowcharts-and-a-video-de61f40cb7f9 вы заметите, что вам нужно изменить следующее в вашем коде.Как уже было сказано в комментариях:

return sp(x,y)
...