csamuelsm Posted November 12, 2015 at 05:44 PM Report Share #589627 Posted November 12, 2015 at 05:44 PM (edited) 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 November 14, 2015 at 09:51 AM by csamuelsm Correcção das tags + GeSHi Link to comment Share on other sites More sharing options...
thoga31 Posted November 13, 2015 at 04:28 PM Report Share #589665 Posted November 13, 2015 at 04:28 PM 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. 2 Report Knowledge is free! Link to comment Share on other sites More sharing options...
csamuelsm Posted November 14, 2015 at 09:57 AM Author Report Share #589684 Posted November 14, 2015 at 09:57 AM (edited) 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 November 14, 2015 at 10:03 AM by csamuelsm Link to comment Share on other sites More sharing options...
pwseo Posted November 14, 2015 at 11:27 AM Report Share #589686 Posted November 14, 2015 at 11:27 AM 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: 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. 1 Report Link to comment Share on other sites More sharing options...
csamuelsm Posted November 14, 2015 at 05:03 PM Author Report Share #589695 Posted November 14, 2015 at 05:03 PM Muito obrigado pelas respostas, pessoal, mas nao era bem isso que eu queria. Desculpe por nao saber explicar, mas muito obrigado mesmo. Link to comment Share on other sites More sharing options...
thoga31 Posted November 14, 2015 at 05:29 PM Report Share #589699 Posted November 14, 2015 at 05:29 PM (edited) 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 November 14, 2015 at 05:29 PM by thoga31 1 Report Knowledge is free! Link to comment Share on other sites More sharing options...
pwseo Posted November 14, 2015 at 10:09 PM Report Share #589714 Posted November 14, 2015 at 10:09 PM 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 🙂 Link to comment Share on other sites More sharing options...
thoga31 Posted November 14, 2015 at 10:14 PM Report Share #589715 Posted November 14, 2015 at 10:14 PM 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! Link to comment Share on other sites More sharing options...
Recommended Posts
Create an account or sign in to comment
You need to be a member in order to leave a comment
Create an account
Sign up for a new account in our community. It's easy!
Register a new accountSign in
Already have an account? Sign in here.
Sign In Now