Estruturas de Controle e Laços de Repetição#
Vamos mergulhar em uma das partes mais importantes da programação em Python: as estruturas de controle e laços de repetição!
Usamos esses conceitos para controlar o fluxo de execução do nosso programa.
O que veremos?
Estruturas de controle:
if
(condição),else
(caso contrário) eelif
(caso específico).Laços de repetição
for
(laço de iteração) e owhile
(laço de condição).Operadores de atribuição, comparação e de lógica Booleana.
Objetivos de Aprendizagem
Ao final desta aula, você será capaz de: Aqui está a lista resumida em quatro bullet points:
Compreender estruturas condicionais (
if
,elif
,else
) e seu papel na tomada de decisões.Explorar laços de repetição (
for
ewhile
para automatizar tarefas repetitivas.Diferenciar o uso de
for
ewhile
, evitando loops infinitos e aplicando boas práticas.Explorar expressões booleanas e operadores lógicos (and, or, not).
Aplicar esses conceitos na resolução de problemas práticos, como validação de entrada e contagem de valores.
Operadores de relacionais ou de comparação#
Os operadores relacionais ou de comparação em Python são utilizados para comparar dois valores e retornam um resultado booleano (True
ou False
).
Os principais operadores de comparação são: igualdade (==
), diferença (!=
), maior (>
), menor (<
), maior ou igual (>=
) e menor ou igual (<=
). Esses operadores são amplamente utilizados em verificações lógicas, filtragem de dados e controle de fluxo dentro do código
42 == 42
3 == 4
2 != 3
"dog" != "cat"
"hello" == "hello"
"hello" == "Hello" # Case sensitive
42 > 0
42 < 0
42 >= 40
42 <= 43
num_participantes = 100
num_participantes >= 50
Operadores Lógicos#
Em Python, existem três operadores lógicos fundamentais que nos ajudam a conectar duas expressões e obter um resultado booleano. Esses operadores são semelhantes aos operadores aritméticos, mas com uma diferença importante: em vez de retornar números ou até mesmo strings, eles apenas oferecem dois resultados possíveis - verdadeiro (True) ou falso (False). São eles:
and
(e lógico)or
(ou lógico)not
(não)
# Avalie o resultado da expressão abaixo
(4 < 5) and (5 < 6)
Vamos ver no passo-a-passo:
(4 < 5) and (5 < 6)
True and (5 < 6)
True and True
True
(2 < 5) and (9 < 6)
(1 == 3) or (2 == 2)
idade = int(input("Digite sua idade: "))
eh_maior_de_idade = idade >= 18
print("Idade do usuário: ", idade)
print("Maior de idade? ", eh_maior_de_idade)
Tabela Verdade para Operadores and
, or
:
A |
B |
A |
A |
|
---|---|---|---|---|
0 |
False |
False |
False |
False |
1 |
False |
True |
False |
True |
2 |
True |
False |
False |
True |
3 |
True |
True |
True |
True |
not (1 == 2)
not (1 == 1)
arquivo_existe = False
print("O arquivo exite? ", not arquivo_existe)
Precedência de operadores lógicos#
Nos operadores aritméticos seguimos a ordem: parênteses, potenciação, multiplicação/divisão/módulo, adição/subtração da esquerda para a direita. Enquanto isso, nos operadores lógicos seguimos a seguinte ordem:
Parênteses
;not
;and
;or
.
📖 Exercício 1: avalie as expressões abaixo.
(10 % 2 == 0) and (2 > 1)
2 + 2 == 4 and not 2 + 2 == 5 and 2 * 2 == 2 + 2
# Adicione suas respostas aqui
# Adicione suas respostas aqui
Resumo de operadores de comparação e lógicos em Python#
Operadores de igualdade:
==
(igual a)!=
(não igual a)
Operadores de desigualdade:
<
(menor que)>
(maior que)<=
(menor ou igual a)>=
(maior ou igual a)
Operadores lógicos:
and
(e, lógico e AND)or
(ou, lógico OU)not
(não, lógico NOT)
Estruturas condicionais#
O comando if
em Python é utilizado para criar estruturas condicionais, permitindo que um bloco de código seja executado apenas se uma determinada condição for verdadeira. Ele é essencial para a tomada de decisões dentro de um programa.
Sintaxe: uma expressão lógica seguida de dois pontos (:
), e o bloco de código associado deve ser indentado corretamente. Em alguns casos, podem ser utilizados os comandos elif
(para testar condições adicionais) e else
(para definir uma ação caso nenhuma das condições anteriores seja atendida).
if 10 % 2 == 0:
print("10 é par")
hoje_e_domingo = False
if hoje_e_domingo == True:
print('Hoje é domingo')
else:
print('Hoje nao é domingo')
Dica: Uma maneira melhor de escrever o código acima é omitir a parte == True
:
hoje_e_domingo = False
if hoje_e_domingo:
print('Hoje é domingo')
else:
print('Hoje nao é domingo')
temperatura = 30
prob_chuva = 0.9
print("O dia será: ")
if temperatura >= 30:
print("Quente")
if prob_chuva > 0.7:
print("Com pancadas de chuva")
if temperatura >= 30 and prob_chuva > 0.8:
print("Muito abafado")
Importante: Na prática, não importa o que seja colocado dentro da área de condições, desde que o resultado seja um booleano (True
ou False
).
idade = int(input("Digite sua idade: "))
if idade >= 18:
print("Você é maior de idade.") # Executado se a condição for verdadeira
else:
print("Você é menor de idade.") # Executado se a condição for falsa
print("Idade do usuário: ", idade)
Exemplo de controle de acesso: Neste exemplo, vamos implementar uma verificação simples de permissão de usuário. Dependendo do tipo do usuário, (administrador, técnico, ou operador normal), diferentes permissões serão exibidas.
# Definimos o perfil do usuário logado
perfil_usuario = 'tecnico'
# Verificamos o perfil do usuário
if perfil_usuario == 'admin':
print('Usuário: Administrador')
print('Você tem acesso total ao sistema de produção')
elif perfil_usuario == 'tecnico': # Se for técnico
print('Usuário: Técnico de Manutenção')
print('Você tem acesso para realizar manutenções')
elif perfil_usuario == "operador_normal": # Se for um operador normal
print('Usuário: Operador Normal')
print('Você tem acesso para operar as máquinas')
else: # Se não for nenhum dos casos acima
print('Usuário: Visitante')
print('Você está sem acesso')
Exercício 2: Implemente um algoritmo que dada a idade de um nadador (lida do teclado) imprime a categoria na qual ele está:
infantil A = 5 - 7 anos
infantil B = 8-10 anos
juvenil A = 11-13 anos
juvenil B = 14-17 anos
adulto = maiores de 18 anos
# Adicione suas respostas aqui
Estruturas de laço de repetição#
Os laços de repetição em Python são estruturas fundamentais para a automação de tarefas repetitivas dentro de um programa. Eles permitem a execução de um bloco de código múltiplas vezes, reduzindo a necessidade de comandos redundantes.
Python oferece dois tipos principais de laços: o for
, utilizado para percorrer sequências como listas, strings e intervalos numéricos, e o while
, que executa um bloco de código enquanto uma determinada condição lógica permanecer verdadeira.
While loop#
O comando while
em Python é uma estrutura de repetição que executa um bloco de código enquanto uma determinada condição for verdadeira. Ele é amplamente utilizado quando o número exato de iterações não é conhecido previamente, permitindo a repetição baseada em uma expressão lógica.
contador = 10
while contador > 0:
print(contador)
contador = contador - 1
Operadores de atribuição#
Os operadores de atribuição permitem realizar operações matemáticas e atualizar variáveis de maneira mais concisa, como +=
, -=
, *=
, /=
, //=
, %=
e **=
. Esses operadores são amplamente empregados em laços de repetição e cálculos acumulativos, tornando a escrita do programa mais sucinta.
contador = 10
while contador > 0:
print(contador)
contador -= 1
# Novo exemplo
continuar = True # Variável booleana para controlar o loop
# Loop que continua enquanto 'continuar' for True
while continuar:
resposta = input("Deseja continuar? Digite s (para sim) ou n(para nao): ")
if resposta == "n":
continuar = False # A condição de parada é atingida, o loop vai parar
print("Loop encerrado.")
elif resposta == "s":
print("Você escolheu continuar.")
else:
print("Não reconheci sua resposta. Tente novamente.")
Loop infinito#
Ao utilizar o comando while
em Python, é fundamental adotar boas práticas para evitar a ocorrência de loops infinitos, que podem comprometer a execução do programa, causando a sua paralisação. Um loop infinito ocorre quando a condição de parada nunca se torna False, resultando em uma execução contínua sem término.
Para evitar esse problema, é essencial garantir que a variável de controle seja devidamente atualizada dentro do bloco de repetição. Além disso, é recomendável estabelecer critérios de saída adicionais, como contadores auxiliares ou verificações condicionais, assegurando que o laço não permaneça em execução indefinidamente.
# Cuidado com esse código! Loop infinito
while True:
print("Loop")
continuar = True # Variável booleana para controlar o loop
contador = 10
# Loop que continua enquanto 'continuar' for True ou até a 11a interação
while continuar and contador >= 0:
resposta = input("Deseja continuar? Digite s (para sim) ou n(para nao): ")
if resposta == "n":
continuar = False # A condição de parada é atingida, o loop vai parar
contador = 0 # Zera o contador
print("Loop encerrado pelo usuário.")
elif resposta == "s":
print("Você escolheu continuar.")
else:
print("Não reconheci sua resposta. Tente novamente.")
print("Tentativas restantes: ", contador)
contador -= 1 # Decrementa o contador
print("Saiu do loop")
Comando break
#
O comando break
é uma instrução de controle de fluxo utilizada para interromper a execução de um laço de repetição, encerrando o loop imediatamente, independentemente da condição de parada definida.
Seu uso é particularmente relevante em situações onde um critério de saída específico deve ser atendido, permitindo maior flexibilidade na estrutura do programa.
# Novas palavras-chave: break
count = 10
while count > 0:
count = count - 1
print("O valor é", count)
if count == 5:
break
# Para fazermos juntos
valor = 2 # Mostrar no quadro: count / condição / operacoes
while valor <= 12:
print('O número par é ', valor)
valor = valor + 2
if valor == 10:
break
# Remodelando o exemplo previamente visto
contador = 10
# Loop que continua enquanto 'continuar' for True ou até a 10a interação
while True:
print("Tentativas restantes: ", contador)
if contador <= 0:
break
contador -= 1 # Decrementa o contador
resposta = input("Deseja continuar? Digite s (para sim) ou n(para nao): ")
if resposta == "n":
print("Loop encerrado pelo usuário.")
break
elif resposta == "s":
print("Você escolheu continuar.")
else:
print("Não reconheci sua resposta. Tente novamente.")
print("Saiu do loop")
Comando continue
#
O comando continue
é uma instrução de controle de fluxo utilizada dentro de laços de repetição, como o while
, para pular a iteração atual e continuar a execução do loop a partir da próxima iteração. Diferentemente do comando break
, que interrompe completamente a repetição, o continue
permite que o laço prossiga sem executar o restante do código dentro da iteração corrente.
Esse comando é útil em situações onde certas condições precisam ser ignoradas temporariamente, como na filtragem de dados ou no controle de validações dentro de um loop. No entanto, seu uso deve ser planejado com cautela para garantir a clareza e previsibilidade do código.
# Usando o comando continue
contador = 0
while contador < 10:
contador += 1
if contador % 2 == 0:
continue # Pula números pares e continua a próxima iteração
print("Número ímpar:", contador)
Função len()
#
A função len()
é utilizada para determinar o comprimento de uma sequência, como strings, listas e tuplas. Quando aplicada a uma string, ela retorna o número total de caracteres, incluindo espaços e pontuações. Em conjunto com estruturas de repetição, a função len()
permite percorrer cada caractere da string de forma controlada, possibilitando a realização de diversas operações, como contagem de letras e filtragem de elementos específicos.
palavra = "Python"
len(palavra) # Número de caracteres na string
palavra = "papaia"
indice = 0
while indice < len(palavra):
letra = palavra[indice]
indice += 1
if letra == "a":
continue
print(letra)
Exercício 3:
Crie um programa que pergunte ao usuário por um número e, em seguida, peça se ele deseja multiplicar esse número por uma sequência de números inteiros a partir de 1. Por exemplo, se o usuário digita 5, o programa deve imprimir 5 + 10 + 15 + 20.
Crie um programa que solicita um número inteiro positivo ao usuário e exibe esse número invertido. Dicas:
Utilize um loop while para extrair os dígitos do número.
Utilize operações matemáticas (
%
e//
) para manipular os dígitos.
For loop#
O comando for
é uma estrutura de repetição amplamente utilizada para percorrer elementos de uma sequência, como listas, strings, tuplas e intervalos numéricos. Diferente do while
, que depende de uma condição lógica para execução, o for
itera sobre cada elemento da sequência de forma controlada e previsível, tornando-o ideal para manipulação de conjuntos de dados.
Esse laço é amplamente aplicado em algoritmos que envolvem iterações finitas, como processamento de textos, varredura de listas e cálculos computacionais.
for letra in "Python":
print(letra)
for i in [0, 1, 2, 3, 4, 5, 6, 7, 8, 9, 10]:
print(i)
for i in [0, 1, 2, 3, 4, 5, 6, 7, 8, 9, 10]:
if i % 2 == 0: # Apenas números pares
print(i)
Função range()
#
A função range()
é utilizada em conjunto com o laço for
para gerar sequências numéricas. Sua principal finalidade é permitir a iteração controlada sobre um conjunto de valores inteiros, sem a necessidade de criar listas manualmente.
A função aceita até três parâmetros: início, fim (não inclusivo) e passo, proporcionando flexibilidade na definição dos intervalos numéricos. Essa característica torna o range()
essencial para a construção de laços que exigem um número específico de iterações.
for i in range(0, 11):
print(i)
# Itera de 0 até 10, com passo 2
for i in range(0, 11, 2): # range(sart, stop, step)
print(i)
soma = 0
for numero in range(11): # O zero pode ser omitido no início da função range()
soma += numero
print(numero)
print("Soma: ", soma)
# Imprimir números de 0 a 20 usando um loop
# ...
# Gere os números de 10 até 1 (contagem regressiva).
for i in range(10, 0, -1):
print(i)
# Números de 0 a 20 com passo 5
# ...
# Fatorial do número 5
#...
Exercícios para Praticar#
Escreva um programa que solicita ao usuário uma palavra e conta quantas vogais e consoantes ela possui.
Utilize um loop
for
para percorrer a string.Utilize condições (
if
) para verificar se um caractere é uma vogal ou consoante.Considere apenas letras (ignore espaços, números e caracteres especiais).
Crie um programa que solicita um número inteiro positivo ao usuário e calcula a soma de seus dígitos.
Utilize um loop
while
para extrair os dígitos do número.Utilize um operador matemático para obter o último dígito (
%
).
Exemplo de Entrada e Saída:
Digite um número: 1234 A soma dos dígitos é: 10 # (1 + 2 + 3 + 4)
# Adicione suas respostas aqui
Conclusão#
O que aprendemos hoje?#
Nesta aula, exploramos conceitos fundamentais para controlar o fluxo de um programa em Python:
Como utilizar estruturas condicionais (
if
,elif
,else
) para tomar decisões.O uso de laços de repetição (
for
ewhile
) para executar comandos de forma automática.A diferença entre iteração controlada (
for
) e iteração condicional (while
).
Próximos Passos#
Resolva os problemas na seção “Exercícios para Praticar”.
Caso tenha dúvidas, revise os exemplos e experimente modificá-los. A programação se aprende na prática!
Leia mais sobre estruturas de controle na documentação oficial de python