Estruturas condicionais e de repetição em Python - Guia rápido!
- #Python
Olá! Criei esse guia objetivo e direto para te auxiliar no aprendizado de Python!
Acho útil ter um resumo esteticamente menor e bem separado por tópicos, e espero que isso te ajude como tem me ajudado! Usei o Notion para escrever e as aulas fazem parte do bootcamp de engenharia de dados promovido pela NTT Data!
Indentação e blocos
- Muito usado por estética, pois deixa código legível e manutenível
- Mas no python, interpretador identifica onde bloco começa e termina. se não indentar, meu código não funciona. 4 espaços em branco por nível de indentação.
- Já em outras linguagens, geralmente usam {} para demarcar.
# Python:
def sacar(self, valor:float) -> None
if self.saldo >= valor:
self.saldo -= valor # dei 4 espaços, estou dentro do if
# fim bloco if
# fim bloco método
# Java com indentação, mas só por estética
void sacar(double valor) {
if (this.saldo >= valor){
this.saldo -= valor;
} # fim do bloco if
} #fim do bloco do método
# java sem indentação, funcionará. Porém, se fosse em python, não funcionaria
void sacar(double valor) {
if (this.saldo >= valor){
this.saldo -= valor;
} # fim do bloco if
}
- abertura de bloco é no :
- espaços indentados fazem parte do bloco aberto. Se eu digito algo no mesmo nível de def…, então não fará parte do método
def sacar(valor):
saldo = 500
if saldo >= valor:
print("valor sacado. Retire o seu dinheiro na boca do caixa.")
print("Obrigado por ser nosso cliente!")
sacar(100)
# se a condição if for atendida:
>>> valor sacado. Retire o seu dinheiro na boca do caixa."
Obrigado por ser nosso cliente!
# Se condição não for atendida:
>>> Obrigado por ser nosso cliente!
# só ele foi executado pois parte do método, está indentado 4 espaços
Estruturas condicionais
- desvia o fluxo de controle se a expressão lógica for atendida
- tomar uma ação dependente de condição
- if/elif/else
- Para criar 1 desvio só, uso if
- para 2 desvios, uso if/else
Obs.: se não houver uma tratativa para resposta, ex.: tenho resposta para if obedecido mas nada caso não seja obedecido, então programa mostrará nada.
- para 3 desvios, uso if/elif/else. Não existe número limite de elifs, posso usar vários elifs. Mas é bom evitar grandes estruturas condicionais por aumentarem complexidade. Coloca if, os elifs e a última opção (ex.: “N/A”, “nenhuma das opções”) no fim.
MAIOR_IDADE = 18
idade = int(input("Informe sua diade:"))
if idade >= MAIOR_IDADE:
print("Maior de idade, pode tirar a CNH")
else:
print("Ainda não pode tirar a CNH")
MAIOR_IDADE = 18
IDADE_ESPECIAL = 12
idade = int(input("Informe sua diade:"))
if idade >= MAIOR_IDADE:
print("Maior de idade, pode tirar a CNH")
elif idade == IDADE_ESPECIAL:
print("Pode fazer aula teórica, mas não as aulas práticas")
else:
print("Ainda não pode tirar a CNH")
- podemos aninhar essas estruturas também:
if conta_normal:
if saldo>= saque:
print("Saque realizado com sucesso")
elif saque <= (saldo + cheque_especial):
print("Saque realizado com uso do cheque especial")
elif conta_universitaria:
if saldo >= saque:
print("saque realizado com sucesso!")
else:
print("Saldo insuficiente!")
- if ternário: escreve 3 condições numa só linha
- expressao para True + if + expressão logica + else + retorno para False
status = "Sucesso" if saldo >= saque else "Falha"
print(f"{status} ao realizar o saque!")
saldo = 2000
saque = 2500
status = "Sucesso" if saldo >= saque else "Falha"
print(f"{status} ao realizar o saque!")
>>> Falha ao realizar o saque!
Estruturas de repetição
- repete trecho de código n vezes conhecidas ou determinadas por expressão lógica. usamos quando não sabemos o número exato de vezes para executar o código ou quando queremos um objeto iterável…
- como seria sem estrutura de repetição:
# receba um númeor do teclado e exiba os 23 números seguintes dele
a = int(input("Informe um número inteiro:"))
print(a)
a += 1
print(a)
a += 1
print(a)
a += 1
print(a)
Usando estruturas de repetição:
- for:
- quando sabemos quantas vezes executar código ou se objeto iterável (ou seja, objeto a ser percorrido, ex.: string, lista etc).
- o end=”“ é para os caracteres ficarem lado a lado, sem espaço, senão pula uma linha em cada letra (como uma coluna)
texto = input("Informe um texto: ")
VOGAIS = AEIOU
for letra in texto:
if letra.upper() in VOGAIS: #pois VOGAIS tem elementos maiúsculos
print(letra, end="")
# se alguma letra do texto informado for vogal, ele imprime
print() #adiciona quebra de linha
print("Chegamos ao final do laço.")
# informei texto Guilherme para o terminal:
>>> uiee
Chegamos ao final do laço.
- função Range
- função built-in, já vem com o Python
- produz sequência de inteiros a partir de um início inclusivo para um fim exclusivo
- início inclusivo: ele inicia pelo início que informei, incluindo meu número informado. Se range(0,10), ele inicia de 0, inclui o 0.
- fim exclusivo: o número final é excluído. Então, range(0,10) vai de 0 a 9, pois ele exclui o 10.
- estrutura: range(i,j)
range(i,j)
>>> i, i+1, i+2, i+3, .... j-1
list(range(4)
>>> [0, 1, 2, 3]
- argumentos: stop (é obrigatório, senão ele não cessa), start (opcional) e step (opcional também)
range(start, stop[, step[) → range object
- stop e step tem [ para identificar que são argumentos opcionais
- retornam um range object
# range(start, stop[, step[) → range object, não cria uma listinha.
# range(stop) -> range object
range(4)
>>> range (0,4)
# note que não retornou uma lista, retornou um range object.
#Para retornar uma lista, deve-se usar list(range(...))
# list(range(...) -> cria lista
list(range(4))
>>> [0, 1, 2, 3]
# Note que, se quero começo em 0, não preciso mencioná-lo.
#Basta mencionar, nesse caso, o stop.
- aplicando range:
for numero in range(0,11):
print(numero, end=" ")
>>> 0 1 2 3 4 5 6 7 8 9 10
#exibindo a tabuada de 5 usando start, stop e step:
for numero in range(0, 51, 5):
print(numero, end=" ")
>>> 0 5 10 15 20 25 30 35 40 45 50
# e parou no 50 pois o stop é 51
# o passo é 5. Ele exibe a cada 5 unidades.
# Começa em 0 e ao invés de ir a´ra 1, ele vai par a5 e asim sucede.
# o end=" " é para exibir na mesma linha, e com espaço entre cada caractere.
# O padrão, se não escrever isso, é ele dar enter entre respostas:
for numero in range(0, 9, 2):
print(numero)
>>> 0
2
4
6
8
for numero in range(0, 9, 2):
print(numero, end=" ")
>>> 0 2 4 6 8
- while
- executar até que algo aconteça, até que variável atinja certo valor
- repete bloco de código várias vezes, para se não sei quantas vezes devo executá-lo
opcao = -1 # valor somente para criar a variável
while opcao != 0:
opcao = int(input("[1] Sacar \\n[2] Extrato \\n[0] Sair \\n: "))
# pergunta ao cliente a opção desejada: 1, 2, 0
if opcao == 1:
print("sacando...")
elif opcao ==2:
print("Exibindo o extrato...")
- laço infinito com condição de parada: usa break dentro da condição de parada
while True:
# ele executa enquanto for verdade, ou seja, para sempre
numero = int(input("informe um número: "))
if numero == 10:
break #mas coloco uma condição que, se ela for atendida, para
>>> Informe um número: 4
Informe um número: 100
Informe um número: 58
Informe um número: -8
Informe um número: -10
Informe um número: 10 # parou, cortou o laço da execução
- comparando if iterável, range e while
# usando um iterável: é objeto conhecido, iterável
VOGAIS = "AEIOU"
for letra in texto:
if letra.upper() in VOGAIS:
print(letra, end="")
else:
print() # adiciona uma quebra de linha)
# Se palavra for Gabriel:
>>> AIE
# usando built-in range:
for numero in range(0, 51, 5)
print(numero, end=" ")
>>> 0 5 10 15 20 25 30 35 40 45 50
- usando break: interrompe o ciclo de iteração de for ou while
numero = int(input("informe um número: ")
for numero in range(100):
if numero == 10:
break # parará quando número for 10
print(numero, end = " ")
>>> Informe um número: 10
0 1 2 3 4 5 6 7 8 9
# pois no 10 ele cortou o laço, não se repete o código
- usando continue → pula um ciclo de iteração. Usado com for e while, desvia de situação específica dentro do laço
numero = int(input("informe um número: ")
for numero in range(12):
if numero == 4:
continue # pulará o número 4
print(numero, end = " ")
>>> 0 1 2 3 5 6 7 8 9 10 11 # lembrando que o 12 não é exibido, é exclusivo
Exercício: porque break vem antes de continue:
- código errado:
numero = int(input("informe um número: ")
for numero in range(12):
if numero % 2 == 0: # se for numero par, pula o código
continue # pulará qualquer número divisível por 2 (par)
if numero == 10:
break # se for 10, ele para
print(numero, end = " ")
>>> Informe um número: 1
1
Informe um número: 3
3
Informe um número: 2 # note que ele não exibiu, pulou, mas continua executando
Informe um número: 5
5
Informe um número: 10
Informe um número: 7
7
# note que 10 é par, por isso não foi exibido...
# Mas deveria ter sido cortado, não o programa ter continuado e pedido mais um número
# essa execução nunca termminará pois informar 10 não dará break
Isso ocorre pois continue está antes de break, então 10 que é par fez ele pular a execução do bloco if de baixo. Ou seja, o bloco contendo break não é executado.
ou seja, devemos trocar a ordem, com break vindo primeiro:
- código correto:
numero = int(input("informe um número: ")
for numero in range(12):
if numero == 10:
break
if numero % 2 == 0:
continue
print(numero, end = " ")
>>> Informe um número: 1
1
Informe um número: 2
Informe um número: 51
51
Informe um número: 10
-
# não exibe mais "Informe um número:" pois cortou a execução.