Enviar um café pro programador

WHILE em Python - Como usar

Neste tutorial de nosso curso de Python, vamos estudar uma das coisas mais importantes e usada em programação: o laço while (ou looping while).



Laço WHILE

Sem mais delongas, vamos aprender a usar essa arma de destruição em massa, que é o laço while.

Seu formato é

while <teste>:
   codigo1
   codigo2
   codigo3
   ... 

codigo4

A instrução while funciona assim:
Assim que começa o while, ele faz um teste (como se fosse um IF teste condicional) e testa a instrução <teste>.

Se este teste resultar em verdadeiro (TRUE), tudo que está dentro do laço while (codigo1, codigo2, codigo3..., é executado).

Terminou de executar tudo?
Testa de novo. Deu true? Executa tudo de novo...

E fica assim, testando, executando, testando, executando...
Como se fosse um looping. E, de fato, é um looping.

E só vai parar quando o teste for FALSE.
Aí acaba o while e o 'codigo4', de fora, é executado e o script segue seu percurso naturalmente.

Você vai entender melhor usando alguns exemplos.




Exemplo 1 de uso do laço WHILE

"Crie um programa que imprima na tela os números 1 até o 10, usando o laço while".

Primeiro de tudo, vamos declarar a variável 'numero' e fazer ela iniciar com valor 1.

O que queremos é imprimir ela, depois fazer ela virar o número 2 e imprimir de novo. Fazer ela receber o número 3, e imprimir de novo...até virar o número 10, imprimir e acabar aí.

O nosso teste é: 'numero é menor ou igual a 10? Ok, então imprime'.
E o looping é simplesmente imprimir nossa variável.

Nosso código Python fica assim:

numero=1

while numero<=10:
    print(numero)
    numero += 1

Tem uma novidade aí: numero += 1
Que é o mesmo que: numero = numero + 1

Ou seja, estamos incrementando a variável 'numero' em uma unidade.
Vamos ver passo a passo como funciona esse tal de while.

Primeiro definimos nossa variável com valor 1.
Depois testamos se ela é menor que 10. Como é, vai executar o laço while.
Primeiro, imprime o valor da variável, que é 1.
Depois adiciona 1 a essa variável.

Agora ela vale 2. O teste é realizado, como 2 é menor que 10.
Executa de novo...imprime 2, incrementa e agora a variável é 3.

E assim vai indo, indo, repetindo, repetindo...vai chegar uma hora que 'numero=10'

Como 'numero<=10' é verdadeiro, o laço while é executado.
O número 10 é impresso na tela, e ele vira 11.

Agora, o teste vai dar falso e o while vai parar de executar.
E prontinho, você imprimiu do número 1 até o 10 usando o laço while!

Simples, não?
Vamos aprofundar mais e deixa esse código mais interessante.



Exemplo 2 de uso do laço WHILE

"Faça um programa que peça um número maior que 1 ao usuário. Em seguida, imprima todos os números, de 1 até o número que o usuário informou".

No exemplo anterior, a gente tinha um 'limite', que era o valor 10.
Quando chegava em 10...créu. Acabava o laço while.

Agora esse valor vai ser informado pelo usuário. Vamos armazenar essa informação na variável 'max' (de máximo).

Nosso código fica:

numero=1
max = int(input("Digite um inteiro maior que 1: ") )

while numero <= max:
    print(numero)
    numero += 1


Experimente digita 100, 1000, um milhão, um trilhão...
Veja que interessante: quantas vezes esse while vai ser executado?

Ué, depende do usuário!
Pode repetir uma vez, 10, mil, 1 trilhão...há uma interação entre o script e o usuário, vai fazer coisas diferentes de acordo com o desejo do usuário.

Exemplo 3 de uso do laço WHILE

"Escreva um programa que repita pra sempre, na tela, a mensagem 'Curso Python Progressivo'".

Quando que um laço vai se repetir pra sempre, indefinidamente?
Ué, quando seu teste for SEMPRE verdadeiro!

while True:
    print("Curso Python Progressivo")


Também poderia colocar '1', '2' ou qualquer outro valor diferente de 0 ou false no teste, que daria sempre verdadeiro e iria sempre repetir.

Exemplo 4 de uso do laço WHILE

"Crie um programa que peça um número ao usuário e imprima todos os números pares de 1 até o número fornecido"

Vamos usar o código do exemplo 2.
Porém, não vamos sair imprimindo tudo. Devemos fazer um teste antes (teste condicional IF) para saber se o número é primo, se for aí sim imprimimos.

Ou seja, vamos ter um IF dentro de um WHILE:

numero=1
max = int(input("Digite um inteiro maior que 1: ") )

print("Numeros pares entre 1 e", max, ":")

while numero <= max:
    if numero%2==0:
        print(numero,  end=" ")
    numero+=1

O end=" " é para mostrar um espaço em branco após imprimir cada número, ao invés de quebra de linha (enter).

Looping while em Python

Exemplo 5 de uso do laço WHILE

"Escreva um programa que pede a senha ao usuário, e só sai do looping quando digitarem corretamente a senha"

Obviamente, a senha é o número mais importante do universo:
senha='2112'

A senha que o usuário vai digitar, vai ficar na variável 'tentativa'.

Se 'senha' e 'tentativa' forem diferentes, o laço while fica repetindo e repetindo e repetindo...sempre pedindo a senha ao usuário.

O laço while só acaba quando as variáveis 'senha' e 'tentativa' forem iguais, ou seja, quando o usuário digitar a senha correta:

senha='2112'
tentativa=input("Digite a senha:")

while (senha != tentativa):
    print("Senha errada! Tente novamente!")
    tentativa=input("Digite a senha:")

print("Senha correta. Entrando no sistema...")

Pelo amor de deus, agora que sabe como funciona, não vai sair por aí usando seus conhecimentos pra invadir o sistema da Nasa, FBI, Polícia Federal ....


Exemplo 6 de uso do laço WHILE

"Programe um script em Python que calcule a média de uma turma, não importa o número de alunos que ela tenha, seu único script serve para todos os casos"

Esse é o problema que descrevemos quando falamos de laços e loopings em Python.

Primeiro, perguntamos quantos alunos tem na turma e armazenamos em "alunos".

Vamos usar uma variável de apoio, chamada 'count', ela vai de 1 até o número de alunos, ok ? Ela que é incrementada no laço while (cresce de um em um).
A soma de todos os alunos, armazenamos na variável 'soma'.

Agora vem o laço while.
O teste é se 'count' é menor que 'alunos'. Se sim, vamos pedir a nota de cada aluno, do primeiro até o aluno de número 'alunos'.

A nota que o usuário digitar, vai ser armazenada na variável 'nota'.
Em seguida, armazenamos na variável 'soma'.

E assim vai indo, de aluno em aluno...no final, temos a soma total das notas de tooodo mundo, e não importa o número de alunos na turma, seja um aluno, 10, 20 ou mil alunos, a variável 'soma' vai ter a soma da nota de todo mundo.

Quando acabar o while basta dividir essa 'soma' pelo número de alunos ('alunos') e prontinho, temos a média da turma, não importando o tamanho da turma:

alunos=int(input("Numeros de alunos na turma: "))

count=1; soma = 0.0
while count <= alunos:
    print("Nota do aluno ", count, ":")
    nota = float( input() )
    soma += nota
    count += 1

print("Media da turma: ", (soma/alunos) )

Foda, essa instrução while, não é?

17 comentários:

  1. Muito bom! Me ajudou bastante, obrigada!

    ResponderExcluir
  2. Bom dia preciso de ajuda.Escreva um programa em Python que pede ao utilizador para introduzir um número inteiro, n, e calcula a soma
    1 + 2 + … + n, se n > 0,
    -1 + -2 + … + n, se n < 0.
    Se n = 0, a soma é zero.

    Use um único ciclo while para calcular a soma.

    Exemplos de interacção:

    Exemplo 1:

    Introduza o limite:
    0
    Soma = 0

    Exemplo 2:

    Introduza o limite:
    3
    Soma = 6

    Exemplo 3:

    Introduza o limite:
    -3
    Soma = -6

    O seu programa deve respeitar escrupulosamente os exemplos apresentados, tanto no que diz respeito à forma de pedir os dados, como à forma de apresentar os resultados. Os valores apresentados nos exemplos são apenas exemplificativos: o seu programa deve aceitar qualquer número inteiro.

    Assuma que os dados introduzidos estão sempre correctos, isto é, que o número introduzido é sempre um inteiro.

    Como se resolve? Please a need help

    ResponderExcluir
    Respostas
    1. O que você já conseguiu desenrolar ?

      Excluir
    2. N= int(input (' introduza o limite: '))

      Soma=0
      If==0:
      Print ('soma = ' ,n)
      Elif = n>0:
      n=n*(n-1)
      Print('soma=',n)
      Else:
      N=n*(n+1)
      Print('soma=',n)

      De momento só isto, e não está a funcionar correctamente, o problema é que tenho de usar o while e não entendo onde e como usar.

      Excluir
    3. Pegue duas variáveis. Uma vai percorrer todos os números, de 1 até n.

      A outra, vai servir como um acumulador...ou seja, para somar cada um dos valores que a variável anterior assumiu.

      Excluir
    4. # Escreva um programa em Python que pede ao utilizador para introduzir um número inteiro, n, e calcula a soma
      ACHO QUE É ISSO AI AMIGO!
      max = int(input('Digite um numero: '))
      numero=1
      anterior=0
      while(numero<=max):
      if(numero>0):
      anterior=numero+anterior
      numero+=1
      else:
      print('Fim')
      print(anterior)

      Excluir
    5. resolvi fazer para me testar, sei que faz muito anos que a pergunta foi feita mas esta ai pra quem quiser ver

      print ('Esse programa faz a soma de todos os números que existem até o limite desejado ')
      l = int(input('Digite um limite '))
      c = 1
      soma = 0

      if l > 0:
      while c <= l:
      soma = soma + c
      c = c + 1

      else:
      c = c - 1
      while c >= l:
      soma = soma + c
      c = c - 1

      print (f'A soma dos números será: {soma}')

      Excluir
  3. Não consigo entender ��‍♀️

    ResponderExcluir
  4. Veja esse tutorial:
    http://www.pythonprogressivo.net/2018/02/Achar-Unidade-Dezena-Centena-de-um-Numero.html

    ResponderExcluir
  5. Eu tentei fazer o seguinte teste de validade enquanto estava usando o while mas não rolou!
    aluno = int(input("Número de alunos na turma: "))
    nota = 0
    count = 1; soma = 0.0
    while count <= aluno:
    print("Nota do aluno ", count, ":")
    if nota < 0 or nota > 10:
    print("Nota Inválida!\nDigite a nota do aluno ", count, ":")
    nota = float(input())
    soma += nota
    count += 1

    print("Média da Turma: ", (soma/aluno))

    Caso a nota for menor que 0 ou maior que 10, o programa deveria pedir a nota novamente mas no ponto em que parou.
    No exemplo, no aluno 3 a nota é inválida (12) e deveria pedir novamente a noa 3, porém foi acrescentando mais 1 no número que estava errado:
    Número de alunos na turma: 10
    Nota do aluno 1 :
    2
    Nota do aluno 2 :
    4
    Nota do aluno 3 :
    12
    Nota do aluno 4 :
    Nota Inválida!
    Digite a nota do aluno 4 :
    12
    Nota do aluno 5 :
    Nota Inválida!
    Digite a nota do aluno 5 :
    12
    Nota do aluno 6 :
    Nota Inválida!
    Digite a nota do aluno 6 :
    12

    ResponderExcluir
    Respostas
    1. Primeiro corrija o print dentro do while, se vc quiser colocar a nota do aluno, não pode ser print, e sim um input para vc colocar a nota do aluno.

      Segundo, para vc conseguir validar a nota se é menor que 0 ou maior que 10 e deseja que volte até digitar um número válido, não pode ser if, deve ser outro while.

      Lembrando que o input da nota do aluno para ele realizar a soma, ele precisa estar dentro da variavel nota. E no segundo while o input é exatamente o mesmo.

      Excluir
  6. while(True):
    print('Aula boa demais!!!')

    ResponderExcluir
  7. alunos = int (input("digite a quantidade de alunos: "))

    count = 1
    soma = 0
    while count <= alunos :

    nota = float (input ("digite a nota do " + str(count) + " aluno: "))
    soma = soma + nota
    count +=1

    notaFinal = (soma / alunos)
    print ("A média da turma é de: " , notaFinal )

    ResponderExcluir
  8. Faltou explicar no exemplo 5 pq a senha teve que ser convertida em string.

    ResponderExcluir
  9. Ola, alguem pode me explicar como controlar um laço while? Tem aquelas coisas chamadas contadores ou acumuladores que eu não entendi. Se alguem puder me explicar agradeço. Estou com dificuldade em entender os laços como while e for.

    ResponderExcluir
  10. Queria uma ajuda de vcs agradeceria muito se for possivel eu ajudaria com pix alguns exercicios.

    Desenvolva um programa que recebe do usuário nome completo e ano de nascimento que seja entre 1922 e 2021. A partir dessas informações, o sistema mostrará o nome do usuário e a idade que completou, ou completará, no ano atual (2022).

    Caso o usuário não digite um número ou apareça um inválido no campo do ano, o sistema informará o erro e continuará perguntando até que um valor correto seja preenchido.

    ResponderExcluir
  11. bom dia, preciso de ajuda para fazer meu programa parar apenas no ultimo numero da sequencia, ainda é só a metade do código, mas acabei empacado nessa parte:
    """C = quantidade de metros que um atleta deseja percorrer
    N = tamanho da pista"""

    linha = input().split()
    C = int(linha[0])
    N = int(linha[1])
    if 1 <= C <= 10 ** 8 and 1 <= N <= 100:
    while True:
    if C > N:
    C -= N
    #print(C) não estou conseguindo printar apenas o ultimo valor de C

    ResponderExcluir