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

Uso do lambda no exercício 2

  1. Escreva uma função que gere a tabuada de um número inteiro de 1 a 10, de acordo com a escolha da pessoa usuária. Como exemplo, para o número 7, a tabuada deve ser mostrada no seguinte formato:

nesse exercício usei a função e saída saiu como esperado:

def tabuada(numero: int) -> None:
  """
    Recebe um número inteiro e imprime a tabuada desse número de 1 a 10.
  """
  for i in range(1, 11):
    print(f'{numero} x {i} = {numero * i}')
1 x 1 = 1
1 x 2 = 2
1 x 3 = 3
1 x 4 = 4
1 x 5 = 5
1 x 6 = 6
1 x 7 = 7
1 x 8 = 8
1 x 9 = 9
1 x 10 = 10

Porém ao usar o lambda para resolver o mesmo problema eu tive um array de none, porque acontece isso?

tab = lambda numero: (print(f'{numero} x {i} = {numero * i}') for i in range(1, 11))
1 x 1 = 1
1 x 2 = 2
1 x 3 = 3
1 x 4 = 4
1 x 5 = 5
1 x 6 = 6
1 x 7 = 7
1 x 8 = 8
1 x 9 = 9
1 x 10 = 10
[None, None, None, None, None, None, None, None, None, None]
2 respostas
solução!

Olá Jackson, tudo bem com você?

O problema está no uso do lambda com a função print. Quando você utiliza um lambda para criar uma função anônima, esta deve retornar algo, mas a função print não retorna nenhum valor (ela retorna None), causando o comportamento que você observou.

Para corrigir isso, você pode ajustar o código para gerar a tabuada corretamente sem retornar None. Veja um exemplo:



# Usando lambda e list comprehension
tabuada = lambda numero: [f"{numero} x {i} = {numero * i}" for i in range(1, 11)]

# Gerando a tabuada do número 7
resultado = tabuada(7)

# Imprimindo os resultados
for linha in resultado:
    print(linha)

Resultado:

Imagem apresentando o resultado da execução do codigo a anterior. É apresentado uma tabuada do 7

No código acima a lambda function usa uma list comprehension para gerar as linhas da tabuada como strings e logo após ocorre a iteração sobre o resultado para exibir cada linha. A diferença aqui é que a list comprehension armazena os valores como strings, ao invés de tentar usar print diretamente dentro do lambda. Isso evita os None no resultado.

Espero ter ajudado. Conte com o apoio do Fórum na sua jornada. Fico à disposição.

Abraços e bons estudos!

Caso este post tenha lhe ajudado, por favor, marcar como solucionado

Entendi, muito obrigado!