Solucionado (ver solução)
Solucionado
(ver solução)
3
respostas

"TypeError" ao tentar retornar dois valores de uma função Python. Como resolver?

Estou tentando retornar dois valores de uma função, mas estou obtendo erro:

from functools import lru_cache

@lru_cache()  # will cache 128 most recently used results by default. Use maxsize=.. to change this number
def fibonnaci(n):
    count =0
    if n ==0 or n == 1:
        return 1
    else:
        count +=2
        return f" fib= {fibonnaci(n - 1) + fibonnaci(n - 2)} : count = {count}"

print(fibonnaci(5))

Estou recebendo o erro:

TypeError: can only concatenate str (not "tuple") to str

O que está errado? Como corrigir?

3 respostas

"Python working a bit differently to JavaScript for example, the value you are concatenating needs to be same type, both int or str"

O valor que você está concatenando precisa ser do mesmo tipo.

Solução pra fibonnaci:

def fibonnaci(n):
    if (n < 1):
        return 1
    return n * fibonnaci(n - 1)

print(fibonnaci(5))

É sempre bom evitar que uma função retorne mais do que um tipo de dado.

fonte: https://stackoverflow.com/questions/51252580/getting-a-typeerror-can-only-concatenate-str-not-int-to-str

@DIOGO JUNQUEIRA GERALDO; eu preciso fazer o fibonnaci recursivo para retornar o número de vezes que a função é chamada...

solução!

Para que você tenha uma variável de controle em uma recursiva existem duas opções:

Utilizar uma variável global para gerenciar o estado das chamadas:

# Nada recomendado
callstack = 0
def fibonnaci(number):
    global callstack
    callstack += 1
    print(callstack)
    if (number < 1):
        return 1
    return number * fibonnaci(number - 1)

print(fibonnaci(5))

Tipos de erros que podem ocorrer: https://stackoverflow.com/questions/10851906/python-3-unboundlocalerror-local-variable-referenced-before-assignment

Ter essa variável sendo passada por parametro

# Recomendado
def fibonnaci(number, callstack=0):
    callstack += 1
    print(callstack)

    if (number < 1):
        return 1
    return number * fibonnaci(number - 1, callstack)

print(fibonnaci(5))

optional parameter: https://stackoverflow.com/questions/9539921/how-do-i-create-a-python-function-with-optional-arguments