Ver Feed RSS

root@blog:/# chmod o+r *

[Curso de Python] A estrutura While

Avalie este Post de Blog

Antes de prosseguir leia os artigos anteriores aqui



Estamos avançando no conteúdo!!! Agora vamos ver algo fundamental para muitos conceitos em Python: O while.

A Estrutura While



A estrutura while (enquanto) ou loop while, como também é chamado, tem como objetivo repetir a execução de um bloco de código enquanto uma certa condição é valida. A sua estrutura é a seguinta:

Código :
while condição:
    #Bloco de código
O bloco de código dentro do while vai ser executado múltiplas vezes, de acordo com o "valor" da condição. Enquanto a condição for True, o bloco será executado, quando a condição for False, o bloco não será mais executado. Vamos a um pequeno exemplo:
Código :
contador = 3
while contador != 0:
    print "%i..."%(contador)
    contador = contador - 1
print 'Boom!!!'
Executando temos a seguinte saída:
Código :
3...
2...
1...
Boom!
Nesse pequeno exemplo fizemos uma contagem regressiva de 3 até 0 (Boom!!!). Vamos analisar como o interpretador Python executou esse trecho de código:

  1. Primeiro criou a variável contador e atribuiu o valor 3 a ele;
  2. Entrou no loop while;
  3. Verificou que o contador (agora com o valor 3) era diferente de 0;
  4. Imprimiu "3..."
  5. Decrementou o contador por 1;
  6. Chegou ao fim do bloco, agora irá testar novamente a condição de contador !=0;
  7. Verificou que o contador (agora com o valor 2) era diferente de 0;
  8. Imprimiu "2..."
  9. Decrementou o contador por 1;
  10. Chegou ao fim do bloco, agora irá testar novamente a condição de contador !=0;
  11. Verificou que o contador (agora com o valor 1) era diferente de 0;
  12. Imprimiu "1..."
  13. Decrementou o contador por 1;
  14. Chegou ao fim do bloco, agora irá testar novamente a condição de contador !=0;
  15. Verificou que o contador (agora com o valor 0) é igual a 0, logo não satisfaz a condição;
  16. Saiu do loop while"
  17. Imprime 'Boom!!!';


O while tem 2 caracterícas que devem ser ressaltadas:

  • Ele verifica a condição ao entrar no loop;
  • Quando a condição não é satisfeita ele não executa o loop uma última vez;


Esse código abaixo mostra que ele analisa a condição antes de entrar no loop:
Código :
contador = 0
while contador != 0:
    print "%i..."%(contador)
    contador = contador - 1
print 'Boom!!!'
Executando esse código temos a seguinte saída:
Código :
Boom!!!
As condições que podem ser utilizadas dentro do while são todas aquelas que eu já expliquei anteriormente aqui.

Para quem ainda acompanha meus posts deixo alguns exercícios:

  1. Faça um programa que calcule a multiplicação de dois números utilizando apenas o operador de soma. Dica: A multiplicação uma sequência de somas: 3*5 é equivalente a 5+5+5 (três vezes o cinco) ou 3+3+3+3+3 (cinco vezes o três).
  2. Faça um programa que receba vários números e ao receber o número 0 informe quantos números foram informados.


Até mais...

Comentários

  1. Avatar de Não Registrado
    No último código, a primeira instrução deve ser 'contador = 0'
  2. Avatar de Magnun
    Obrigado, já corrigi!! Mal do ctrl+c ctrl+v, sabe como é, né?!
  3. Avatar de lord4rk
    Ola Magnun

    Mais uma vez obrigado por compartilhar seus conhecimentos!!

    ex 2:
    Código :
    num, count = 0, 0
    while count == 0:
        entrada = int(raw_input('Digite um valor e 0 para terminar: '))
        if entrada == 0:
            count += 1
            num += 1
            print 'foram digitados %i valores' % num
     
        else:
            num += 1

    no ex 1 eu nao fiz , ainda nao tenho ideia!! -.-

    []'s
    Jr
  4. Avatar de Magnun
    Olá lord4rk,

    Seu código está muito bom cara, funciona perfeitamente!! Quanto a questão número 1, vou te dar uma dica: receba 2 números, por exemplo x e n. Some o x "n vezes". Como somar ele?? Um loop que se repita n vezes... Dê uma olhada no exemplo da contagem regressiva que eu postei...

    Ah, obrigado por comentar!!!
  5. Avatar de alanteixeira
    numero1=int(raw_input('Entre com o valor 1: '))
    numero2=int(raw_input('Entre com o valor 2: '))
    resultado = 0


    while numero2 != 0:
    ....resultado = resultado + numero1
    ....numero2 = numero2 - 1
    print 'O resultado de %(numero1)d X %(numero2)d e: %(resultado)d' %vars()
    Atualizado 26-06-2010 em 01:12 por alanteixeira
  6. Avatar de Magnun
    Muito bom novamente alanteixeira! Mas encontrei uma pequena falha no seu código. Como vc está decrementando o numero2 no final (no print) ele está com o valor zero. Dá uma olhada:

    Código PHP:
    >>> def multiplica():
    ...  
    numero1=int(raw_input('Entre com o valor 1: '))
    ...  
    numero2=int(raw_input('Entre com o valor 2: '))
    ...  
    resultado 0
    ...  while numero2 != 0:
    ...   
    resultado resultado numero1
    ...   numero2 numero2 1
    ...  print 'O resultado de %(numero1)d X %(numero2)d e: %(resultado)d' %vars()
    ... 
    >>> 
    >>> 
    >>> 
    multiplica()
    Entre com o valor 12
    Entre com o valor 2
    5
    O resultado de 2 X 0 e
    10
    >>> multiplica()
    Entre com o valor 13
    Entre com o valor 2
    6
    O resultado de 3 X 0 e
    18
    >>> 

    Mas mesmo assim a solução está ótima. Você já programava em outras linguagens?

    Até mais...
  7. Avatar de nennogabriel
    O meu ficou assim:
    [CODE]
    print 'multiplicação de inteiros'
    n1 = int(raw_input('Digite o Multiplicador: '))
    n2 = int(raw_input('Digite o Multiplicando: '))
    sinal = -1 if (n1 < 0 and n2 > 0) or (n2 < 0 and n1 > 0) else 1
    if n2 < 0:
    n2 = n2 * -1
    i = 0
    result = 0
    while i < n2 :
    result += n1
    i += 1 if n2 > 0 else -1
    result = result * sinal
    print ' o resultado final é', result
    [/CODE]
    mas acabei usando uma multiplicação...

    [CODE]
    print 'informe os números que deseja'
    lista = []
    i = int(raw_input('Digite o 1º número: '))
    while i <> 0:
    lista.append(i)
    cont = len(lista) + 1
    if cont % 3 == 0:
    print 'Digite 0 (zero) para terminar'
    i = int(raw_input('Digite o %dº número: ' % cont))
    cont = len(lista)
    print '\nVocê digitou %d números, a excessão do 0 (zero)' % cont
    print 'Que foram:', lista
    [/CODE]

    ^^
  8. Avatar de alanteixeira
    Olá Magnun,

    Comecei a aprender Python em 2004, porém estou parado a um bom tempo, estou voltando aos poucos.
    Aproveito e posto a questão 2 que fiz em no mesmo dia da questão 1 e acabei esquecendo, rsrs;-)


    #!/usr/bin/env python

    # Conta a quantidade de numeros recebidos ate 0

    condicao = True
    cont = 0
    while condicao:
    ....entrada=int(raw_input("Entre com os numeros ou 0: "))
    ....if entrada == 0:
    ........condicao = False
    ....else:
    ........cont+=1
    print 'A quantidade de numeros informados e %(cont)d' %vars(
    Atualizado 18-07-2010 em 20:56 por alanteixeira
  9. Avatar de Magnun
    @nennogabriel,
    Ótima solução cara! De ambos os exercícios! Eu esqueci de explicitar que a multiplicação era somente entre número positivos maiores que zero. Mas sua resolução cobriu todas as possibilidades, isso é um atributo que um desenvolvedor deve ter: pensar em todas as possibilidades pois é nas exceções que ocorrem os erros.
    Vou te perguntar o mesmo que perguntei ao alanteixeira, você já programava antes? Já programou em Python? Está trabalhando em algum projeto opensource? Tem interesse de criar/participar de algum projeto opensource? Estou recrutando desenvolvedores interessados em criar projetos opensource. Se tiver interesse entre em contato!

    @alanteixeira,
    Boa solução, só faltou um parêntese fechando a função vars. Fora isso ta ok. Como vc viu (resposta ao comentário do nennogabriel), estou tentando recrutar alguns desenvolvedores para criar projetos opensource. Se tiver interesse também, entre em contato!
  10. Avatar de nennogabriel
    [QUOTE=Magnun;bt7951]@nennogabriel,
    ...
    você já programava antes? Já programou em Python? Está trabalhando em algum projeto opensource? Tem interesse de criar/participar de algum projeto opensource? Estou recrutando desenvolvedores interessados em criar projetos opensource. Se tiver interesse entre em contato!
    [/QUOTE]

    Eu aprendi programação no segundo grau... numa escola de baixa categoaria infelsmente... mas até tive alguns bons professores... o negócio é que na época a linguagem didáticas era pascal e a de desenvolvimento com banco de dados era clipper... então so tenho a aproveitar mesmo meus exercićios de lógica de programação... comecei a estudar python para usar junto com autoit para automatizar uns processos... mas como uso muito mais linux, estou me esforçando e procurando bibliotecas que subistituiriam o autoit.... mas já vi que em linux nem os programas sao dependentes do mouse. Estes scripts que estou tentando terminar agora, são bem pessoais, não faz nem sentido compartilhar.. talves as bibliotecas que estou precisando criar... mas acho que crio pq ainda conheco pouco das bibliotecas de python...

    Se tiver um projeto opensource que eu possa participar, mesmo que seja apenas para aprender, quero sim... Eu comecei a ler sobre o SDK da google pra desenvolvimento de software em python pra html5... e ai sim pensei em começar um programa útil que poderiamos fazer opensource... a idéia é um tanto simples.. e já existem algumas soluções ótimas opensource, mas acho todas muito complexas pro que quero fazer...
    o projeto seria um programa para gerenciar um servidor de uma rede... mas que fosse acessivel pelo browser... tá.. pra que se temos o webmin e gosa.... é que eles sao pra grandes redes.. uma escola com 100 computares não precisa de um gosa se é possivel deixar todos os pcs na mesma faixa 10.0.0.x por exemplo... e tbm algumas solucoes sao dispersas e ainda precisam de reparos como o gerenciador de QoS Webhtb ... a ideia então seria criar uma interfaco web que facilite o gerenciamente e o acesso remoto do servidor... e ferramentas que simplifique o uso dos recursos do proprio linux... como um firewall e QoS pelo iptables mesmo, mas sem abrir mao de bons recusos como proxy Squid...

    acho que falei d+ já... bom... eu devo começar esse projeto daqui a um mês ou dois... so preciso terminar o meu particular e aprender a usar o SDK do google e mais sobre a biblioteca sys... (é... meio que iria misturar shell e python)
  11. Avatar de Magnun
    Interessante seu projeto, eu fiz algo parecido no meu projeto de graduação. Mas como não sou muito fâ de Web, fiz uma "interface cliente". A interface rodava em Windows e acessava o linux remotamente. Auxiliava a configuração do servidor de hora, criação e deleção de usuários, configuração das interfaces eths, roteamento e do iptables. Integrei ele com o quagga e coloquei também roteamento dinâmico com o RIPv1 e RIPv2. A autenticação remota utilizava o módulo PAM do Linux. Pensei em re-escreve-la para Windows e Linux usando Python e GTK (na época fiz tudo em C), mas acabou que não comecei.

    Basicamente é a sua idéia só que a interface não era Web. Se você começar a mexer com isso de verdade eu posso te ajudar a fazer a "camada de baixo" do programa: que fala com a interface Web e realiza as configurações solicitadas.

    Eu tenho alguns projetos que estão disponíveis na internet, se tiver algum interesse em participar dê uma olhada aqui e aqui.
    Até mais...
  12. Avatar de cleoson
    Olá Magnun,

    Muito interessante sua iniciativa de colocar esse curso de python. Parabéns!
    Estou fazendo as lições, e envio abaixo a minha solução para a primeira questão:

    ===================
    #!/usr/bin/env python
    # -*- coding: utf-8 -*-

    print 'Multiplicação através da soma\n'
    n1 = input('Digite o primeiro valor: ')
    n2 = input('Digite o segundo valor: ')
    result = 0
    mostra = ' '

    num1 = int(n1)
    num2 = int(n2)

    while num1 != 0:
    result = result + num2
    if num1 != 1:
    mostra = mostra + str(n2) + ' + '
    else:
    mostra = mostra + str(n2)
    num1 = num1 - 1

    print 'Soma:' + str(mostra) + '. O resultado é: '+str(result) + '\n'
    ===================
  13. Avatar de Magnun
    Olá cleoson,

    Mandou muito bem nesse exemplo cara!! Bem vindo ao curso!

    Até a próxima...
  14. Avatar de cleoson
    Olá Magnun,

    Obrigado! E segue a minha proposta de solução para o segundo desafio:

    ====================
    #!/usr/bin/env python
    # -*- coding: utf-8 -*-

    try:
    contador = 0
    print 'Este programa "conta" quanto números você digita. Para sair, digite 0 (zero).'
    num = int(input('Digite um número: '))

    while num != 0:
    contador = contador + 1
    num = int(input('Digite mais um número: '))

    print 'Você digitou %(contador)s número(s).'%locals()

    except:
    print 'Você digitou algo diferente de um número!!\nAté agora vocâ havia digitado %(contador)s número(s).'%locals()
    ====================

    Um abraço!
  15. Avatar de Magnun
    Mandou bem de novo cleoson. Dá pra ver que você já tem um certo conhecimento de programação em geral (pela estrutura do programa) e em Python (pelo try... except....). Por enquanto o curso ainda está no conteúdo básico, mas em breve veremos alguns assuntos mais interessantes.

    Até mais...
  16. Avatar de silvanofideles
    Magnun, uma pergunta básica, porque seu código acima não funciona usando a console interativa do linux ??? usando editor de texto funciona.
    obs: uso ubuntu 9.04:
    codigo:
    contador = 3
    while contador != 0:
    print "%i..."%(contador)
    contador = contador - 1
    print 'Boom!!!'
    Atualizado 16-11-2010 em 07:06 por silvanofideles
  17. Avatar de Magnun
    Olá silvanofideles,

    Qual código vc se refere? Teóricamente todos so códigos deveriam funcionar tanto na console interativa quanto sendo executado em um arquivo. Verifique o erro que o Python está acusando. Possivelmente está com uma identação incorreta ao colar no terminal.

    Até mais...
  18. Avatar de silvanofideles
    é Magnum, já tentei por varias vezes mas num tem jeito veja:
    [PHP]>>> contador = 3
    >>> while contador != 0:
    ... print "%i..." %(contador)
    ... contador = contador -1
    ... print "boom!!!"
    File "<stdin>", line 4
    print "boom!!!"
    ^
    SyntaxError: invalid syntax
    [/PHP]

    E aproveito para deixar o exercicio 1 e dizer que o meu sem querer ficou parecido com o do colega alanteixeira, mas nada como uma ajudinha no comando print para o não aparecer a variavel zerada :) .
    [PHP]nr1=int(raw_input('Entre com o nr a ser mutiplicado: '))
    nr2=int(raw_input('Entre com o mutiplicador: '))
    multiplicador = 0
    print "A mutiplicação entre os números",nr1,"e",nr2,
    while nr2 != 0:
    nr2 = nr2 -1
    multiplicador += nr1
    print "=",multiplicador[/PHP]
  19. Avatar de silvanofideles
    e o exercício 2 utilizei a lista[]. Me diz ae é valido ???

    [PHP]valor = "n"
    x = []
    while valor != 0:
    valor = int(raw_input('digite o número que quiser e o "0" para encerrar : '))
    if valor != 0:
    x.append(valor)
    print "A quantidade de numeros inteiros digitados é: ", len(x)[/PHP]

    um abraço...
  20. Avatar de Magnun
    Olá silviofideles,

    tente colocar uma linha em branco antes do print que está dando erro:
    Código :
    >>> contador = 3
    >>> while contador != 0:
    ...     print "%i..." %(contador)
    ...     contador = contador -1
    ... 
    3...
    2...
    1...
    >>> print "boom!!!"
    boom!!!
    >>>
    Por algum motivo a shell do python não gostou do print no mesmo bloco que o while.

    As resoluções são válidas!
    Até mais...
  21. Avatar de icaromacedo
    Olá Magnum,
    Obrigado por compartilhar o seu conhecimento! Sei que já faz algum tempo que começou este seu tutorial sobre python . Um grande amigo meu chamado Shander me indicou o seu tutorial ele sempre debatendo nos foruns sobre python.

    Estou extremamente feliz com a linguagem e mais ainda com um professor de alta qualidade.

    Obg mais uma vez e segue o meu primeiro execercio.

    #-*- coding: utf-8 -*-


    try:
    numero1 = int(raw_input('Digite o primeiro numero: '))
    numero2 = int(raw_input('Digite o segundo numero: '))
    soma = 0
    contador = numero1

    while contador != 0:
    soma += numero2
    contador -= 1

    print 'A mutiplicação de %s * %s = %s' % (numero1, numero2, soma)


    Segundo exercicio:
    try:
    numero = int(raw_input('digite um numero: '))
    contador = 1

    while numero:
    print numero
    numero = int(raw_input('Novamente: '))
    contador += 1


    print 'Você digitou %s vezes e finalizou o comando com a tecla 0' % contador


    except:
    print 'Erro: campo vazio, por favor digite um numero...'
  22. Avatar de Magnun
    Olá Icaro! Seja bem vindo. Bem, o curso de Python anda meio parado, mas como vc ainda ta na aula de while tem bastante coisa pra ler. Fico feliz de saber que meu material está sendo indicado.

    Obrigado pelos elogios mas não sou tão bom assim . Se estiver interessado em desenvolver algum projeto e etc saiba que estou sempre a disposição para ajudar (contanto que seja openSource). Ou se quiser ajudar em alguns projetos meus projetos é só entrar em contato.

    Até mais..
  23. Avatar de icaromacedo
    Obg Magnum!! Quem sabe assim que eu terminar os seus tutoriais e ler mais alguns livros e entender mais de OO, acho que poderei ajudar em algo por enquanto sou iniciante sem chance, huahuahua. Quanto a projetos espero sim fazer alguns opensource. Abraços. Nem comentou sobre o meu codigo se é isso mesmo. kkkkkkkkkkkkkk
  24. Avatar de Magnun
    Opa, ícaro! Foi mal, realmente esqueci de comentar. Infelizmente seu código não apareceu endentado, mas vou considerar que toda a endentação está correta.

    No seu primeiro exercício o try está incompleto. Todo Try tem que ter um except. Mas se adicionar um except simples ele funciona perfeitamente.

    O Segundo exercício também está correto. Parabéns!

    Quando estiver pronto para um projeto é só entrar em contato! Até mais...
  25. Avatar de theusseveen
    Olá, estou um pouco atrasdo =]
    mas como comecei o curso do começo agora, resolvi tentar o exercicio, aqui funcionou assim

    contador = 0
    contar = 0
    while contador < 10:
    contador = contador + 1
    num = int(raw_input("Digitar número ="))
    if (num == 0):
    print "numero de numeros digitados até agora",contador
  26. Avatar de fabraga
    Magnun, eu não encontrei onde você postou os resultados desses seus exercícios. O que eu encontrei, na sua aula seguinte, foi a correção de outros exercícios que nem vi onde vc os colocou...
    Atualizado 07-06-2011 em 15:39 por fabraga
  27. Avatar de fabraga
    Quanto ao problema do silvanofideles, acho que é porque ele está usando uma versão mais recente to Python, que não reconhece o "print" sem os parênteses.
    Atualizado 07-06-2011 em 15:40 por fabraga
  28. Avatar de Follks
    Muito bom Magnun, ótimos artigos.


    [CODE]n = 0
    while n == 0:
    try:
    n1 = int(raw_input("Digite o primeiro valor:"))
    n2 = int(raw_input("Digite o segundo valor:"))
    contn2 = n2
    cont = n1
    n = 1
    except:
    print "Ops... algo errado..."


    if n1 > 0:
    while cont > 1:
    n2 = n2 + contn2
    cont = cont - 1
    print "------------------ resultado:",n2
    else:
    print "----- Digite um valor maior que 0 ------"
    [/CODE]

+ Enviar Comentário



Visite: BR-Linux ·  VivaOLinux ·  Dicas-L