[Resolvido] Como executar o for inteiro e depois fazer o que está dentro dele - Python - Portugal-a-Programar
[Resolvido] Como executar o for inteiro e depois fazer o que está dentro dele
By csamuelsm, November 12, 2015 in Python
csamuelsm 0
Olá, eu sou iniciante em Python e gostaria de saber como eu percorro uma lista e divido um certo numero por todos os itens da lista e só então executo um certo comando. Eu sei que não expliquei bem mas, ai vai o trecho do código:
if cont % i != 0:
lista.append(cont)
print cont,
Nesse código ele irá imprimir cont cada vez mais(é como se obedecesse uma equação exponencial = 2^x;) pois estará adicionando ele a uma lista e a cada divisao ele será impresso. Eu quero saber como eu divido por todos os numeros da lista e só depois imprimo ele, para que ele não fique repetindo infinitamente.
Desde já, obrigado e desculpa se talvez não tenha explicado direito.
Edited November 14, 2015 by csamuelsm
Correcção das tags + GeSHi
Sou sincero: não percebi exactamente o que pretendes, apesar de ter lido cuidadosamente duas vezes.
Algo que eu reparei é que, dentro do ciclo for, estás a acrescentar valores a lista, sendo lista usada para o próprio ciclo. É suposto isto acontecer?
Eu agradecia imenso que tentasses descrever melhor o teu problema. Só sei que estás a tentar dividir um número pelos elementos de uma lista e depois queres apresentar o mesmo número ou outro com base numa condição qualquer.
Qual o objectivo do código? O que contém lista e o que é cont?
Atenção: o objectivo não é dividir o número etc etc etc, o objectivo é algo como isto: "Saber se um número é divisível por outro".
Exato, eu quero saber se um numero é divisivel pelos numeros de uma lista e se nao for, adicionar ele a essa lista e imprimi-lo. Cont é um contador que representa os numeros que serão verificados no for, porem, a cada item na lista que o numero nao é divisivel, ele é impresso e eu quero que so depois de saber que o cont nao é divisivel por todos da lista ele seja impresso (apenas uma vez).
csamuelsm,
Faço minhas as palavras do thoga31: tens que explicar melhor o teu problema.
Ainda assim, aqui vai uma tentativa de te fazer ver parte do problema do teu código. Tu queres o seguinte:
Verificar se um determinado número cont é divisível por cada número de uma lista
Acrescentar cont à lista apenas se todas as iterações do passo anterior forem falsas
E no entanto o que acontece é isto:
>>> cont = 3
>>> lista = [2, 4, 8, 10, 14]
>>> for i in lista:
...     if cont %i != 0:
...         lista.append(cont)
...         print cont,
[2, 4, 8, 10, 14, 3, 3, 3, 3, 3]
O problema principal é estares a misturar os dois passos. Se tu acrescentas cont à lista sempre que ele não é divisível por um número dessa lista, então numa lista com N números que não dividem cont tu vais acrescentar cont a essa lista N vezes. Se calhar seria conveniente manteres uma variável adicional (um valor booleano) que indique se já foi ou não encontrado um valor pelo qual cont seja divisível. No final do ciclo utilizas essa variável auxiliar para decidir se acrescentas ou não cont à lista (e se imprimes o seu valor).
Para piorar as coisas, deixaste print cont, dentro do ciclo e da condição, pelo que sempre que cont não seja divisível por i, o valor de cont vai ser impresso. Provavelmente queres esta linha fora do ciclo e não dentro do mesmo.
>>> div = False
...     if cont % i == 0:
...         div = True
>>> if not div:
...     lista.append(cont)
...     print cont,
[2, 4, 8, 10, 14, 3]
Logicamente, isto depende muito do teu problema real, que posso não ter compreendido completamente.
Muito obrigado pelas respostas, pessoal, mas nao era bem isso que eu queria. Desculpe por nao saber explicar, mas muito obrigado mesmo.
Eu continuo sem perceber uma coisa. Tu estás a verificar se um número é divisível pelos elementos de uma lista. Caso não seja, tu queres inserir esse número nessa mesma lista? Ou queres adicioné-lo a uma outra lista?
Se é esse o caso, o código do @pwseo é o indicado, ao qual apenas faço um ajuste uma vez que, em Python, não necessitamos de usar um valor booleano para este caso:
lista = [2, 4, 8, 10, 14]
if cont % i == 0:
# resultado: [2, 4, 8, 10, 14, 3]
Caso não seja isto o que pretendes, então que parte do problema não estamos a perceber?
Edited November 14, 2015 by thoga31
Desconhecia que podíamos utilizar um else como "alternativa" a um loop que terminou por exaustão, muito interessante