Jump to content
csamuelsm

[Resolvido] Como executar o for inteiro e depois fazer o que está dentro dele

Recommended Posts

csamuelsm

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:

for i in lista:
                   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 by csamuelsm
Correcção das tags + GeSHi

Share this post


Link to post
Share on other sites
thoga31

Boa tarde.

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".

Cumprimentos.

  • Vote 2

Knowledge is free!

Share this post


Link to post
Share on other sites
csamuelsm

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).

Obrigado pela resposta.

Edited by csamuelsm

Share this post


Link to post
Share on other sites
pwseo

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:

  1. Verificar se um determinado número cont é divisível por cada número de uma lista
  2. Acrescentar cont à lista apenas se todas as iterações do passo anterior forem falsas

E no entanto o que acontece é isto:

Python 2.7.6 (default, Jun 22 2015, 17:58:13) 
>>> cont = 3
>>> lista = [2, 4, 8, 10, 14]
>>> 
>>> for i in lista:
...     if cont %i != 0:
...         lista.append(cont)
...         
...         print cont,
... 
3 3 3 3 3
>>> lista
[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.

Sugestão:

Python 2.7.6 (default, Jun 22 2015, 17:58:13) 
>>> cont = 3
>>> lista = [2, 4, 8, 10, 14]
>>> div = False
>>> 
>>> for i in lista:
...     if cont % i == 0:
...         div = True
... 
>>> if not div:
...     lista.append(cont)
...     print cont,
... 
3
>>> lista
[2, 4, 8, 10, 14, 3]

Logicamente, isto depende muito do teu problema real, que posso não ter compreendido completamente.

  • Vote 1

Share this post


Link to post
Share on other sites
csamuelsm

Muito obrigado pelas respostas, pessoal, mas nao era bem isso que eu queria. Desculpe por nao saber explicar, mas muito obrigado mesmo.

Share this post


Link to post
Share on other sites
thoga31

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:

cont = 3
lista = [2, 4, 8, 10, 14]

for i in lista:
   if cont % i == 0:
       break
else:
   lista.append(cont)

print(lista)
# 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?

Cumprimentos.

Edited by thoga31
  • Vote 1

Knowledge is free!

Share this post


Link to post
Share on other sites
pwseo

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:

Desconhecia que podíamos utilizar um else como "alternativa" a um loop que terminou por exaustão, muito interessante :)

Share this post


Link to post
Share on other sites
thoga31

Desconhecia que podíamos utilizar um else como "alternativa" a um loop que terminou por exaustão, muito interessante :)

O tutorial fornecido online e com o IDLE é muito completo. A secção 4.4 fala disto mesmo ;)

Loop statements may have an else clause; it is executed when the loop terminates through exhaustion of the list (with for) or when the condition becomes false (with while), but not when the loop is terminated by a break statement.


Knowledge is free!

Share this post


Link to post
Share on other sites

Join the conversation

You can post now and register later. If you have an account, sign in now to post with your account.

Guest
Reply to this topic...

×   Pasted as rich text.   Restore formatting

  Only 75 emoji are allowed.

×   Your link has been automatically embedded.   Display as a link instead

×   Your previous content has been restored.   Clear editor

×   You cannot paste images directly. Upload or insert images from URL.


×
×
  • Create New...

Important Information

By using this site you accept our Terms of Use and Privacy Policy. We have placed cookies on your device to help make this website better. You can adjust your cookie settings, otherwise we'll assume you're okay to continue.