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

Atualizado 01-09-2010 em 09:13 por Magnun

Categorias
Python , Artigos , Artigos , Cursos , Curso de Python

Comentários

Página 1 de 3 123 ÚltimoÚltimo
  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 02: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 21: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)
Página 1 de 3 123 ÚltimoÚltimo

+ Enviar Comentário