1
resposta

[Projeto] resposta desafio

As respostas estão no meu notebook: https://colab.research.google.com/drive/1lDz9UMM2-m0GXbbOwOmEOmmZkBYvGOg3?usp=sharing

Na questão 5, eu fiquei testando várias formas de como resolver a questão:

numero = int(input('Digite um número inteiro: '))

fatorial = 1
for i in range(numero, 1, -1):
  fatorial *= i

print(f"O fatorial de {numero} é {fatorial}")
numero = int(input("Digite um número inteiro: "))
fatorial = 1
sequencia = ""

for i in range(numero, 0, -1):
    fatorial *= i
    # Se for o último número (1), não coloca o "x" depois
    if i == 1:
        sequencia += f"{i}"
    else:
        sequencia += f"{i} x "

sequencia = sequencia.rstrip(" x ")
print(f"{numero}! = {sequencia} = {fatorial}")
import math

numero = int(input('Digite um número inteiro: '))

fatorial = math.factorial(numero)

print(f"O fatorial de {numero} é {fatorial}")
import math

n = int(input("Digite um número: "))

termos = [str(i) for i in range(n, 0, -1)]
expressao = " x ".join(termos)

print(f"{n}! = {expressao} = {math.factorial(n)}")
def calcular_fatorial(numero):
  if numero == 0 or numero == 1:
    return 1
  else:
    return numero * calcular_fatorial(numero - 1)

numero = int(input('Digite um número inteiro: '))
print(f"O fatorial de {numero} é {calcular_fatorial(numero)}")

Foi bem divertido

1 resposta

Olá, Maria! Tudo bem?

Que incrível ver a sua dedicação em explorar diferentes caminhos para resolver o mesmo problema! Isso é exatamente o que diferencia uma pessoa que apenas "codifica" de uma Cientista de Dados: a curiosidade de entender diversas formas de chegar ao resultado e escolher a mais eficiente para cada situação.

Você percorreu toda a jornada da lógica de programação no seu notebook:

Análise das suas implementações:

  • Laço for com range decrescente: Sua primeira e segunda soluções mostram um domínio ótimo da lógica iterativa. A ideia de montar a sequencia como uma string para exibir o cálculo passo a passo (5 x 4 x 3...) é excelente para a experiência do usuário.
  • **Uso da biblioteca math**: Esta é a forma mais "profissional" e performática. Em Data Science, sempre que existir uma função nativa otimizada como math.factorial(), ela será sua melhor amiga por ser mais rápida e confiável.
  • **Abordagem com .join()**: Você utilizou uma técnica avançada de manipulação de strings. Transformar os números em uma lista de strings e juntá-los com " x ".join(termos) é muito mais elegante e eficiente do que concatenar strings dentro de um laço.
  • Recursividade: Sua última solução toca em um conceito clássico da computação. Embora para números muito grandes a recursão possa atingir o limite de profundidade do Python, entender como uma função chama a si mesma é um marco no aprendizado de qualquer programador.

Uma pequena observação de segurança:

Nas suas soluções manuais (com laços ou recursão), lembre-se sempre de adicionar aquela verificação para números negativos, como você provavelmente viu no desafio. Como o fatorial de números negativos não é definido nos números inteiros, o Python poderia entrar em um loop infinito ou erro de lógica sem esse filtro inicial.

Seu desempenho de 5.2k de XP reflete bem esse seu empenho em "testar várias formas". Continue com essa mentalidade exploratória!

Espero que possa ter lhe ajudado!

De todas essas formas que você testou, qual delas você achou mais intuitiva de ler caso precisasse revisar esse código daqui a seis meses?