Ir ao conteúdo

Python Exercício simples de LISTA no python


Ir à solução Resolvido por Midori,

Posts recomendados

Postado

Provavelmente meu código tá bem errado e gostaria que alguém me ajudasse a corrigir ele.

Sou iniciante e ainda não desenvolvi um raciocinio pra resolver essas questões kkk.

Se alguém puder me ajudar a entender e resolver eu agradeço

 

lista.png.2684041f075aa938d4cb59f1d90a740f.png

def divisores(num):
  r = 0
  n = 1
  l1 = []
  
  while num>=n:
    r = r + num%n==0
    n = n + 1
    l1.append(r)
    
print(divisores(4))
    

 

Postado

@Felipe2719 Da forma que você fez está colocando na lista a soma dos testes do número pelo módulo da variável n. Isso não faz sentido porque num%n==0 vai retornar um valor boolean, então faça esse teste no If só para pegar os divisores,

 

while(num >= n):
    if(num % n == 0):
        l1.append(n)
    n += 1

 

  • Curtir 1
Postado

 

22 minutos atrás, Midori disse:

@Felipe2719 Da forma que você fez está colocando na lista as somas dos testes do número pelo módulo da variável n. Isso não faz sentido porque num%n==0 vai retornar um valor boolean, então faça esse teste no If só para pegar os divisores,

 


while(num >= n):
    if(num % n == 0):
        l1.append(n)
    n += 1

 

@Midori pra eu excluir o próprio numero entre os divisores, eu teria que usar um elif ou else em baixo do if ?

Postado

@MidoriNessa mesma questão, pede pra eu fazer uma função que retorna a true se o número for perfeito (a soma dos divisores ser igual ao próprio numero) chamando a função anterior e que retorna a false se não for perfeito.

Da um help aí por favor. Tô em dúvida se devo usar outro While ou se dá pra fazer no If direto

 

 

Postado
19 minutos atrás, Felipe2719 disse:

Da um help aí por favor. Tô em dúvida se devo usar outro While ou se dá pra fazer no If direto

Dá para usar a função sum para somar os elementos da lista, mas se não for permitido resolver assim terá que fazer com loop. O If vai ter que usar de qualquer forma para comparar a soma com o número.

Postado

@Midori Pois é, mas por enquanto eu só posso usar While kk

Mas to travado na hora de de fazer a comparação do while e de somar as posições. Eu teria que fazer algo parecido com isso ? 😫 

e na hora de retornar, eu tenho que retornar a True/False ou tenho que fazer a função retornar a booleano

pf = []
while len<(pf):
  if num==divisores(num):
pos[lista] + pos[lista]
pos = pos + 1             

           

?

Postado

@Felipe2719 Sua nova função tem que ter dois parâmetros, um para o número e outro para a lista. E o loop é só para acumular a soma dos elementos da lista passada como argumento e não deve ter nenhum If nele. O If que falei é o da comparação da soma com o número, mas na verdade nem esse precisa já que dá para fazer o return com a comparação,

 

def perfeito(num, lista):
    ...
    return (soma == num)

 

 Para somar os elementos da lista é assim,

soma += lista[pos]

 

 

  • Curtir 1
Postado

@Midori Oi, desculpa pertubar de novo, mas agora tá dando o erro ''list index out of range'' 🥺

Fiz o código dessa forma :

def questao3(num):
  lista = divisores(num)
  soma = 0
  pos = 0
  
  while num>=n:
    soma = soma + lista[pos]
    pos = pos + 1
  return (soma==num)
 
    
print(questao3(2)
  

 

Postado

@Felipe2719 Para pegar os elementos da lista a variável do índice tem que ir de 0 até o último elemento, para isso terá que usar len() que retorna o tamanho da lista assim,

 

def questao3(num):
    soma = 0
    lista = divisores(num)
    for pos in range(len(lista)):
        soma += lista[pos]
    return (soma == num)

 

Postado
16 minutos atrás, Felipe2719 disse:

só não entendi o porque desse -1

A função len retorna o tamanho/quantidade de elementos da lista e o primeiro elemento está na posição 0.

 

Então se a lista tiver 5 elementos, len vai retornar essa quantidade, mas o índice para pegar os elementos vai de 0 a 4. Por isso tenho que tirar 1.

  • Obrigado 1

Crie uma conta ou entre para comentar

Você precisa ser um usuário para fazer um comentário

Criar uma conta

Crie uma nova conta em nossa comunidade. É fácil!

Crie uma nova conta

Entrar

Já tem uma conta? Faça o login.

Entrar agora

Sobre o Clube do Hardware

No ar desde 1996, o Clube do Hardware é uma das maiores, mais antigas e mais respeitadas comunidades sobre tecnologia do Brasil. Leia mais

Direitos autorais

Não permitimos a cópia ou reprodução do conteúdo do nosso site, fórum, newsletters e redes sociais, mesmo citando-se a fonte. Leia mais

×
×
  • Criar novo...

LANÇAMENTO!

eletronica2025-popup.jpg


CLIQUE AQUI E BAIXE AGORA MESMO!