Laços de repetição em Python

Aprenda a fazer um programa Python repetir tarefas. Escreva laços while que sejam executados até uma condição mudar e laços for que percorram strings, listas e sequências de números, e use break, continue e o bloco else de um laço para controlá-los. Aplique os padrões comuns para contar, somar, calcular médias, encontrar o maior valor e buscar, crie laços aninhados para grades e combinações e rastreie laços à mão para detectar erros de uma unidade e laços que nunca terminam.

BásicoAula 3 de 10 do curso Curso de Introdução à programação com Python

O que você vai aprender

  1. Escreva laços while que repitam um bloco de código enquanto uma condição for verdadeira, garanta que cada laço termine e use laços para ler entradas até o usuário terminar.
    • Escreva um laço while que conte e atualize valores
      Leia e escreva as três partes de um laço while: um valor inicial, uma condição testada antes de cada passagem e uma atualização no corpo indentado.
    • Garanta que um laço while termine
      Reconheça laços infinitos, explique por que ocorrem, corrija-os e interrompa um programa preso em um deles.
    • Leia entradas até o usuário terminar
      Use laços while para continuar lendo valores até aparecer um valor de parada e para perguntar novamente até o usuário dar uma resposta aceitável.
  2. Use laços for para visitar cada item de uma string ou lista e cada número de uma sequência range, e decida quando um laço for ou while é mais adequado a uma tarefa.
    • Percorra os itens de uma sequência
      Escreva laços for que visitem cada caractere de uma string ou cada valor de uma lista curta, em ordem, e use corretamente a variável do laço.
    • Gere sequências de números com range
      Use range com um, dois ou três argumentos para repetir um número definido de vezes ou percorrer inteiros igualmente espaçados, incluindo contagens regressivas.
    • Escolha entre um laço for e um laço while
      Decida qual tipo de laço é adequado a uma tarefa e reescreva um laço de contagem de uma forma para a outra.
  3. Altere o fluxo normal de um laço: saia antecipadamente, pule o restante de uma iteração e execute código somente quando um laço terminar sem ser interrompido.
    • Saia de um laço antecipadamente com break
      Use break para encerrar um laço assim que sua tarefa estiver concluída, incluindo o padrão while True para laços de entrada.
    • Passe para a próxima iteração com continue
      Use continue para pular o restante de uma iteração, evite sua armadilha em laços while e distinga continue, break e pass.
    • Execute código quando um laço terminar sem break
      Acrescente um bloco else a um laço for ou while para informar o caso em que nenhum break ocorreu e use uma variável sinalizadora para a mesma tarefa.
  4. Use os padrões comuns de laços para contar e somar valores, calcular médias, encontrar o maior e o menor valor e buscar itens que atendam a uma condição.
    • Conte e acumule valores
      Use contadores e acumuladores para construir uma contagem, um total, um produto, uma média ou um trecho de texto ao longo das iterações de um laço.
    • Encontre o maior e o menor valor
      Acompanhe o melhor valor encontrado até o momento para encontrar um máximo ou mínimo, escolha um valor inicial seguro e registre também onde ele ocorreu.
    • Busque itens que atendam a uma condição
      Verifique os itens um por um para encontrar uma correspondência, conclua “não encontrado” somente após verificar tudo e responda a perguntas como “existe algum...?” e “todos são...?”.
  5. Coloque um laço dentro de outro para trabalhar com linhas e colunas, combinações e formas, preveja quantas vezes o corpo interno será executado e controle ambos os laços.
    • Crie um laço dentro de outro
      Escreva laços aninhados para grades, tabelas, combinações e padrões crescentes, e conte quantas vezes o corpo interno é executado.
    • Controle o fluxo de laços aninhados
      Use condições, break, continue e variáveis sinalizadoras dentro de laços aninhados, sabendo que cada instrução afeta apenas seu próprio laço.
  6. Preveja exatamente o que um laço faz rastreando-o à mão, conte suas iterações e encontre e corrija erros de uma unidade e outros defeitos comuns em laços.
    • Rastreie um laço com uma tabela de rastreamento
      Execute um laço à mão em uma tabela de rastreamento para prever sua saída, seus valores finais e seu número de iterações, e use instruções print para rastreá-lo automaticamente.
    • Encontre e corrija erros de uma unidade
      Identifique laços executados uma vez a mais ou a menos, use regras exatas para contar iterações e corrija os limites.

Guia de estudo de Laços de repetição em Python

6 capítulos

1

Repita ações com laços while

Um programa pode continuar pedindo entradas ou repetir um cálculo até atingir uma meta. Um laço while torna isso possível ao verificar uma condição antes de cada passagem pelo corpo. Você relacionará o valor inicial, o teste e a atualização e usará essa estrutura para entrada e validação. Acompanhar os valores enquanto mudam também revela por que um laço termina, pula inteiramente seu corpo ou continua sem alcançar uma saída.

1.1 Como um laço while repete tarefas

Um laço de repetição repete um bloco de código. Cada passagem pelo bloco é uma iteração. Um laço while verifica uma condição antes de cada passagem e executa seu corpo enquanto essa condição for verdadeira. Isso é adequado a uma tarefa como “continue somando até o total chegar a 100”.

Início, teste e atualização

Um laço de contagem precisa de um valor inicial, uma condição e uma atualização. O cabeçalho termina com dois-pontos. Indente o corpo com quatro espaços:

n = 3
while n > 0:
    print(n)
    n = n - 1
print("Liftoff!")

A saída é:

3
2
1
Liftoff!

Na primeira verificação, n > 0 é verdadeiro porque n é 3. O Python exibe 3, subtrai 1 e retorna ao cabeçalho. Ele repete com 2 e depois com 1. A atualização torna n igual a 0, então a próxima verificação é falsa. O Python pula o corpo e executa o print final.

A indentação determina o que se repete. As duas linhas indentadas pertencem ao corpo. A última linha está alinhada com while, então é executada uma vez após o laço. Um if verifica sua condição uma vez; while volta a verificá-la após cada execução completa do corpo.

A verificação ocorre no início

Alterar uma variável não interrompe o restante do corpo atual:

n = 1
while n > 0:
    n -= 1
    print("Still in this pass")
print(n)

Isso exibe Still in this pass e depois 0, em linhas separadas. A atualização torna a condição falsa, mas o Python só a verifica quando retorna ao cabeçalho. Começar com n = 0 faria o corpo inteiro ser pulado: um laço while pode ser executado nenhuma vez.

Atualizações abreviadas e valores que mudam

n -= 1 significa n = n - 1. Da mesma forma, count += 1 soma 1, balance *= 1.07 multiplica por 1,07 e n //= 10 substitui n pelo quociente inteiro de sua divisão por 10. O Python não tem operador de incremento: count++ é um erro de sintaxe. Escrever ++count aplica o sinal de mais unário duas vezes e deixa o inteiro inalterado.

Aqui um laço remove um dígito a cada passagem:

n = 472
total = 0
while n > 0:
    total += n % 10
    n //= 10
print(total)

O resto n % 10 é o último dígito. Primeiro, 2 é somado e n passa a ser 47. Em seguida, 7 é somado e n passa a ser 4. Por fim, 4 é somado e n passa a ser 0. A saída é 13. A atualização prepara a próxima passagem e aproxima o laço da saída.

Um laço com meta não precisa ter uma contagem conhecida antecipadamente. Começando com um saldo de 1.000, multiplicá-lo por 1,07 e aumentar um contador de anos até que o saldo chegue a 2.000 leva 11 passagens. Após 10 passagens, o saldo é de aproximadamente 1.967,15; após 11, é de aproximadamente 2.104,85.

As condições podem combinar comparações com and, or e not. O valor lógico em contexto também funciona: para um inteiro, while n: repete enquanto n for diferente de zero. Use uma condição cujo significado seja fácil de acompanhar. Mantenha a indentação consistente com espaços; níveis desalinhados podem lançar IndentationError, e misturar tabulações e espaços pode lançar TabError.

Principais conclusões

  • Um laço while verifica sua condição antes de cada iteração, então seu corpo pode ser executado nenhuma vez.
  • Inicialize antes do laço e atualize dentro dele para se aproximar da saída.
  • As linhas após uma atualização ainda são executadas antes de a condição ser verificada novamente.
  • A indentação determina quais instruções se repetem.
  • Use += e -= para atualizações; o Python não tem o operador de incremento ++.

1.2 Por que um laço continua em execução

Um laço infinito continua se repetindo sem alcançar uma saída. Você pode ver a mesma saída rolando ou um programa que parece não fazer nada. Para encontrar a causa, acompanhe os valores usados na condição e procure uma saída que possa ser alcançada.

Encontre a atualização

Este laço continua exibindo 3:

n = 3
while n > 0:
    print(n)

O teste permanece verdadeiro porque nada altera n. Adicione n -= 1 dentro do corpo para que os valores 3, 2 e 1 sejam exibidos antes de o laço parar. Colocar essa atualização após o laço não ajuda: o programa não consegue alcançá-la enquanto o laço ainda está em execução.

A direção também importa. Com while n > 0:, uma atualização de n += 1 faz um valor positivo crescer. Os inteiros do Python não voltam ao início em um máximo fixo para fornecer uma saída acidental. Descreva a mudança esperada, como “uma tentativa a menos restante”, e verifique se o código faz essa mudança em cada caminho pelo corpo.

Uma meta pode ser ultrapassada

Uma atualização pode alterar o valor em cada passagem e ainda assim nunca atingir uma meta de igualdade:

n = 1
while n != 10:
    print(n)
    n += 2

Os valores são 1, 3, 5, 7, 9, 11 e assim por diante. Eles são sempre ímpares, então nenhum é igual a 10. Para a tarefa “exiba valores ímpares abaixo de 10”, use while n < 10:. Quando n passa a ser 11, essa condição é falsa. A escolha da comparação deve corresponder ao término da tarefa em um valor ou quando um limite é ultrapassado.

Passos decimais e igualdade exata

Muitas frações decimais são armazenadas aproximadamente como números de ponto flutuante. Somar 0.1 a 0.0 dez vezes resulta em 0.9999999999999999. Portanto, um laço que espera igualdade exata com 1.0 não alcança a parada pretendida.

Quando a tarefa é visitar um conjunto fixo de décimos, conte com inteiros e calcule cada decimal:

for i in range(11):
    x = i / 10
    print(x)

Isso visita 11 valores de 0.0 até 1.0. A contagem de inteiros controla as repetições; o decimal armazenado não decide se o laço deve parar.

Verifique cada caminho pelo corpo

Antes de executar um laço while, localize seus valores iniciais, sua condição e cada instrução que altera esses valores. Verifique se a alteração pode tornar a condição falsa. Se um if pular uma atualização, rastreie esse caminho também. Uma linha temporária como print("n =", n) dentro do corpo pode mostrar um valor que está parado ou se afastando do limite.

Para interromper um programa em execução, pressione Ctrl+C em um terminal ou use o botão de parar ou interromper do editor. Em um terminal, o Python normalmente informa KeyboardInterrupt com um rastreamento de exceção.

Repetição intencional

while True: mantém intencionalmente verdadeira a condição do cabeçalho. Seu corpo usa break para sair do laço quando um evento ocorre, como o usuário inserir “quit”. A saída deve poder ser alcançada. Um laço de entrada pode continuar esperando porque o usuário não pediu para sair; um defeito é um laço cuja lógica torna a saída pretendida impossível.

Principais conclusões

  • Verifique se cada caminho que se repete pode alcançar uma saída.
  • Uma atualização ausente, mal posicionada ou na direção errada pode manter um laço while em execução.
  • Uma meta de igualdade pode ser ultrapassada pelo tamanho do passo.
  • Use um contador inteiro para um número fixo de passos decimais.
  • Ctrl+C ou a interrupção do editor para um programa em execução.
  • Um laço while True intencional termina por meio de um break que pode ser alcançado.

1.3 Laços de entrada e respostas aceitáveis

Um laço de entrada pode coletar uma quantidade desconhecida de dados ou continuar perguntando até que uma resposta seja aceitável. Nos dois casos, a nova entrada deve afetar a próxima decisão de repetir.

Pare em um valor sentinela

Um valor sentinela é uma entrada especial que significa “não há mais dados”. Escolha um valor que não possa ser um item de dados real. Para contagens positivas, 0 pode funcionar; se 0 for uma medição válida, escolha outro sinal de parada.

A leitura inicial obtém o primeiro valor antes de a condição ser verificada:

total = 0
number = int(input("Number (0 to stop): "))
while number != 0:
    total += number
    number = int(input("Number (0 to stop): "))
print("Total:", total)

Para as entradas 4, 7 e 0, o corpo primeiro soma 4 e depois soma 7. Ler 0 torna a próxima condição falsa. O programa exibe Total: 11; ele nunca processa o valor sentinela. Se a primeira entrada for 0, o corpo é executado nenhuma vez e o total permanece 0.

A leitura final dentro do corpo é essencial. Sem ela, o mesmo primeiro valor é processado indefinidamente. O teste também deve ocorrer antes do processamento de um valor recém-lido: caso contrário, um valor sentinela pode ser contado como dado.

Mantenha os tipos compatíveis

input() retorna texto. A string "0" não é igual ao inteiro 0. Converta a entrada numérica com int() antes de compará-la com um valor sentinela numérico, ou mantenha a entrada como texto e compare com uma string como "done". Uma conversão numérica espera uma string numérica válida; uma verificação de intervalo testa o número resultante.

Para uma média, mantenha um contador junto ao total. Com o valor sentinela -1 e as entradas 8, 6, 10 e -1, o total é 24 e a contagem é 3. Divida após o laço para obter 8.0. Se a primeira entrada for -1, a contagem permanece 0, então use if count > 0: antes da divisão. Isso trata um conjunto de dados vazio sem ZeroDivisionError.

Pergunte novamente enquanto uma resposta for inválida

Um laço de validação descreve as respostas inaceitáveis em sua condição:

age = int(input("Age (0-120): "))
while age < 0 or age > 120:
    print("Please enter an age from 0 to 120.")
    age = int(input("Age (0-120): "))
print("Thank you.")

Com 150, -2 e 34, o aviso aparece duas vezes. O valor 34 torna ambas as comparações falsas, então o laço termina. Os extremos 0 e 120 também são aceitos.

A palavra or importa: uma idade é inválida se estiver abaixo do mínimo ou acima do máximo. Escrever age < 0 and age > 120 não rejeitaria nada, pois um número não pode ser as duas coisas.

Para uma resposta de sim ou não, o teste de invalidez é answer != "y" and answer != "n". Uma resposta deve ser diferente das duas strings aceitas para ser rejeitada. Com or, até "y" repetiria o laço porque é diferente de "n". Rastreie uma resposta aceitável e uma inaceitável para verificar uma condição como essa.

As mesmas tarefas podem usar while True com uma leitura no corpo, seguida de um teste de saída e break. Isso coloca a decisão imediatamente após a entrada e evita escrever a leitura duas vezes.

Principais conclusões

  • Um valor sentinela marca o fim dos dados e deve ser testado antes do processamento.
  • Um laço com leitura inicial lê antes do laço e novamente no fim do corpo.
  • Compare tipos compatíveis: input retorna uma string.
  • A validação se repete enquanto a resposta atual for inválida.
  • Verifique se a contagem é positiva antes de calcular uma média.
2

Percorra sequências com laços for e range

Quando uma tarefa visita cada caractere, cada valor de uma lista ou uma sequência conhecida de números, um laço for cuida da passagem entre itens. Você pode se concentrar na ação para cada item. Uma sequência range fornece passos inteiros sem escrever uma lista longa. Seu início, limite de parada excluído e passo explicam tanto os valores visitados quanto os casos vazios. Comparar essa estrutura com laços while ajudará você a escolher uma maneira clara de expressar uma tarefa.

2.1 Visitando caracteres e valores de listas

Um laço for visita os itens de uma sequência em ordem. A cada passagem, o Python atribui o próximo item à variável do laço e executa o corpo indentado. Um laço sobre uma sequência costuma ser chamado de laço de repetição definida porque os itens fornecem um conjunto definido de trabalho.

Um item de cada vez

Uma string é uma sequência de caracteres:

for ch in "cat":
    print(ch)

Isso exibe c, a e t em linhas separadas. Espaços e sinais de pontuação também contam como caracteres. A string "hi there" tem oito caracteres, incluindo seu espaço, então visitar cada caractere leva oito passagens.

Uma lista contém uma sequência de valores. Sua forma literal usa colchetes e vírgulas:

scores = [3, 41, 12]
for score in scores:
    print(score * 2)

A saída é 6, 82 e 24, cada um em sua própria linha. score é um número de cada vez, não a lista inteira nem sua posição. Não é necessária uma atualização manual de contador para passar de 3 para 41 e depois para 12.

Use um nome que descreva um item: name em names ou score em scores. Se o corpo nunca precisar do valor atual, _ é um nome comum para essa variável de laço não utilizada.

A atribuição não substitui um item

A variável do laço é uma variável comum. Atribuir um número diferente a ela não substitui o número na lista:

numbers = [1, 2, 3]
for n in numbers:
    n = n * 10
    print(n)
print(numbers)

O corpo exibe 10, 20 e 30. A cada nova iteração, o próximo item original da lista é atribuído a n. A última linha de saída é [1, 2, 3]: a lista em si não mudou. Após o laço, n mantém 30, o último valor atribuído a ele no corpo.

Uma sequência vazia não dá trabalho ao corpo. Com for ch in "":, há zero passagens, e o laço não faz nenhuma atribuição a ch. Não conte com a criação da variável pelo laço quando pode não haver itens.

Pertencimento dentro de um laço

Em um cabeçalho for, in introduz a sequência a visitar. Em uma condição, ele testa o pertencimento e produz True ou False. Esses usos podem funcionar juntos:

vowels = 0
for ch in "education":
    if ch in "aeiou":
        vowels += 1
print(vowels)

Cada caractere é visitado, mas o contador muda apenas para e, u, a, i e o. A saída é 5. O if está indentado dentro do laço, e a atualização do contador está indentada dentro do if.

Esse laço também mostra por que uma variável do laço e um contador têm funções diferentes. ch contém o caractere atual; vowels registra quantos caracteres atenderam à condição até o momento. O contador começa antes do laço para manter seu resultado entre passagens.

Um inteiro isolado não pode fornecer itens: for i in 5: lança TypeError. Para repetir uma ação cinco vezes, escreva for _ in range(5):. A sequência range fornece os passos, mesmo quando o corpo não usa seus valores.

Principais conclusões

  • Um laço for atribui cada item da sequência à sua variável em ordem.
  • Espaços e sinais de pontuação são caracteres em uma string.
  • Reatribuir uma variável numérica do laço deixa a lista original inalterada.
  • Uma sequência vazia causa zero execuções do corpo e nenhuma atribuição à variável do laço.
  • Em uma condição, in testa o pertencimento; em um cabeçalho for, introduz os itens a visitar.
  • Use range(5), não o inteiro 5, para fornecer cinco repetições.

2.2 Escolhendo o início, o limite de parada e o passo de uma sequência range

Uma sequência range descreve inteiros igualmente espaçados. Ela é útil para repetir uma tarefa um número definido de vezes, contar de forma crescente ou decrescente e selecionar passos regulares. Seu limite de parada é sempre excluído.

Três formas
FormaSignificadoValores
range(5)Começa em 0; passo de 10, 1, 2, 3, 4
range(2, 6)Começa em 2; passo de 12, 3, 4, 5
range(1, 10, 2)Começa em 1; passo de 21, 3, 5, 7, 9

Com um argumento, esse argumento é o limite de parada. Com dois, eles são o início e o limite de parada. Com três, o último argumento é o passo somado após cada valor. range(0, 10, 3) visita 0, 3, 6 e 9; o próximo passo chegaria a 12, então ele não é fornecido.

O limite de parada continua excluído mesmo quando um passo poderia chegar exatamente a ele. range(0, 10, 5) fornece apenas 0 e 5. Para o passo positivo padrão de 1 e um limite de parada acima do início, o número de valores fornecidos é o limite de parada menos o início.

Conte regressivamente com um passo negativo

range(5, 0, -1) fornece 5, 4, 3, 2 e 1. Para incluir 0, coloque o limite de parada abaixo dele: range(5, -1, -1) fornece seis valores, terminando em 0.

A direção deve corresponder aos limites. range(5, 0) está vazia porque seu passo padrão é positivo. range(1, 5, -1) também está vazia porque começa abaixo do limite de parada, mas avança para baixo. Sequências range vazias são válidas e causam zero iterações; um passo zero, por outro lado, lança ValueError.

Coloque o último valor necessário dentro do limite

Para somar os inteiros pares de 2 a 20:

total = 0
for n in range(2, 21, 2):
    total += n
print(total)

O limite de parada 21 permite que 20 seja visitado. Os dez valores somam 110, então o programa exibe 110. Usar o limite de parada 20 deixaria 20 de fora e resultaria em 90.

Para uma tabuada, deixe a sequência range fornecer os fatores:

for i in range(1, 11):
    print(7, "x", i, "=", 7 * i)

A primeira linha de saída é 7 x 1 = 7, e a décima é 7 x 10 = 70. Se o próprio número não for usado, for _ in range(3): pode repetir uma mensagem três vezes.

Inspecione uma sequência range e verifique seus argumentos

list(range(2, 6)) produz [2, 3, 4, 5], o que é útil ao verificar os limites. len(range(0, 10, 3)) é 4. Uma sequência range armazena os limites e o passo que a definem, em vez de criar uma lista contendo cada inteiro.

Os argumentos são inteiros, incluindo zero e inteiros negativos: range(-3, 3) visita de -3 a 2. Um número de ponto flutuante como 3.0 é rejeitado com TypeError, mesmo que não tenha parte fracionária. Uma quantidade inserida como texto pode ser convertida primeiro com n = int(input("How many? ")) e depois usada em range(n).

Principais conclusões

  • O limite de parada de uma sequência range é excluído em todas as formas.
  • Um início omitido assume o valor padrão 0; um passo omitido assume o valor padrão 1.
  • Conte regressivamente com um passo negativo e um limite de parada abaixo do início.
  • Limites que não correspondem à direção do passo produzem uma sequência range vazia.
  • Os argumentos de range devem ser inteiros, e seu passo não pode ser zero.
  • Inspecione os valores fornecidos com list() e sua quantidade com len().

2.3 Escolhendo um laço adequado à tarefa

Escolha um laço perguntando o que controla a repetição. Se houver uma sequência de itens a visitar ou uma contagem de repetições, for costuma expressar a tarefa diretamente. Se a próxima repetição depender de uma condição variável ou de uma entrada futura, while coloca essa decisão em seu cabeçalho.

Itens definidos ou uma condição variável
TarefaLaço naturalMotivo
Exibir cada nome de uma listafor name in names:A lista fornece os itens.
Repetir uma mensagem um número de vezes escolhido pelo usuáriofor _ in range(n):O número informado fornece uma contagem.
Ler mensagens até “quit”whileO ponto de parada depende de uma entrada futura.
Aumentar um saldo até uma metawhile balance < target:O saldo atual decide se haverá repetição.

Uma quantidade não precisa ser escrita como literal no programa. Após ler n da entrada, range(n) ainda fornece um conjunto definido de passos. Um laço de repetição indefinida depende de uma condição cujo ponto de parada não é especificado como uma contagem de repetições.

Estimar um número grande de repetições não é adequado para “até terminar”. Um laço sobre range(1000) pode esgotar suas tentativas antes de o usuário terminar, e uma versão sem verificação de saída continuará depois que a tarefa estiver concluída.

Reescreva um laço de contagem

Estes dois laços exibem de 1 a 5, cada número em sua própria linha:

for i in range(1, 6):
    print(i)
i = 1
while i < 6:
    print(i)
    i += 1

Na versão while, o início da sequência range torna-se a inicialização, o limite de parada excluído torna-se a comparação < e o passo torna-se a atualização. O corpo usa i antes dessa atualização. Mover a atualização para antes de print(i) deslocaria os valores exibidos.

A contagem regressiva altera tanto a comparação quanto a atualização:

i = 10
while i > 0:
    print(i)
    i -= 2

Isso exibe 10, 8, 6, 4 e 2, assim como for i in range(10, 0, -2): faria. A sequência range decrescente exclui seu limite de parada, então a condição while correspondente é i > 0.

As duas formas correspondem à tarefa de exibir a contagem; seus valores finais da variável do laço são diferentes. A versão while realiza sua última atualização para 0 antes de parar. A versão for termina após atribuir seu último valor fornecido, 2.

Uma sequência range mantém os limites que recebeu
n = 3
for i in range(n):
    n = 10
    print(i)

Isso ainda exibe 0, 1 e 2. A sequência range foi criada usando 3; atribuir 10 a n não a recria. Um break pode encerrar o laço antecipadamente, mas alterar essa variável separada não altera os números fornecidos pela sequência range.

Um cabeçalho while, por outro lado, avalia sua expressão novamente a cada retorno. Se essa expressão usar n, alterar n no corpo pode mudar quando o laço termina. Quando ambas as formas expressam claramente uma tarefa de contagem, a versão for cuida da passagem entre valores sem uma atualização manual que pode ser esquecida.

Principais conclusões

  • Use for para visitar itens fornecidos ou percorrer uma quantidade conhecida, mesmo que lida durante a execução.
  • Use while quando uma condição variável ou uma entrada futura controlar a repetição.
  • Uma conversão de laço de contagem deve preservar o início, o limite, o passo e a ordem das operações.
  • Alterar uma variável usada para criar uma sequência range não altera essa sequência.
3

Controle um laço com break, continue e else

Um laço normalmente completa seu corpo e retorna para outra passagem. Às vezes ele deve parar assim que um resultado aparece ou pular o item atual e continuar. Break e continue expressam essas decisões. Um laço também pode ter um bloco else para a conclusão normal. Acompanhar o salto exato feito por cada instrução ajudará você a ler buscas, laços de entrada e tentativas limitadas sem confundir uma saída antecipada com um término normal.

3.1 Parando antecipadamente com break

break encerra imediatamente o laço mais interno que o contém. O Python pula o restante desse corpo e todas as iterações restantes e continua após o laço. Uma condição dentro do corpo decide quando essa saída antecipada deve ocorrer.

Pare quando o primeiro resultado for encontrado

Busque o primeiro múltiplo de 7 acima de 50:

for n in range(51, 100):
    if n % 7 == 0:
        print(n)
        break

O laço verifica 51, 52, 53, 54, 55 e 56. O resto é zero em 56, então o Python exibe 56 e sai do laço. São necessárias seis iterações, embora a sequência range possa fornecer 49 números. Sem break, o laço também exibiria múltiplos posteriores de 7.

break está indentado dentro do if, então é executado somente para uma correspondência. Se estivesse alinhado com if, seria executado na primeira iteração, independentemente do teste. Um break dentro de um if encerra o laço que contém esse if; ele não encerra apenas o bloco condicional.

Leia uma vez e decida se deve processar

Um laço while True coloca a decisão de saída após a leitura da entrada:

while True:
    line = input("> ")
    if line == "done":
        break
    print(line)
print("Done!")

Para as entradas “hello”, “there” e “done”, as linhas de resposta são:

hello
there
Done!

O valor sentinela é testado antes da linha de processamento. Quando ele aparece, break salta print(line). O print final sem indentação ainda é executado após o laço. Há apenas uma instrução de entrada, pois cada passagem começa lendo uma nova linha.

Um total numérico usa a mesma ordem: inicialize total = 0 antes do laço; leia e converta um número; saia com break se ele for 0; caso contrário, some-o. Para 4, 7 e 0, o total é 11. Processar antes do teste de saída permitiria que o valor sentinela chegasse ao cálculo, o que importa quando o valor de parada pode alterar uma contagem, um produto ou uma média.

Valide no momento da entrada
while True:
    age = int(input("Age: "))
    if 0 <= age <= 120:
        break
    print("Please enter an age from 0 to 120.")
print("Accepted:", age)

A comparação encadeada aceita uma idade de 0 a 120. Ela significa 0 <= age and age <= 120. Um número aceito provoca a saída antes do aviso; um número fora desse intervalo chega ao aviso e depois a outra entrada. Nessa forma, o if descreve uma resposta válida, enquanto um laço de validação controlado pelo cabeçalho descreve uma resposta inválida.

Leia o salto literalmente

Uma instrução após break no mesmo bloco não pode ser executada. Coloque uma mensagem ou um resultado armazenado antes do break quando fizer parte do caso bem-sucedido. Coloque código após o laço quando ele tiver de ser executado tanto após uma saída antecipada quanto após a conclusão normal.

break deve estar dentro de um laço; caso contrário, o Python lança SyntaxError. Vários pontos de saída separados podem tornar um laço mais difícil de acompanhar. Quando uma única condição descreve naturalmente a regra de parada da tarefa, mantê-la no cabeçalho pode tornar o caminho mais fácil de rastrear.

Principais conclusões

  • Break encerra imediatamente o laço mais interno que o contém.
  • Coloque o break dentro da condição que deve causar a saída.
  • Um laço de entrada while True lê, testa o valor sentinela e depois processa os dados.
  • Instruções após break no mesmo bloco são inalcançáveis.

3.2 Pulando um item com continue

continue pula o restante da iteração atual. O laço permanece ativo: um laço for recebe seu próximo item, e um laço while retorna à sua condição. Isso é útil quando um item não deve receber nenhum dos processamentos que seguem uma verificação.

Pule valores selecionados
total = 0
for n in range(1, 11):
    if n % 3 == 0:
        continue
    total += n
print(total)

A sequência range fornece todos os dez inteiros de 1 a 10. Em 3, 6 e 9, continue pula a adição. A soma dos dez é 55; deixar esses três valores de fora remove 18, então o programa exibe 37.

Continue não remove uma iteração da sequência range. O corpo ainda começa com cada valor, incluindo os pulados. Ele altera quais linhas posteriores são executadas nessa passagem.

Um filtro positivo pode expressar a mesma tarefa. Em um laço sobre [5, -2, 8, -7, 3], if n < 0: continue seguido de print(n) exibe 5, 8 e 3. Colocar o print dentro de if n >= 0: produz a mesma saída. Continue costuma ser útil quando várias linhas de processamento vêm em seguida, pois os itens rejeitados podem sair dessa parte do corpo imediatamente.

Não pule uma atualização de while
i = 0
while i < 5:
    if i == 2:
        continue
    print(i)
    i += 1

Isso exibe 0 e 1 e depois fica preso em 2. Em 2, continue salta para a condição sem alcançar a atualização. A condição permanece verdadeira e o mesmo ramo é seguido novamente.

Para pular a exibição de 2 e ainda avançar, atualize também nesse ramo:

i = 0
while i < 5:
    if i == 2:
        i += 1
        continue
    print(i)
    i += 1

Agora a saída é 0, 1, 3 e 4 em linhas separadas. O caminho que pula a exibição avança de 2 para 3. Cada caminho por esse corpo realiza exatamente uma atualização.

Break, continue e pass
InstruçãoEfeito quando alcançada
breakEncerra imediatamente o laço que a contém.
continuePula o restante desta passagem e inicia a próxima verificação do laço ou o próximo item.
passNão faz nada; continua normalmente para a instrução seguinte.

Para um laço sobre [1, 2, 3, 4], suponha que um if n == 2: contenha uma dessas instruções e que print(n) venha depois do if. Break exibe apenas 1. Continue exibe 1, 3 e 4. Pass exibe os quatro valores porque não pula o print.

pass pode preencher um corpo onde o Python exige uma instrução enquanto o código está sendo desenvolvido. Ele não fornece uma atualização nem uma saída: while True: pass continua em execução. Break e continue devem estar dentro de um laço e afetam apenas o laço mais interno que os contém.

Principais conclusões

  • Continue pula as instruções restantes da passagem atual, e depois o laço prossegue.
  • Um item pulado ainda conta como uma iteração.
  • Cada caminho que se repete pelo corpo de um while deve preservar o avanço em direção a uma saída.
  • Pass não faz nada e não pula as instruções posteriores.
  • Break encerra o laço; continue o mantém ativo.

3.3 O significado do else de um laço

Um bloco else pode pertencer a um laço for ou while. Ele é executado uma vez quando o laço termina normalmente: um laço for esgota seus itens ou uma condição while se torna falsa. Ele é pulado quando esse laço termina por meio de break. Leia-o como o caso sem break.

Informe uma busca que não encontrou correspondência
for n in [4, 9, 15, 22]:
    if n % 5 == 0:
        print("First multiple of 5:", n)
        break
else:
    print("No multiple of 5")

O laço chega a 15, exibe First multiple of 5: 15 e é interrompido. O else é pulado. Com [4, 9, 22], o laço usa todos os itens sem ser interrompido e exibe No multiple of 5 uma vez.

O alinhamento é decisivo. O else está alinhado com for, então pertence ao laço. Um else alinhado com o if interno seria executado para cada item sem correspondência, anunciando uma falha antes de a busca terminar.

Uma lista vazia também chega ao else do laço. Não há itens, então o corpo é executado zero vezes e não há break. Da mesma forma, um laço while cuja condição é falsa na primeira verificação executa seu else imediatamente.

Busque um divisor

Um número primo é um inteiro maior ou igual a 2 cujos únicos divisores positivos são 1 e ele mesmo. Busque um divisor entre esses extremos:

n = 29
if n < 2:
    print("Not prime")
else:
    for d in range(2, n):
        if n % d == 0:
            print(n, "is divisible by", d)
            break
    else:
        print(n, "is prime")

Para 29, todos os restos são diferentes de zero e o else do laço exibe 29 is prime. Para 21, o primeiro divisor é 3 e o break pula o else do laço. A verificação externa trata números menores que 2. Sem ela, uma sequência range vazia para 1 chegaria ao else e classificaria 1 incorretamente como primo. Para 2, a sequência range também está vazia, mas a conclusão de que é “primo” está correta.

Tentativas limitadas com while e else
attempts = 0
while attempts < 3:
    guess = input("Password: ")
    if guess == "open sesame":
        print("Welcome!")
        break
    attempts += 1
else:
    print("Too many attempts.")

Um palpite correto executa o break, mesmo na terceira tentativa. Três palpites incorretos elevam o contador a 3; a condição se torna falsa e o else exibe a mensagem de falha. Uma instrução comum após o laço seria executada nos dois casos, então não os distinguiria.

Registre o resultado com uma variável sinalizadora

Uma variável sinalizadora é uma variável booleana que registra se algo aconteceu. Comece com found = False, altere-a para True quando uma correspondência aparecer e execute break. Após o laço, if not found: trata a falha. Isso fornece o mesmo resultado de busca que o else do laço, usando um registro explícito do acontecimento. Escolha uma forma cuja indentação e caminho de saída você consiga explicar com clareza.

Principais conclusões

  • O else de um laço é executado na conclusão normal e é pulado por um break desse laço.
  • Um else alinhado com um if interno tem outro significado.
  • Mesmo com zero iterações, o else do laço é alcançado.
  • Uma busca pode informar a falha uma vez, depois que todos os itens falharem no teste.
  • Uma variável sinalizadora booleana pode registrar um resultado para uso após o laço.
  • Uma busca vazia por divisores precisa da regra separada de que números primos são maiores ou iguais a 2.
4

Use padrões comuns de laços

Muitas tarefas com laços seguem um pequeno conjunto de padrões reutilizáveis. Um contador registra a frequência com que um teste é satisfeito, um acumulador constrói um resultado e uma variável com o melhor valor encontrado até o momento mantém um máximo ou mínimo. Buscas usam um registro semelhante para lembrar uma correspondência. O valor inicial e o lugar em que ele muda determinam o significado do resultado final. Você também tratará dados vazios e empates, em que uma pequena escolha pode mudar a resposta.

4.1 Construindo contagens, totais, produtos e texto

Um acumulador mantém um resultado entre iterações. Um contador é um tipo de acumulador que aumenta em 1 cada vez que um evento ocorre. Defina o valor inicial antes do laço, atualize-o dentro dele e use o resultado final depois.

Conte eventos ou some valores
count = 0
for n in [4, 15, 22, 8, 11]:
    if n > 10:
        count += 1
print(count)

O teste é satisfeito por 15, 22 e 11, então a saída é 3. A atualização soma 1 para um item correspondente; somar n totalizaria os valores correspondentes.

Para somar todos os itens, inicialize total = 0, remova o teste if, adicione total += n diretamente no corpo e exiba total depois. Os cinco valores somam 60. Sua média é 60 / 5, que resulta em 12.0; a divisão com / retorna um número de ponto flutuante para esses operandos inteiros.

Para uma média filtrada, atualize o total e a contagem sob a mesma condição:

total = 0
count = 0
for n in [4, 15, 22, 8, 11]:
    if n > 10:
        total += n
        count += 1
if count > 0:
    print(total / count)
else:
    print("No matching values")

Aqui o total selecionado é 48 e a contagem é 3, então a saída é 16.0. Dividir pelo comprimento da lista inteira usaria o grupo errado. A verificação da contagem também trata uma lista vazia ou sem correspondências.

Escolha um valor inicial adequado à operação
ResultadoValor inicialAtualização
Contagem0Some 1 para um evento.
Soma0Some cada valor selecionado.
Produto1Multiplique por cada valor selecionado.
Texto""Una cada novo trecho ao texto acumulado.

Um produto dos inteiros de 1 a 5 começa em 1 e termina em 120. Começá-lo em 0 manteria cada produto em 0.

A acumulação de texto também depende da ordem:

rev = ""
for ch in "stressed":
    rev = ch + rev
print(rev)

Cada novo caractere vai para a frente do texto armazenado, produzindo desserts. Alterar a atualização para rev = rev + ch adiciona caracteres ao final e reconstrói stressed.

Mantenha o resultado entre iterações

Mover total = 0 para dentro de um laço de soma apaga o trabalho anterior em cada passagem. Com [4, 15, 22, 8, 11], reinicializar antes de cada adição deixa apenas 11 no final. Inicialize fora do laço para que a próxima adição use o subtotal anterior.

Um print dentro do corpo mostra o total acumulado após cada atualização: 4, 19, 41, 49 e 60 neste exemplo. Um print após o laço mostra apenas 60. Escolha sua posição de acordo com a saída solicitada.

Para uma lista armazenada simples, sum(values) fornece seu total e len(values) fornece sua contagem. Um laço explícito permite filtrar valores, acompanhar vários resultados juntos ou processar valores conforme chegam pela entrada.

Principais conclusões

  • Inicialize um acumulador antes do laço para que ele mantenha o trabalho anterior.
  • Um contador soma 1 por evento; um total soma o próprio valor.
  • Comece somas em 0, produtos em 1 e texto com uma string vazia.
  • Para uma média filtrada, conte e some os mesmos valores selecionados.
  • Verifique se a contagem é diferente de zero antes da divisão.
  • Exiba dentro do laço para resultados acumulados e após o laço para um resultado final.
  • Adicionar um caractere antes ou depois do texto armazenado altera sua ordem.

4.2 Mantendo o melhor valor encontrado até o momento

Para encontrar um máximo, mantenha o maior valor encontrado até o momento. Compare cada novo item com o valor armazenado e substitua-o somente quando o novo item for maior. O padrão de mínimo funciona da mesma forma com a comparação invertida.

Comece sem inventar um valor de dados

None é o valor do Python para “nada ainda”. Ele oferece uma maneira clara de o primeiro item se tornar o melhor atual:

largest = None
for n in [12, -3, 25, 7]:
    if largest is None or n > largest:
        largest = n
print(largest)

Os valores armazenados após cada item são 12, 12, 25 e 25. O programa exibe 25. No primeiro item, largest is None é verdadeiro. O or do Python para aí, então não tenta a comparação inválida de um número com None. Nas passagens seguintes, o valor armazenado é um número e a segunda comparação é usada.

Para um mínimo, comece com smallest = None e use smallest is None or n < smallest. A mesma lista produz -3.

Começar um máximo em 0 pode informar um valor que nunca apareceu. Para -5, -2 e -9, nenhum valor ultrapassa 0, então essa versão manteria 0 incorretamente. O máximo é -2. Começar um mínimo em 0 tem o problema correspondente quando todos os itens são positivos.

Se os dados comprovadamente contiverem um item, usar esse primeiro valor como melhor valor inicial também funciona. Funções embutidas cobrem listas armazenadas simples: max([12, -3, 25, 7]) fornece 25 e min([12, -3, 25, 7]) fornece -3. Um laço personalizado pode manter informações relacionadas, como onde o valor ocorreu.

Salve a posição quando o melhor valor mudar
largest = None
best_day = None
day = 0
for temperature in [18, 23, 21, 26, 24]:
    day += 1
    if largest is None or temperature > largest:
        largest = temperature
        best_day = day
print(largest, best_day)

O contador de dias avança para cada item. O melhor dia muda somente quando um novo máximo aparece. A saída final é 26 4, ou seja, uma temperatura de 26 no dia 4. Salvar o dia após o laço salvaria apenas o último dia examinado.

Decida o que fazer em um empate

Para [5, 8, 8, 3], o teste n > largest mantém o primeiro 8 e sua posição, 2 ao contar a partir de 1. Substituir > por >= também atualiza quando há um valor igual, mantendo o último 8 na posição 3. O maior número permanece o mesmo; a posição armazenada é diferente.

Uma lista vazia deixa inalterado o melhor valor inicializado com None. Verifique esse estado antes de informar um número ou fazer cálculos com ele. Isso significa que nenhum item forneceu um melhor valor.

A comparação pode usar uma propriedade de um item. Para manter a palavra mais longa entre “pera”, “banana” e “figo”, compare len(word) com o comprimento da palavra armazenada. “Banana” tem seis caracteres, então vence. Salve a própria palavra quando ela se tornar a melhor para que o resultado identifique o item, não apenas seu comprimento.

Principais conclusões

  • Compare cada novo item com o melhor encontrado até o momento e substitua o melhor quando houver melhora.
  • None registra que nenhum primeiro item foi encontrado.
  • A avaliação de curto-circuito de or evita comparar o primeiro número com None.
  • Zero é um valor inicial geral inseguro para máximos ou mínimos.
  • Salve uma posição ao mesmo tempo que seu melhor valor.
  • Uma comparação estrita mantém o primeiro melhor valor empatado; permitir igualdade mantém o último.

4.3 Buscando e lembrando uma correspondência

Uma busca linear verifica os itens em ordem até encontrar uma correspondência ou esgotar os itens. Uma correspondência pode ser um valor exato, o primeiro item que passa em uma condição ou uma evidência para uma pergunta sobre “pelo menos um” ou “todos”.

Registre o sucesso
names = ["Ana", "Ben", "Chen"]
found = False
for name in names:
    if name == "Ben":
        found = True
        break
if found:
    print("Ben is on the list")
else:
    print("Ben is not on the list")

A variável sinalizadora começa falsa porque nada foi encontrado ainda. A primeira verificação, Ana, deixa-a inalterada. A segunda encontra Ben, torna a variável verdadeira e sai do laço. A saída é Ben is on the list.

A variável sinalizadora registra um acontecimento ao longo de toda a busca. Não a reinicialize a cada item sem correspondência. Se um laço continuar após encontrar Ben e definir found = False ao chegar a Chen, o resultado bem-sucedido será perdido. Da mesma forma, “não encontrado” deve aparecer depois que todas as verificações falharem, não dentro de um else por item que anuncia a falha para Ana antes de Ben ser examinado.

Primeira ou última correspondência

Para [7, 4, 9, 10], o primeiro número par é 4 e o último é 10. Este laço salva o primeiro:

match = None
for n in [7, 4, 9, 10]:
    if n % 2 == 0:
        match = n
        break
print(match)

A saída é 4. Remova o break e cada nova correspondência sobrescreverá a anterior, deixando 10. Se nada corresponder, o valor armazenado permanecerá None. Decida se a tarefa pede existência, o primeiro item, o último item ou uma posição antes de escolher o que armazenar.

Para informar uma posição, mantenha um contador que avance para cada item examinado e salve-o quando houver correspondência. Informe como as posições são numeradas: contar a partir de 1 coloca Chen na posição 3 da lista de nomes; a numeração usual de posições do Python começa em 0.

Pelo menos um precisa de um sucesso; todos precisam de uma falha

Uma busca por “pelo menos um” começa falsa e se torna verdadeira no primeiro item que passa no teste. Ela pode parar aí porque um sucesso responde à pergunta.

Uma busca por “todos” começa verdadeira e se torna falsa na primeira falha:

all_positive = True
for n in [3, 8, -1, 5]:
    if n <= 0:
        all_positive = False
        break
print(all_positive)

O terceiro valor, -1, refuta “todos os valores são positivos”, então a saída é False. Não é necessário inspecionar 5. Zero também falharia porque positivo significa maior que zero. Se não houver itens, a variável sinalizadora permanecerá verdadeira: nenhum contraexemplo apareceu.

Pertencimento exato e condições personalizadas

Para igualdade apenas, "Ben" in names fornece diretamente True ou False. Um laço torna visível o estado variável da busca e permite que o teste expresse uma condição personalizada, como “a primeira palavra com mais de cinco caracteres”.

Comparações de strings são exatas. "ben" é diferente de "Ben", e "Ben " inclui um espaço ao final. Uma busca por uma dessas strings não deve tratar as outras como iguais.

Principais conclusões

  • Uma busca linear examina os itens em ordem até que sua regra de parada seja atendida.
  • Inicialize uma variável sinalizadora de busca uma vez e mantenha o sucesso registrado.
  • Informe que não foi encontrado somente após toda a busca falhar.
  • Break mantém a primeira correspondência; sobrescrever a cada correspondência mantém a última.
  • A verificação de pelo menos um para em um sucesso; a de todos para em um contraexemplo.
  • A igualdade de strings distingue maiúsculas de minúsculas e espaços.
5

Escreva laços aninhados

Um laço dentro de outro pode construir linhas, testar combinações ou repetir uma tarefa para cada grupo. O laço externo escolhe um grupo; o interno realiza sua tarefa para esse grupo antes de o externo avançar. Essa estrutura torna especialmente importantes a indentação e a posição da reinicialização. Você contará execuções internas, construirá uma pequena grade e uma forma crescente e acompanhará saídas antecipadas que afetam um laço ou ambos.

5.1 Linhas, combinações e padrões crescentes

Um laço aninhado é um laço dentro do corpo de outro laço. Para cada iteração externa, o laço interno começa e executa sua tarefa. A variável externa permanece fixa enquanto a variável interna muda.

Construa uma linha de cada vez
for row in range(1, 4):
    for col in range(1, 5):
        print(row * col, end=" ")
    print()

A saída tem estas três linhas, cada uma com um espaço após seu último número:

1 2 3 4 
2 4 6 8 
3 6 9 12 

Primeiro, row é 1, enquanto col assume valores de 1 a 4. Depois row passa a ser 2 e o laço interno começa novamente na coluna 1. Por fim, a linha 3 recebe as mesmas quatro colunas. O corpo interno é executado doze vezes.

end=" " substitui a nova linha usual de print por um espaço. O print() vazio encerra a linha. Ele está dentro do corpo externo, mas fora do corpo interno, então é executado três vezes. Indentá-lo um nível a mais colocaria cada número em sua própria linha. Remover sua indentação encerraria uma linha apenas uma vez, após ambos os laços.

Dê nomes distintos às variáveis dos laços, como row e col. Reutilizar o nome externo dentro do laço interno sobrescreve o valor necessário para identificar a linha atual.

Conte o trabalho

Quando cada passagem externa recebe o mesmo número de passagens internas, multiplique as contagens. Três linhas e quatro colunas resultam em doze execuções internas. Dois laços com 100 passagens cada resultam em 10.000 execuções internas; três níveis resultam em 1.000.000. Portanto, um pequeno aumento em cada limite pode criar muito mais trabalho repetido.

Se o limite interno mudar com a variável externa, some as contagens separadas:

for row in range(1, 5):
    for _ in range(row):
        print("*", end="")
    print()

Isso exibe:

*
**
***
****

Os comprimentos das linhas são 1, 2, 3 e 4, totalizando dez estrelas. Para um padrão com n dessas linhas, o total é n(n+1)/2. Multiplicar quatro por quatro suporia incorretamente que cada linha tem quatro estrelas.

Reinicialize um resultado para cada grupo

Para totalizar cada linha da grade de multiplicação, defina row_total = 0 dentro do laço externo, imediatamente antes do laço interno. Some row * col dentro do corpo interno e exiba row_total após o laço interno. As saídas são 10, 20 e 30.

Inicializar apenas uma vez, antes dos dois laços, mantém também os totais das linhas anteriores. Exibir após cada linha resulta em 10, 30 e 60. Ambas as posições preservam um resultado, mas uma preserva o resultado de uma linha e a outra preserva o total acumulado de toda a grade.

Visite combinações

Dois laços sobre range(1, 7) visitam todos os 36 resultados ordenados para dois dados. O primeiro laço fornece o primeiro dado e o segundo fornece o segundo dado. Uma condição dentro do corpo interno pode contar pares cuja soma é 7. Seis passam: (1, 6), (2, 5), (3, 4), (4, 3), (5, 2) e (6, 1). Inverter um par descreve um resultado ordenado diferente.

Principais conclusões

  • O laço interno começa novamente a cada iteração externa.
  • Multiplique as contagens de iterações somente quando o comprimento interno permanecer fixo.
  • Some os comprimentos das linhas quando o limite interno depender da linha.
  • A indentação determina se uma ação ocorre por item, por linha ou uma vez no total.
  • Reinicialize um acumulador por linha dentro do laço externo, antes do laço interno.
  • Nomes distintos para as variáveis dos laços mantêm disponíveis os valores de linha e coluna.

5.2 Pulando e parando dentro de laços aninhados

Break e continue atuam sobre o laço mais interno que os contém. Em código aninhado, localize esse laço antes de prever o que acontece em seguida. Um break no corpo interno não interrompe por si só o laço externo.

Acompanhe um break interno
for a in range(1, 4):
    for b in range(1, 4):
        if b > a:
            break
        print(a, b)

Em a = 1, o par 1 1 é exibido. Quando b passa a ser 2, o break encerra esse laço interno. O laço externo avança para a = 2 e inicia um novo laço interno com b igual a 1. Ele exibe 2 1 e 2 2 e depois é interrompido quando b é igual a 3. Para a igual a 3, todos os valores de b passam. As seis linhas de saída são:

1 1
2 1
2 2
3 1
3 2
3 3
Pare ambos os laços com um resultado registrado

Uma busca por uma combinação pode usar uma variável sinalizadora e um break em cada nível:

found = False
for a in range(1, 6):
    for b in range(1, 6):
        if a * b == 12:
            found = True
            break
    if found:
        break
if found:
    print(a, b)
else:
    print("No matching pair")

As linhas com a igual a 1 e 2 não têm correspondência. Na linha 3, b chega a 4 e o produto é 12. O break interno encerra o laço de b; a variável sinalizadora faz o break externo ser executado. A saída final é 3 4.

A variável sinalizadora é inicializada antes dos dois laços porque registra um resultado para toda a busca. O if found: externo deve ficar após o laço interno, mas dentro do corpo externo. Sua indentação faz com que ele seja verificado uma vez por linha concluída ou interrompida.

Preserve valores quando a busca continua

Remover apenas o break externo faz a busca continuar nas linhas posteriores. Neste exemplo, uma correspondência posterior é 4 3, mas o laço acaba examinando a linha 5 e termina com a = 5 e b = 5. Exibir as variáveis dos laços então fornece 5 5, não uma correspondência armazenada.

Se a tarefa precisar do último par correspondente, salve best_a = a e best_b = b sempre que ocorrer uma correspondência. Essas variáveis separadas mantêm uma correspondência enquanto as variáveis dos laços continuam mudando. Verifique a variável sinalizadora antes de informá-las quando uma correspondência puder não existir.

Pule um par e mantenha a linha

Um continue dentro do laço interno passa para seu próximo valor interno. Para dois laços que visitam de 1 a 4, if a == b: continue antes do processamento pula quatro pares iguais. Restam doze pares ordenados dos dezesseis originais.

Um if também pode selecionar pares sem saltar. Dois dados têm três pares ordenados cuja soma é 10: (4, 6), (5, 5) e (6, 4). Uma condição dentro do corpo interno os identifica.

Principais conclusões

  • Um break interno encerra apenas o laço interno; um continue interno pula apenas a passagem interna atual.
  • Uma variável sinalizadora e um segundo break podem permitir uma saída antecipada dos dois laços.
  • Coloque a verificação externa da variável sinalizadora após o laço interno e dentro do corpo externo.
  • As variáveis dos laços continuam mudando após uma correspondência, a menos que a busca pare; salve os valores correspondentes quando necessário.
6

Rastreie e depure laços

Um laço pode parecer correto enquanto visita o último valor errado, soma um valor cedo demais ou exibe um separador extra. O rastreamento torna visível seu comportamento real: registre cada mudança na ordem de execução e compare-a com o resultado pretendido. Exemplos pequenos são especialmente úteis porque você pode verificar cada passagem. Você distinguirá execuções do corpo de verificações da condição, inspecionará valores finais e corrigirá limites com base em um rastreamento.

6.1 Rastreando valores na ordem de execução

Rastreamento significa executar um programa à mão, uma instrução de cada vez, registrando seus valores e sua saída. Uma tabela de rastreamento dá uma coluna a cada variável relevante. Indique se um valor é registrado antes ou depois de uma atualização para que as linhas tenham um significado claro.

Rastreie um laço while
total = 0
i = 1
while i <= 4:
    total = total + i
    i = i + 1
print(total)

Comece com total = 0 e i = 1. Verifique a condição antes de entrar no corpo. Para cada verificação verdadeira, execute a adição antes do incremento:

Passagemi antestotal depoisi depois
1112
2233
3364
44105

A próxima verificação é 5 <= 4, que é falsa. Não há uma quinta linha do corpo. O corpo é executado quatro vezes, a condição é verificada cinco vezes e o print após o laço exibe 10 uma vez. Os valores finais são i = 5 e total = 10.

Distinga a verificação que falhou de uma iteração: ela encerra o laço sem executar seu corpo. Se a condição inicial já for falsa, não haverá nenhuma linha do corpo e as variáveis manterão seus valores iniciais.

A ordem das instruções altera o resultado

Se o incremento for movido para antes da adição, cada passagem usará o novo i. As quatro adições passam a ser 2, 3, 4 e 5, resultando em 14. A condição ainda testa i no início, antes desse incremento. Rastrear apenas os valores do cabeçalho deixaria passar qual valor a adição realmente usa.

Quando um corpo contém break ou continue, pare de acompanhar suas linhas restantes assim que o salto ocorrer. Com continue, volte ao cabeçalho ou ao próximo item; com break, prossiga após o laço. Um rastreamento deve seguir esses caminhos, não apenas copiar todas as instruções do corpo em cada linha.

Rastreie caracteres e laços aninhados

Um laço for atribui o próximo item no início de sua passagem:

rev = ""
for ch in "abc":
    rev = ch + rev
print(rev)

O texto armazenado passa a ser "a", depois "ba" e depois "cba". A saída é cba. Registre o texto real, incluindo sua ordem, em vez de escrever apenas que “um caractere foi adicionado”.

Para laços aninhados, use uma linha para cada iteração interna. Registre as duas variáveis dos laços para que o valor externo se repita nas linhas que lhe pertencem. Em um laço com duas linhas e três colunas, os valores de linha são 1, 1, 1, 2, 2, 2, enquanto os valores de coluna são 1, 2, 3, 1, 2, 3.

Produza um rastreamento com print

Um print("i =", i, "total =", total) temporário após as duas atualizações no laço de soma exibe i e total no fim de cada passagem. Colocá-lo antes das atualizações exibe outro momento. Compare a posição do print com os rótulos das colunas da sua tabela. Remova as impressões de diagnóstico após corrigir o código para que não se tornem saída extra do programa.

Para uma pergunta “o que é exibido?”, registre apenas as instruções que realmente exibem algo. Uma variável mudar não é, por si só, uma saída; várias atualizações podem ocorrer antes de um único print final.

Principais conclusões

  • Rastreie as instruções na ordem exata em que o Python as executa.
  • Identifique os valores registrados como anteriores ou posteriores à atualização relevante.
  • Um laço while que termina normalmente verifica sua condição uma vez a mais do que executa seu corpo.
  • Break e continue alteram quais instruções aparecem em um rastreamento.
  • Acompanhe a saída separadamente das mudanças de variáveis.

6.2 Corrigindo limites e separadores

Um erro de uma unidade visita um valor a mais ou a menos, ou desloca os valores visitados em uma unidade. Ele costuma vir do limite de parada excluído de uma sequência range, de uma escolha entre < e <= ou do valor inicial de um contador.

Defina os extremos pretendidos

Para somar de 1 a 10, range(1, 10) é curta demais. Ela fornece apenas de 1 a 9, resultando em um total de 45. range(1, 11) inclui 10 e resulta em 55. Para uma sequência range crescente de inteiros com passo 1, use o limite de parada n + 1 para incluir o valor final n.

Para um passo padrão de 1, range(a, b) fornece b - a valores quando b é maior que a. Um break ainda pode encerrar o laço antes que todos sejam usados. Com outros tamanhos de passo, liste o caso pequeno ou use len(range(...)) para verificar a contagem.

A contagem de um laço while depende conjuntamente de seu início, comparação e atualização. Para um inteiro não negativo n, com i += 1 no fim de cada passagem e sem saída antecipada:

Início e condiçãoExecuções do corpo
i = 0; while i < n:n
i = 1; while i <= n:n
i = 0; while i <= n:n + 1

Com n igual a 0, os dois primeiros pulam o corpo. O terceiro é executado uma vez com i igual a 0. Esse caso pequeno revela a passagem extra sem rastrear um laço longo.

Limites da contagem regressiva

Começando em 5 e exibindo antes de n -= 1, while n > 0: exibe cinco valores, terminando em 1. Usar n >= 0 exibe seis, terminando em 0. As sequências range decrescentes correspondentes são range(5, 0, -1) e range(5, -1, -1).

Verifique também a ordem. Atualizar um contador antes de usá-lo pode deslocar cada valor mesmo quando o laço tem o número esperado de passagens. Um rastreamento deve registrar o primeiro e o último valor realmente usados pelo cálculo.

Itens e os espaços entre eles

Um erro de contagem de limites confunde contagens de itens com contagens de espaços entre eles. Cinco seções de cerca precisam de seis postes. Cinco números exibidos precisam de apenas quatro separadores entre eles.

for i in range(1, 6):
    print(i, end="-")

Isso exibe 1-2-3-4-5-, incluindo um hífen final indesejado. Cada print adiciona um hífen após um item, até mesmo o último.

Uma correção é exibir o primeiro item separadamente e depois exibir um separador antes de cada item posterior:

print(1, end="")
for i in range(2, 6):
    print("-" + str(i), end="")
print()

A saída é 1-2-3-4-5. O laço exibe quatro trechos de hífen e número, e o print vazio final encerra a linha. Essa versão tem um primeiro item conhecido; um caso geral de dados vazios também deve pular a exibição desse primeiro item.

Verifique a correção com casos pequenos

Anote o primeiro valor, o último valor e a contagem pretendidos antes de alterar o código. Escolha os limites e a comparação correspondentes e rastreie uma execução curta. Verifique zero e um item, além de um caso comum. Zero revela trabalho que deve ser pulado; um revela um separador desnecessário ou uma atualização extra. Altere o limite que causa o erro para que a repetição do código corresponda à tarefa.

Principais conclusões

  • Verifique juntos o início, o último valor necessário e o número de passagens.
  • Uma sequência range crescente com passo um inclui n quando seu limite de parada é n + 1.
  • A comparação e a atualização do while determinam conjuntamente sua contagem.
  • Sequências range decrescentes também excluem seu limite de parada.
  • As contagens de itens e de separadores diferem em uma unidade para uma sequência não vazia.
  • Rastreie casos pequenos, especialmente zero e um item, após corrigir um limite.

Exercícios resolvidos de Laços de repetição em Python

6 Lições Interativas

1

Faça um laço while avançar e parar

15 passos
Acompanhe valores que mudam, corrija uma meta inalcançável e colete entradas sem contar o sinal de parada.
  1. 1
    IntroduçãoA repetição precisa de uma decisão

    Um programa que continua pedindo uma resposta precisa de uma regra para outra tentativa. Um laço while coloca essa regra em uma condição verificada antes de cada passagem.

    Você acompanhará uma contagem regressiva, descobrirá por que um valor que muda ainda pode não atingir sua saída e construirá um laço de entrada cujo sinal de parada nunca chega aos cálculos.

  2. 2
    ExplicaçãoConfigure a contagem regressiva

    Um laço while repete um corpo indentado enquanto sua condição for verdadeira. Dê um valor inicial ao valor de controle antes do cabeçalho:

    remaining = 4
    while remaining > 0:
        print(remaining)
        remaining -= 1
    

    Aqui o início é 4, o teste pergunta se ainda resta algum e a atualização subtrai 1. O print ocorre antes dessa subtração.

  3. 3
    ExemploExecute as duas primeiras passagens

    O primeiro teste usa remaining igual a 4 e é satisfeito. O print mostra 4, depois a atualização altera remaining para 3. O Python retorna ao cabeçalho.

    O próximo teste usa 3, então o corpo exibe 3 e altera o valor para 2. A condição não é verificada novamente entre o print e a atualização; essas instruções são executadas na ordem em que foram escritas.

  4. 4
    ExemploChegue à verificação que falha

    As próximas duas passagens exibem 2 e 1. Após a última atualização, remaining é 0. O teste remaining > 0 agora é falso, então o corpo não é executado novamente.

    Quatro valores foram exibidos, mas o cabeçalho foi verificado cinco vezes: quatro verificações verdadeiras e uma verificação final falsa. Começar com remaining igual a 0 não produziria nenhuma passagem pelo corpo.

  5. 5
    DesafioAltere a ordem

    Na contagem regressiva, mova remaining -= 1 para cima de print(remaining). Quais quatro valores são exibidos, começando em 4?

    ---reveal---

    A saída é 3, 2, 1 e 0. Cada teste ainda aceita o valor positivo antigo, mas o print usa o valor atualizado. Tornar a condição falsa durante o corpo não interrompe esse corpo; o cabeçalho a testará no próximo retorno.

  6. 6
    DicaEncontre a falta de avanço

    Se uma contagem regressiva continua exibindo 4, procure a atualização e sua indentação. Uma atualização após o laço não pode ajudar o laço a terminar, pois ainda não foi alcançada.

    Se a atualização somar 1 sob while remaining > 0:, o valor se afastará da saída. Um print temporário após a atualização mostra se o valor muda na direção pretendida.

  7. 7
    ExemploMudar ainda pode não atingir a meta
    n = 2
    while n != 7:
        print(n)
        n += 2
    

    Isso visita 2, 4, 6, 8 e números pares posteriores. A variável muda a cada vez, mas nenhum desses valores é igual a 7. Se a tarefa for exibir valores pares abaixo de 7, while n < 7: corresponde a ela: a próxima verificação falha depois que n passa a ser 8.

  8. 8
    DesafioCorrija uma meta ultrapassada

    Um laço começa em 5, exibe n enquanto n != 12 e soma 2 no final. A tarefa é exibir seus valores ímpares abaixo de 12. Por que ele falha e qual cabeçalho o corrige?

    ---reveal---

    Os valores permanecem ímpares e nunca são iguais a 12. Use while n < 12:. Ele exibe 5, 7, 9 e 11 e depois para quando n chega a 13. Alterar a atualização para 1 mudaria a sequência de números ímpares necessária.

  9. 9
    Ideia-chaveConte passos decimais com inteiros

    Adições decimais repetidas podem não atingir uma meta de igualdade: dez adições de 0.1 a 0.0 resultam em 0.9999999999999999.

    Para uma sequência fixa de décimos, deixe os inteiros controlarem as passagens:

    for i in range(11):
        x = i / 10
        print(x)
    

    Isso calcula onze valores de 0,0 até 1,0 sem exigir que um decimal armazenado atinja uma parada por igualdade exata.

  10. 10
    ExplicaçãoLeia antes de testar

    Um valor sentinela significa “não há mais dados”. Para uma coleção de contagens positivas, 0 pode marcar o fim. Uma leitura inicial obtém o primeiro número antes do laço para que seu cabeçalho tenha um valor a testar.

    total = 0
    number = int(input("Count (0 to stop): "))
    

    A conversão importa: input retorna texto, enquanto esse laço comparará números.

  11. 11
    ExemploProcesse e leia o próximo valor
    while number != 0:
        total += number
        number = int(input("Count (0 to stop): "))
    print(total)
    

    Acrescente isso abaixo da configuração inicial. As entradas 6, 9 e 0 somam 6 e depois 9, deixando um total de 15. O novo 0 falha na próxima verificação do cabeçalho antes de ser somado. Sem a leitura final dentro do corpo, o primeiro valor seria processado repetidamente.

  12. 12
    ConexãoRejeite apenas respostas inaceitáveis

    A coleta de entradas para em um valor especial. A validação, por sua vez, repete até que um valor seja aceitável. Para aceitar um inteiro de 1 a 5, repita enquanto choice < 1 or choice > 5 e leia uma nova escolha dentro do corpo.

    A condição deve descrever qualquer uma das violações. Usar and não rejeitaria nada: um número não pode estar abaixo de 1 e acima de 5 ao mesmo tempo.

  13. 13
    DesafioTrate os dados e o sinal de parada

    As notas são não negativas e -1 é o valor sentinela. Para as entradas 0, 9 e -1, quais total e contagem um laço de média deve usar? E se -1 chegar primeiro?

    ---reveal---

    Use total 9 e contagem 2, resultando em média 4,5. Zero é dado, enquanto -1 é excluído. Se -1 vier primeiro, a contagem permanece 0; informe que não há dados em vez de dividir. A verificação do valor sentinela deve preceder as duas atualizações.

  14. 14
    DesafioVerifique um caminho completo de entrada

    Um laço com leitura inicial se repete com text != 0, mas text vem diretamente de input. Inserir 0 não o interrompe. Explique o problema de tipos e dê duas correções válidas.

    ---reveal---

    Input fornece "0", uma string, que é diferente do inteiro 0. Compare com "0" para manter uma string sentinela ou converta a entrada com int antes de comparar com 0. Tanto a primeira leitura quanto as posteriores devem manter essa escolha.

  15. 15
    RecapitulaçãoAcompanhe um caminho antes de executar

    Para um novo laço while, rastreie uma passagem comum, a passagem de parada pretendida e um caso que deve ser executado zero vezes. Em cada caminho que se repete, identifique a próxima entrada ou atualização que permite avançar.

    Para um cálculo com entradas, mantenha o teste de parada antes do processamento e decida como informar dados vazios. Essas verificações detectam tanto um laço preso quanto um resultado enganoso.

2

Deixe itens e sequências range conduzirem a repetição

13 passos
Visite valores diretamente, construa sequências range crescentes e decrescentes e compare um laço for de contagem com while.

Salve esta aula para seguir cada Lição Interativa passo a passo.

  1. 1
    IntroduçãoDê uma vez a cada item
  2. 2
    ExplicaçãoA variável contém o item atual
  3. 3
    ExemploCaracteres incluem espaços
  4. 4
    DesafioReatribua a variável do item
  5. 5
    ExplicaçãoComece em zero quando apenas o limite de parada for dado
  6. 6
    ExemploEscolha um passo e inspecione-o
  7. 7
    DicaValores decrescentes precisam de um passo negativo
  8. 8
    DesafioInclua o último valor necessário
  9. 9
    ConexãoAjuste a regra de parada à tarefa
  10. 10
    ExemploConverta uma contagem decrescente
  11. 11
    DesafioUma atribuição posterior não recria range
  12. 12
    DesafioConverta o limite e mantenha os dados
  13. 13
    RecapitulaçãoVerifique primeiro os valores fornecidos
3

Decida o que acontece após uma correspondência ou um salto

14 passos
Acompanhe break, continue e o else do laço em buscas e laços de entrada.

Salve esta aula para seguir cada Lição Interativa passo a passo.

  1. 1
    IntroduçãoTrês próximos passos diferentes
  2. 2
    ExplicaçãoBreak sai do laço que o contém
  3. 3
    ExemploLeia antes de uma saída no meio do corpo
  4. 4
    DesafioLocalize a saída
  5. 5
    ExplicaçãoContinue sai apenas desta passagem
  6. 6
    DicaUma atualização pulada pode prender um while
  7. 7
    Ideia-chavePass não pula nada
  8. 8
    DesafioPreveja três versões
  9. 9
    ExplicaçãoElse pertence ao laço
  10. 10
    Ideia-chaveZero passagens ainda terminam normalmente
  11. 11
    ConexãoRegistre o mesmo acontecimento explicitamente
  12. 12
    DesafioSucesso na última tentativa permitida
  13. 13
    DesafioCombine saltos com conclusão normal
  14. 14
    RecapitulaçãoTrace o destino de um salto
4

Construa e preserve o resultado de um laço

14 passos
Acompanhe uma média filtrada, uma busca pelo melhor valor e decisões sobre pelo menos um e todos.

Salve esta aula para seguir cada Lição Interativa passo a passo.

  1. 1
    IntroduçãoUm resultado permanece na próxima passagem
  2. 2
    ExplicaçãoConte e some o mesmo grupo
  3. 3
    ExemploConclua a média após a coleta
  4. 4
    Ideia-chaveOs valores iniciais correspondem à operação
  5. 5
    DesafioEncontre o erro de reinicialização
  6. 6
    ExplicaçãoUse o primeiro item como o primeiro melhor valor
  7. 7
    ExemploSalve onde o melhor valor ocorreu
  8. 8
    DesafioTrate empates e dados vazios
  9. 9
    ExplicaçãoUma variável sinalizadora de busca lembra um acontecimento
  10. 10
    ExemploA verificação de todos para em um contraexemplo
  11. 11
    DesafioMantenha o primeiro ou o último
  12. 12
    ConexãoEscolha o estado necessário para a tarefa
  13. 13
    DesafioDescreva um resultado filtrado vazio
  14. 14
    RecapitulaçãoDefina o resultado antes de escolher as atualizações
5

Construa linhas e controle uma busca com laços aninhados

11 passos
Rastreie reinícios internos, trabalho crescente, resultados por linha e uma saída dos dois laços.

Salve esta aula para seguir cada Lição Interativa passo a passo.

  1. 1
    IntroduçãoUma execução interna completa por passagem externa
  2. 2
    ExemploMantenha a linha fixa
  3. 3
    ExplicaçãoEncerre cada linha no nível externo
  4. 4
    Ideia-chaveConte o trabalho interno fixo e crescente
  5. 5
    DesafioReinicialize um resultado por linha
  6. 6
    ExplicaçãoUm break interno não interrompe as linhas
  7. 7
    ExemploLeve o sucesso à decisão externa
  8. 8
    DicaNão confunda variáveis finais com uma correspondência armazenada
  9. 9
    DesafioRemova uma saída
  10. 10
    DesafioCombine um filtro e um limite crescente
  11. 11
    RecapitulaçãoRastreie uma linha antes de multiplicar contagens
6

Rastreie um erro de limite até sua causa

10 passos
Registre atualizações em ordem, distinga verificações de passagens e corrija separadores na saída.

Salve esta aula para seguir cada Lição Interativa passo a passo.

  1. 1
    IntroduçãoTorne visível o trabalho real
  2. 2
    ExplicaçãoEscolha quando registrar cada valor
  3. 3
    ExemploAcompanhe as três atualizações
  4. 4
    DesafioMova o incremento
  5. 5
    DicaUse um print como ponto de rastreamento
  6. 6
    ExemploDeixe o zero revelar a passagem extra
  7. 7
    DesafioVerifique os dois extremos de uma contagem regressiva
  8. 8
    ExplicaçãoSepare itens dos espaços entre eles
  9. 9
    DesafioAvalie uma correção completa
  10. 10
    RecapitulaçãoVerifique os extremos pretendidos

Questões de Laços de repetição em Python

50 Questões de Prática em 5 conjuntos

Conjunto 1: Escolha limites e preserve resultados de busca10 Questões de Prática

Questão 1 de 10

O que acontece quando este programa é executado?

n = 1
for divisor in range(2, n):
    if n % divisor == 0:
        break
else:
    print("Prime")
  1. Ele não exibe nada porque a sequência range está vazia.
  2. Ele exibe Prime, classificando 1 incorretamente.
  3. Ele gera um erro porque range começa acima do limite.
  4. Ele encontra o divisor 1 e pula o bloco else.
Mostrar respostaOcultar resposta
Resposta: B
Para n igual a 1, a sequência range está vazia, o que é válido, e termina sem break. Portanto, o else do laço exibe “Prime”, embora números primos devam ser maiores ou iguais a 2. O programa precisa de uma verificação separada para números menores que 2 antes de usar essa busca por divisores.

Questão 2 de 10

O código usa posições numeradas a partir de 1. O que ele exibe?

largest = None
best_position = None
position = 0
for n in [9, 14, 6, 14, 8]:
    position += 1
    if largest is None or n >= largest:
        largest = n
        best_position = position
print(best_position)
  1. 2
  2. 5
  3. 3
  4. 4
Mostrar respostaOcultar resposta
Resposta: D
O primeiro 14 define a melhor posição como 2, e o 14 igual na posição 4 também satisfaz >=, substituindo essa posição por 4. O 8 final não a substitui. Um teste estrito de maior que manteria a posição 2, mas permitir igualdade mantém o último máximo empatado.

Questão 3 de 10

Uma verificação de que todos os valores são positivos começa com all_positive = True e muda para False, executando break, no primeiro valor n <= 0. Para [2, 7, 0, 9, -4], quais resultado e número de itens examinados ela fornece?
  1. False após 3 itens
  2. False após 5 itens
  3. True após 2 itens
  4. True após 3 itens
Mostrar respostaOcultar resposta
Resposta: A
Os dois primeiros valores são positivos, mas zero falha no teste de ser estritamente positivo. Esse terceiro item define a variável sinalizadora como falsa e aciona break, então os dois últimos valores não são examinados. Esperar por -4 trataria zero incorretamente como positivo.

Questão 4 de 10

Quantas estrelas este programa exibe no total?

for row in range(1, 6):
    for _ in range(row):
        print("*", end="")
    print()
  1. 10
  2. 15
  3. 20
  4. 25
Mostrar respostaOcultar resposta
Resposta: B
Os comprimentos internos são 1, 2, 3, 4 e 5, que somam 15 estrelas. Cada passagem externa fornece um comprimento de linha diferente, então a regra de multiplicação para comprimento fixo não se aplica. Um total de 25 suporia que todas as cinco linhas usassem o comprimento final de cinco.

Questão 5 de 10

Um laço deve somar todos os inteiros de 1 a 7. Qual sequência range deve fornecer seus valores?
  1. range(1, 7)
  2. range(0, 7)
  3. range(2, 8)
  4. range(1, 8)
Mostrar respostaOcultar resposta
Resposta: D
A sequência range deve começar em 1 e colocar seu limite de parada excluído logo após 7, então range(1, 8) fornece exatamente os inteiros necessários. O limite de parada 7 omitiria o último valor necessário. Começar em 0 com limite de parada 7 altera os dois extremos, embora também forneça sete números.

Questão 6 de 10

Um programa deve exibir os décimos de 0.0 até 1.0. Qual solução evita controlar o laço com adição repetida de ponto flutuante e igualdade exata?
  1. Comece x em 0.0 e repita até x == 1.0.
  2. Conte i de 0 até 10 e exiba i / 10.
  3. Comece x em 0.0 e repita enquanto x != 1.0.
  4. Conte i de 0 até 9 e exiba i / 10.
Mostrar respostaOcultar resposta
Resposta: B
Uma contagem de inteiros de 0 até 10 fornece onze passos definidos, e a divisão calcula cada décimo exibido independentemente. Adições repetidas de 0,1 podem não alcançar igualdade exata com 1,0 devido à aproximação de ponto flutuante. Terminar a contagem de inteiros em 9 omitiria o extremo necessário.

Questão 7 de 10

Qual linha final este programa exibe?

values = [4, 7]
for value in values:
    value *= 3
print(values)
  1. [12, 21]
  2. [21, 21]
  3. [4, 7, 21]
  4. [4, 7]
Mostrar respostaOcultar resposta
Resposta: D
Cada multiplicação reatribui a variável comum value; ela não substitui um item na lista original. Portanto, o print final mostra [4, 7]. Prever [12, 21] trataria a atribuição à variável do laço como uma atribuição à própria lista.

Questão 8 de 10

Qual sequência range fornece exatamente os inteiros maiores que -6 e menores ou iguais a 6 que são múltiplos de 3, em ordem decrescente?
  1. range(6, -6, -3)
  2. range(6, -7, -3)
  3. range(3, -6, -3)
  4. range(6, -3, -3)
Mostrar respostaOcultar resposta
Resposta: A
Os valores necessários são 6, 3, 0 e -3: 6 está incluído, mas -6 é excluído por “maiores que -6”. Um início de 6, limite de parada de -6 e passo de -3 fornecem exatamente esse conjunto em ordem. Mover o limite de parada para -7 incluiria -6 incorretamente.

Questão 9 de 10

Quantas vezes este laço exibe um valor?

limit = 4
for i in range(limit):
    limit = 1
    print(i)
  1. 1
  2. 3
  3. 4
  4. 5
Mostrar respostaOcultar resposta
Resposta: C
A sequência range é criada a partir do valor original 4 de limit, fornecendo 0, 1, 2 e 3. Alterar limit depois não recria essa sequência, então os quatro valores são exibidos. Uma única passagem seria possível com uma condição while que reavaliasse o limite alterado, mas este cabeçalho não faz isso.

Questão 10 de 10

Qual é o primeiro número exibido?

for n in range(32, 50):
    if n % 6 == 0:
        print(n)
        break
  1. 32
  2. 42
  3. 36
  4. 48
Mostrar respostaOcultar resposta
Resposta: C
O laço verifica inteiros a partir de 32, e 36 é o primeiro cujo resto da divisão por 6 é zero. Ele exibe 36 e sai imediatamente. Embora 42 e 48 também satisfaçam o teste, break impede que o laço chegue a essas correspondências posteriores.
Conjunto 2: Acompanhe os primeiros passos de um laço10 Questões de Prática

Salve esta aula para ver todas as respostas e praticar cada conjunto.

Questão 1 de 10

O que este programa exibe?

n = 0
while n > 0:
    print("Go")
    n -= 1
print("End")
  1. Go, depois End
  2. Apenas End
  3. Nada
  4. Go repetidamente
Mostrar respostaOcultar resposta

Salve esta aula para ver esta resposta.

Questão 2 de 10

Por que este laço continua exibindo valores?

n = 2
while n != 9:
    print(n)
    n += 2
  1. Ele visita todos os inteiros, mas pula o teste.
  2. Ele redefine n como 2 antes de cada comparação.
  3. Ele para de atualizar n após ultrapassar 9.
  4. Ele visita valores pares e nunca chega a 9.
Mostrar respostaOcultar resposta

Salve esta aula para ver esta resposta.

Questão 3 de 10

Um laço lê notas não negativas e usa -1 para parar. As entradas são 12, 0, 18, -1. Qual média ele deve informar, excluindo o valor sentinela?
  1. 10.0
  2. 7.25
  3. 15.0
  4. 9.666666666666666
Mostrar respostaOcultar resposta

Salve esta aula para ver esta resposta.

Questão 4 de 10

Quantas vezes o corpo deste laço é executado?

for ch in "up! ":
    print(ch)
  1. 2
  2. 3
  3. 4
  4. 5
Mostrar respostaOcultar resposta

Salve esta aula para ver esta resposta.

Questão 5 de 10

Quais valores list(range(3, 12, 4)) contém?
  1. [3, 7]
  2. [3, 7, 11]
  3. [3, 7, 11, 15]
  4. [4, 8, 12]
Mostrar respostaOcultar resposta

Salve esta aula para ver esta resposta.

Questão 6 de 10

Uma exibição deve mostrar 8, 6, 4, 2, 0 nessa ordem. Qual sequência range fornece exatamente esses valores?
  1. range(8, -1, -2)
  2. range(8, 0, -2)
  3. range(8, -2, 2)
  4. range(8, 1, -2)
Mostrar respostaOcultar resposta

Salve esta aula para ver esta resposta.

Questão 7 de 10

O que este programa exibe?

for n in [5, 11, 14, 18]:
    if n % 2 == 0:
        print(n)
        break
print("Finished")
  1. 14, depois 18, depois Finished
  2. 5, depois Finished
  3. Apenas 14
  4. 14, depois Finished
Mostrar respostaOcultar resposta

Salve esta aula para ver esta resposta.

Questão 8 de 10

O que este programa exibe?

count = 0
for amount in [6, 13, 9, 17]:
    if amount >= 10:
        count += 1
print(count)
  1. 4
  2. 30
  3. 2
  4. 17
Mostrar respostaOcultar resposta

Salve esta aula para ver esta resposta.

Questão 9 de 10

Quantas vezes o print interno é executado?

for row in range(2):
    for col in range(5):
        print("seat")
  1. 10
  2. 7
  3. 5
  4. 25
Mostrar respostaOcultar resposta

Salve esta aula para ver esta resposta.

Questão 10 de 10

Quais são os valores finais de i e total?

i = 1
total = 0
while i < 5:
    i += 1
    total += i
  1. i é 4; total é 10.
  2. i é 5; total é 14.
  3. i é 5; total é 10.
  4. i é 6; total é 20.
Mostrar respostaOcultar resposta

Salve esta aula para ver esta resposta.

Conjunto 3: Mantenha entradas e resultados sob controle10 Questões de Prática

Salve esta aula para ver todas as respostas e praticar cada conjunto.

Questão 1 de 10

O que este programa exibe?

n = 1
while n > 0:
    n -= 1
    print("Inside")
print(n)
  1. Apenas 0
  2. Apenas Inside
  3. Inside, depois 0
  4. Inside repetidamente
Mostrar respostaOcultar resposta

Salve esta aula para ver esta resposta.

Questão 2 de 10

Uma resposta em texto deve ser exatamente “yes” ou “no”. Qual condição while pergunta novamente para cada resposta inaceitável e para para qualquer uma das aceitáveis?
  1. answer != "yes" and answer != "no"
  2. answer != "yes" or answer != "no"
  3. answer == "yes" or answer == "no"
  4. answer == "yes" and answer == "no"
Mostrar respostaOcultar resposta

Salve esta aula para ver esta resposta.

Questão 3 de 10

Quantos itens range(7, 2) fornece?
  1. 2
  2. 5
  3. 6
  4. 0
Mostrar respostaOcultar resposta

Salve esta aula para ver esta resposta.

Questão 4 de 10

O que este programa exibe?

for n in [2, 5, 8]:
    if n == 5:
        continue
    print(n)
  1. Apenas 2
  2. 2, depois 8
  3. 2, depois 5, depois 8
  4. Apenas 8
Mostrar respostaOcultar resposta

Salve esta aula para ver esta resposta.

Questão 5 de 10

O que este programa exibe?

for n in []:
    if n == 7:
        break
else:
    print("Absent")
  1. Absent uma vez
  2. Nada
  3. Absent sete vezes
  4. Uma mensagem TypeError
Mostrar respostaOcultar resposta

Salve esta aula para ver esta resposta.

Questão 6 de 10

Qual valor inicial permite que este laço multiplique 2, 3 e 4 corretamente?

product = ___
for n in [2, 3, 4]:
    product *= n
print(product)
  1. 0
  2. 2
  3. 1
  4. 24
Mostrar respostaOcultar resposta

Salve esta aula para ver esta resposta.

Questão 7 de 10

Uma busca de máximo começa com largest = 0 e o substitui somente quando um item é maior. Qual valor ela informa incorretamente para [-8, -3, -6]?
  1. -8
  2. -6
  3. -3
  4. 0
Mostrar respostaOcultar resposta

Salve esta aula para ver esta resposta.

Questão 8 de 10

Esta busca não tem break. O que ela exibe e por quê?

found = False
for label in ["East", "West", "North"]:
    if label == "West":
        found = True
    else:
        found = False
print(found)
  1. True, porque uma variável verdadeira não pode mudar depois.
  2. False, porque o último item sem correspondência reinicializa a variável.
  3. False, porque West não é o primeiro item.
  4. True, porque o laço para no rótulo correspondente.
Mostrar respostaOcultar resposta

Salve esta aula para ver esta resposta.

Questão 9 de 10

Quantos pares são exibidos?

for a in range(3):
    for b in range(4):
        if b == 2:
            break
        print(a, b)
  1. 2
  2. 9
  3. 6
  4. 12
Mostrar respostaOcultar resposta

Salve esta aula para ver esta resposta.

Questão 10 de 10

Um contador começa com i igual a 0. O laço usa while i <= n: e soma 1 no fim de cada passagem, sem saída antecipada. Para cada inteiro não negativo n, quantas execuções do corpo ocorrem?
  1. n + 1
  2. n
  3. n - 1
  4. 2n
Mostrar respostaOcultar resposta

Salve esta aula para ver esta resposta.

Conjunto 4: Rastreie atualizações, filtros e saídas de laços aninhados10 Questões de Prática

Salve esta aula para ver todas as respostas e praticar cada conjunto.

Questão 1 de 10

Os valores de texto inseridos são “6”, “4”, “stop”. O que este programa exibe após as mensagens de solicitação de entrada?

total = 0
while True:
    text = input("Amount or stop: ")
    if text == "stop":
        break
    total += int(text)
print(total)
  1. 4
  2. Uma mensagem ValueError
  3. 10
  4. 6
Mostrar respostaOcultar resposta

Salve esta aula para ver esta resposta.

Questão 2 de 10

O que este programa exibe antes de ficar preso?

i = 0
while i < 4:
    if i == 1:
        continue
    print(i)
    i += 1
  1. 0, depois 1
  2. Apenas 0
  3. 0, depois 2, depois 3
  4. Nada
Mostrar respostaOcultar resposta

Salve esta aula para ver esta resposta.

Questão 3 de 10

O que este programa exibe?

for n in [3, 8, 5]:
    total = 0
    total += n
print(total)
  1. 16
  2. 13
  3. 0
  4. 5
Mostrar respostaOcultar resposta

Salve esta aula para ver esta resposta.

Questão 4 de 10

O que este programa exibe?

match = None
for n in [9, 12, 7, 16, 5]:
    if n % 4 == 0:
        match = n
print(match)
  1. 12
  2. 5
  3. 16
  4. None
Mostrar respostaOcultar resposta

Salve esta aula para ver esta resposta.

Questão 5 de 10

Quantos pares são exibidos?

for a in range(1, 4):
    for b in range(1, 4):
        if a == b:
            continue
        print(a, b)
  1. 6
  2. 3
  3. 9
  4. 2
Mostrar respostaOcultar resposta

Salve esta aula para ver esta resposta.

Questão 6 de 10

Qual é o valor final de total?

total = 0
for n in range(2, 7):
    if n == 4:
        continue
    total += n
    if total > 9:
        break
  1. 5
  2. 14
  3. 16
  4. 10
Mostrar respostaOcultar resposta

Salve esta aula para ver esta resposta.

Questão 7 de 10

Uma exibição tem 6 valores em uma linha com uma vírgula apenas entre valores vizinhos. Quantas vírgulas ela deve exibir?
  1. 6
  2. 5
  3. 7
  4. 4
Mostrar respostaOcultar resposta

Salve esta aula para ver esta resposta.

Questão 8 de 10

Quantas vezes o corpo é executado e qual é o valor final de amount?

amount = 3
while amount < 40:
    amount *= 2
  1. 3 passagens; amount é 24.
  2. 4 passagens; amount é 40.
  3. 5 passagens; amount é 96.
  4. 4 passagens; amount é 48.
Mostrar respostaOcultar resposta

Salve esta aula para ver esta resposta.

Questão 9 de 10

Primeiro, é inserido um inteiro não negativo. O laço abaixo deve rejeitar valores fora do intervalo de 2 a 8, aceitando ambos os extremos. O que há de errado com sua condição?

value = int(input("Value: "))
while value < 2 and value > 8:
    value = int(input("Value: "))
  1. Ela aceita apenas os extremos; substitua < por <=.
  2. Ela não rejeita nada; substitua and por or.
  3. Ela rejeita todos os valores; substitua and por or.
  4. Ela omite a última leitura; mova a entrada para antes do while.
Mostrar respostaOcultar resposta

Salve esta aula para ver esta resposta.

Questão 10 de 10

Quantas vogais este laço conta?

count = 0
for ch in "Orbit":
    if ch in "aeiou":
        count += 1
print(count)
  1. 1
  2. 2
  3. 0
  4. 5
Mostrar respostaOcultar resposta

Salve esta aula para ver esta resposta.

Conjunto 5: Combine padrões de laços e teste os casos extremos10 Questões de Prática

Salve esta aula para ver todas as respostas e praticar cada conjunto.

Questão 1 de 10

Uma tarefa exige todos os valores ímpares abaixo de 20 a partir de 3. Este código nunca para. Qual correção preserva os valores que devem ser exibidos?

n = 3
while n != 20:
    print(n)
    n += 2
  1. Use while n <= 21:.
  2. Altere o valor inicial para 2.
  3. Use while n < 20:.
  4. Altere a atualização para n += 1.
Mostrar respostaOcultar resposta

Salve esta aula para ver esta resposta.

Questão 2 de 10

Um usuário insere um inteiro n, e um programa deve exibir “Ready” exatamente n vezes para n não negativo. Qual cabeçalho de laço expressa diretamente essa contagem?
  1. for _ in range(n):
  2. while n >= 0:
  3. for _ in n:
  4. for _ in range(n + 1):
Mostrar respostaOcultar resposta

Salve esta aula para ver esta resposta.

Questão 3 de 10

Ambos os laços exibem 4, 2. Quais valores finais suas variáveis dos laços têm?

for a in range(4, 0, -2):
    print(a)
b = 4
while b > 0:
    print(b)
    b -= 2
  1. a é 0; b é 0.
  2. a é 2; b é 2.
  3. a é 0; b é -2.
  4. a é 2; b é 0.
Mostrar respostaOcultar resposta

Salve esta aula para ver esta resposta.

Questão 4 de 10

Neste laço, o que é exibido?

for n in [3, 6, 9]:
    if n == 6:
        pass
    print(n)
  1. 3, depois 9
  2. 3, depois 6, depois 9
  3. Apenas 3
  4. Apenas 6
Mostrar respostaOcultar resposta

Salve esta aula para ver esta resposta.

Questão 5 de 10

O usuário insere “bad”, “bad” e depois “key”. Qual mensagem é exibida após essas solicitações de entrada?

attempts = 0
while attempts < 3:
    guess = input("Code: ")
    if guess == "key":
        print("Open")
        break
    attempts += 1
else:
    print("Locked")
  1. Apenas Locked
  2. Open, depois Locked
  3. Nada
  4. Apenas Open
Mostrar respostaOcultar resposta

Salve esta aula para ver esta resposta.

Questão 6 de 10

Um programa deve manter o primeiro dia com a temperatura mais alta. A numeração dos dias começa em 1. Qual comparação deve substituir o espaço em branco?

highest = None
best_day = None
day = 0
for temp in [-4, -1, -1, -3]:
    day += 1
    if highest is None or ___:
        highest = temp
        best_day = day
  1. temp > highest
  2. temp >= highest
  3. temp < highest
  4. temp <= highest
Mostrar respostaOcultar resposta

Salve esta aula para ver esta resposta.

Questão 7 de 10

O que este programa exibe em duas linhas?

total = 0
for row in range(1, 3):
    for col in range(1, 4):
        total += row * col
    print(total)
  1. 6, depois 12
  2. 6, depois 18
  3. 18, depois 18
  4. 1, depois 4
Mostrar respostaOcultar resposta

Salve esta aula para ver esta resposta.

Questão 8 de 10

O que esta busca com laços aninhados exibe?

found = False
for a in range(1, 5):
    for b in range(1, 5):
        if a + b == 7:
            found = True
            break
    if found:
        break
print(a, b)
  1. 4 3
  2. 4 4
  3. 3 4
  4. 1 4
Mostrar respostaOcultar resposta

Salve esta aula para ver esta resposta.

Questão 9 de 10

Qual texto este programa exibe?

text = ""
for ch in "lamp":
    if ch == "a":
        continue
    text = ch + text
print(text)
  1. pml
  2. lmp
  3. pmal
  4. mlp
Mostrar respostaOcultar resposta

Salve esta aula para ver esta resposta.

Questão 10 de 10

Qual média este programa exibe?

total = 0
count = 0
for n in [3, 11, -1, 14, 6, 20]:
    if n <= 8:
        continue
    total += n
    count += 1
    if count == 2:
        break
if count > 0:
    print(total / count)
  1. 6.25
  2. 15.0
  3. 12.5
  4. 25.0
Mostrar respostaOcultar resposta

Salve esta aula para ver esta resposta.

Travou em uma questão sua? Ajuda com Tarefas

Termos-Chave

66 Termos-Chave, cada um com sua definição

A

Acumulador
Um acumulador é uma variável que preserva e atualiza um resultado ao longo das iterações, como uma soma, um produto ou um texto.
O acumulador total mantém as adições anteriores quando a próxima medição chega.
Acumulador de produto
Um acumulador de produto multiplica fatores selecionados em um resultado armazenado e normalmente começa em um para preservar o primeiro fator.
Um acumulador de produto que começa em um resulta em 24 após multiplicar 2, 3 e 4.
Acumulador por linha
Um acumulador por linha constrói um resultado para uma iteração externa e é reinicializado antes que o trabalho interno dessa iteração comece.
O acumulador por linha começa novamente para a linha 2 para que sua soma não inclua a linha 1.
Aproximação de ponto flutuante
Uma aproximação de ponto flutuante armazena muitas frações decimais como valores binários próximos, então adições repetidas podem não atingir uma meta exata.
A aproximação de ponto flutuante torna pouco confiável uma parada por igualdade exata após adições repetidas de 0,1.
Atribuição aumentada
Atribuição aumentada combina uma operação e uma atribuição, substituindo uma variável por seu valor atualizado.
A atribuição aumentada total += n soma o número atual ao subtotal armazenado.
Avaliação de curto-circuito
A avaliação de curto-circuito pula a parte posterior de uma expressão booleana quando o resultado já foi determinado pela parte anterior.
A avaliação de curto-circuito de or evita comparar um primeiro item numérico com None.

B

Busca com laços aninhados
Uma busca com laços aninhados verifica combinações usando um laço dentro de outro e pode manter uma variável sinalizadora de busca entre os dois níveis.
A busca com laços aninhados usa dois breaks para interromper os dois laços em seu primeiro par bem-sucedido.
Busca linear
Uma busca linear examina os itens um por um na ordem da sequência até encontrar a correspondência necessária ou esgotar os itens.
Uma busca linear pelo primeiro valor par em uma lista mista para assim que chega a um, como 8.

C

Caso limite
Um caso limite testa um extremo do trabalho pretendido de um laço, como zero itens, um item ou seu último valor incluído.
O caso limite n igual a zero revela a passagem extra causada pelo teste i <= n.
Cláusula else do laço
Uma cláusula else do laço é um bloco executado após a conclusão normal do laço e pulado quando esse laço termina por meio de break.
O else do laço exibe uma mensagem de falha após todos os candidatos terem sido verificados sem correspondência.
Conclusão normal
Conclusão normal encerra um laço for pelo esgotamento de seus itens ou um laço while por uma condição falsa, sem executar break.
A conclusão normal de um laço for vazio ainda alcança seu bloco else.
Contador
Um contador é um acumulador que aumenta em um cada vez que ocorre determinado evento ou item aceito.
O contador aumenta apenas para notas acima do valor limiar selecionado, não para cada entrada.
Conversão de tipo
Conversão de tipo transforma um valor em outro tipo, como converter texto numérico de entrada em um inteiro com int.
A conversão de tipo permite que o laço compare a string inserida “0” com um valor sentinela inteiro.
Corpo do laço
Um corpo do laço é o bloco indentado de instruções repetido para cada item ou verificação bem-sucedida da condição.
Em um laço de contagem regressiva, o corpo do laço contém tanto o print quanto a atualização que faz a contagem avançar em direção a zero.
Correspondência
Uma correspondência é um item que satisfaz uma condição de busca, que pode exigir igualdade ou outra propriedade, como divisibilidade.
Quando 18 é o primeiro número fornecido divisível por 6, a correspondência 18 é salva.
Correspondência armazenada
Uma correspondência armazenada é um registro separado de um candidato bem-sucedido que permanece disponível enquanto as variáveis atuais dos laços mudam.
Uma correspondência armazenada de 3 e 4 ainda contém esses valores mesmo depois que a busca passa a examinar pares posteriores.

E

Empate
Um empate ocorre quando vários itens têm o mesmo melhor valor, então uma busca de posição precisa escolher entre o primeiro e o último.
O empate entre duas notas de 12 mantém a posição anterior com um teste estrito de maior que.
Erro de contagem de limites
Um erro de contagem de limites confunde contagens de itens com contagens de limites ou espaços entre eles, como separadores entre valores exibidos.
Um erro de contagem de limites exibe seis vírgulas após seis valores quando apenas cinco vírgulas internas são necessárias.
Erro de uma unidade
Um erro de uma unidade produz uma passagem a mais ou a menos, ou desloca o primeiro ou o último valor pretendido em uma unidade.
Um erro de uma unidade deixa 10 de fora quando uma soma usa range(1, 10).

F

Filtragem
Filtragem seleciona itens que atendem a uma condição para que apenas eles recebam determinado processamento ou contribuam para um resultado.
Filtrar valores negativos permite que o laço some apenas as medições aceitas.

I

Impressão de diagnóstico
Uma impressão de diagnóstico é uma instrução de saída temporária usada para inspecionar o estado do programa em um ponto escolhido da execução.
Uma impressão de diagnóstico após as atualizações mostra o contador e o total no fim da passagem.
Inicialização
Inicialização atribui a uma variável seu valor inicial antes que um cálculo ou processo repetido a utilize.
A inicialização define o contador como zero antes que qualquer valor correspondente seja contado.
Início
O início de uma sequência range é seu primeiro inteiro candidato; seu valor padrão é zero quando apenas o limite de parada é fornecido.
Um início de 3 faz range(3, 8) começar em 3 em vez do zero padrão.
Instrução break
Break é uma instrução Python que encerra imediatamente o laço mais interno que a contém e pula o restante de seu corpo e de suas iterações.
Break encerra a busca assim que o primeiro valor que atende à condição é exibido.
Instrução continue
Continue é uma instrução Python que pula as instruções restantes da iteração atual e prossegue para a próxima.
Continue pula a adição para um valor negativo, deixando os valores posteriores para serem examinados.
Instrução pass
Pass é uma instrução Python que não realiza nenhuma ação e pode ocupar um bloco em que uma instrução é exigida.
Pass preenche um corpo if inacabado, mas o print após esse if ainda é executado.
Iteração
Uma iteração é uma passagem pelo corpo de um laço, durante a qual as instruções do caminho executado são realizadas em ordem.
Cada iteração de um laço de contagem regressiva exibe um número antes de atualizar a contagem restante.

K

KeyboardInterrupt
KeyboardInterrupt é a interrupção que o Python normalmente informa quando um usuário para a execução no terminal com Ctrl+C.
Interromper um laço preso no terminal com Ctrl+C produz KeyboardInterrupt e um rastreamento de exceção.

L

Laço aninhado
Um laço aninhado é um laço colocado dentro do corpo de outro, permitindo que o trabalho interno se repita para cada item externo.
Um laço aninhado exibe um conjunto separado de colunas para cada linha da grade de multiplicação.
Laço controlado por sentinela
Um laço controlado por sentinela repete o processamento de entradas até encontrar um valor designado que significa parar.
Um laço controlado por sentinela pode coletar um número desconhecido de medições positivas.
Laço de contagem
Um laço de contagem visita valores numéricos sucessivos usando um valor inicial, um teste de limite e um passo.
Um laço de contagem que começa em 10 e avança com passo de -2 visita 10, 8, 6, 4 e 2, seja expresso com for ou while.
Laço de repetição
Um laço de repetição repete um bloco de instruções de acordo com uma condição ou uma sequência de itens que fornece o trabalho.
Um laço de contagem regressiva exibe um valor e o diminui antes de decidir se deve repetir.
Laço de repetição definida
Um laço de repetição definida tem uma sequência definida de itens ou uma contagem de repetições, mesmo quando essa contagem é calculada durante a execução.
Um laço de repetição definida repete a saudação n vezes após n ter sido lido do usuário.
Laço de repetição indefinida
Um laço de repetição indefinida se repete de acordo com uma condição cujo ponto de parada não é dado como uma contagem fixa de repetições.
Um laço de repetição indefinida coleta mensagens até que o usuário digite a palavra de parada escolhida.
Laço de validação de entrada
Um laço de validação de entrada repete uma solicitação enquanto a resposta fornecida não satisfizer as condições de um valor aceitável.
Um laço de validação de entrada pergunta novamente quando um número de menu informado está fora do intervalo de 1 a 4.
Laço externo
Um laço externo envolve outro laço e controla qual grupo ou linha o laço interno processa em cada execução.
O laço externo mantém row fixo enquanto o laço interno visita cada coluna dessa linha.
Laço for
Um laço for atribui itens sucessivos de uma sequência a uma variável e executa seu corpo para cada item fornecido.
Um laço for visita as notas registradas em ordem e exibe o dobro de cada valor atual.
Laço infinito
Um laço infinito se repete sem alcançar uma saída por sua condição ou por outra instrução de controle.
Um laço sem sua atualização se torna um laço infinito que continua exibindo o mesmo número positivo.
Laço interno
Um laço interno fica dentro do corpo de outro laço e inicia uma nova execução cada vez que a execução alcança seu cabeçalho.
O laço interno recomeça na coluna 1 quando a grade de multiplicação avança para uma nova linha.
Laço mais interno
O laço mais interno é o laço envolvente mais próximo que contém uma instrução e é o laço afetado por break ou continue.
O laço mais interno passa para sua próxima coluna quando seu corpo executa continue.
Laço while
Um laço while testa uma condição antes de cada passagem e repete seu corpo indentado enquanto a condição for verdadeira.
Um laço while pode continuar dobrando uma quantidade até que ela atinja um mínimo necessário.
Laço while True
Um laço while True tem um cabeçalho sempre verdadeiro e depende de uma instrução de controle em seu corpo para sair quando necessário.
Um laço while True lê uma linha, testa o valor sentinela e exibe apenas dados reais.
Leitura inicial
Uma leitura inicial obtém a primeira entrada antes de um laço para que sua condição inicial tenha um valor a examinar.
A leitura inicial permite que um valor de parada imediato pule inteiramente o corpo de processamento de dados.
Limite de parada
O limite de parada de uma sequência range é seu limite excluído, que restringe os valores fornecidos na direção de seu passo.
Um limite de parada de 11 permite que range(1, 11) inclua 10 como seu último valor fornecido.

M

Máximo
Um máximo é o maior valor em um conjunto de dados; um laço pode encontrá-lo preservando o maior valor encontrado até o momento.
O máximo de -8, -3 e -6 é -3, embora todos os candidatos estejam abaixo de zero.
Média aritmética
Uma média, aqui, é a média aritmética, obtida dividindo a soma dos valores selecionados pelo número desses valores.
A média das notas correspondentes usa sua contagem, excluindo entradas rejeitadas e o valor sentinela.
Mínimo
Um mínimo é o menor valor em um conjunto de dados; um laço substitui seu valor armazenado sempre que um item menor aparece.
A temperatura mínima passa a ser -7 quando essa leitura é menor que o melhor valor armazenado.

N

None
None é o valor especial do Python para ausência de valor, usado em um laço de melhor valor para marcar que nenhum item foi visto ainda.
None permanece como o melhor valor armazenado quando o laço de busca de máximo recebe uma lista vazia.

P

Par ordenado
Um par ordenado registra dois valores com papéis distintos de primeiro e segundo, então invertê-los pode descrever outro resultado.
O par ordenado (2, 5) para dois dados difere de (5, 2) porque o primeiro dado muda.
Passo
O passo de uma sequência range é a variação inteira diferente de zero entre valores consecutivos fornecidos; seu valor padrão é um positivo.
Um passo de -2 faz range(8, 0, -2) visitar valores pares decrescentes.

R

Rastreamento
Rastreamento acompanha o código instrução por instrução, registrando mudanças e caminhos executados para prever seus valores e sua saída.
O rastreamento mostra que incrementar antes de somar desloca cada valor usado na soma.

S

Saída antecipada
Uma saída antecipada deixa um laço antes de seu fim normal, como quando uma busca executa break após encontrar uma correspondência.
Em um laço que procura um múltiplo de um número, uma saída antecipada evita examinar números posteriores depois que o primeiro múltiplo é encontrado.
Separador
Um separador é um texto colocado entre itens adjacentes da saída; uma sequência não vazia de n itens precisa preencher n - 1 espaços desse tipo.
Exibir um separador antes de cada item posterior evita deixar um hífen extra após o último.
Sequência
Uma sequência é uma coleção ordenada de itens, como os caracteres de uma string ou os valores de uma lista.
A sequência “a b” fornece três caracteres, incluindo o espaço entre as letras.
Sequência range
Uma sequência range descreve inteiros igualmente espaçados usando um início, um limite de parada excluído e um passo diferente de zero, sem construir uma lista completa.
A sequência range range(2, 11, 2) fornece cinco valores pares de 2 a 10.
Sequência range vazia
Uma sequência range vazia não fornece valores porque nenhum valor inicial satisfaz seu limite na direção de seu passo.
A sequência range vazia range(5, 1) não dá trabalho ao corpo de um laço for e não gera erro.

T

Tabela de rastreamento
Uma tabela de rastreamento registra estados de variáveis ao longo das passagens de um laço, com colunas identificadas para indicar quando os valores são observados.
A tabela de rastreamento separa i antes do corpo de i após o incremento.
Término
Término é o fim da execução de um laço, alcançado quando a repetição para por uma condição falsa ou uma instrução de saída.
O término de um laço de contagem regressiva ocorre depois que a atualização torna falsa a próxima verificação da condição.
Teste de pertencimento
Um teste de pertencimento verifica se um valor ocorre em uma sequência e produz um resultado booleano usando in.
O teste de pertencimento ch in "aeiou" decide se deve aumentar um contador de vogais.
Total acumulado
Um total acumulado é a soma acumulada em determinada etapa do processamento, antes do item final ou nele.
Exibir o total acumulado dentro do corpo mostra como cada item altera o subtotal.

V

Valor final
Um valor final é o valor que uma variável contém após o término do laço, que pode diferir do último valor exibido.
Quando um laço de contagem exibe i e para assim que i chega a 5, o valor final de i é 5, embora o último valor exibido tenha sido 4.
Valor sentinela
Um valor sentinela é um valor de entrada especial que sinaliza o fim dos dados e é mantido separado dos itens de dados reais.
O valor sentinela -1 encerra a coleta de notas, permitindo que zero continue sendo uma nota válida.
Variável do laço
Uma variável do laço contém o item atual atribuído por um laço for e pode ser usada por instruções em seu corpo.
A variável do laço score contém uma nota de cada vez, enquanto scores nomeia a lista inteira.
Variável sinalizadora
Uma variável sinalizadora é uma variável booleana que registra se um evento ou condição ocorreu para decisões posteriores.
A variável sinalizadora found permanece True após uma correspondência para que o programa possa informar sucesso após a busca.
Verificação de pelo menos um
Uma verificação de pelo menos um pergunta se ao menos um item passa em uma condição e pode terminar com sucesso assim que um passar.
A verificação de pelo menos um muda sua variável sinalizadora para True na primeira nota acima do mínimo exigido.
Verificação de todos
Uma verificação de todos pergunta se cada item passa em uma condição e pode terminar sem sucesso na primeira falha.
A verificação de todos para em zero ao testar se cada valor registrado é positivo.

Sobre esta aula

Por StudeliRelatar um erro

Crie seus próprios Materiais de Estudo

Transforme suas anotações, slides e documentos em Guias de Estudo, Questões de Prática, Flashcards e mais 6 ferramentas.

Começar