Aula 2 - Conceitos de Indentação e Laços de Repetição

Indentação

In [7]:
#Diferentemente da maioria das linguagens, onde para criar um bloco de código utilizamos chaves "{", no Python utilizamos indentação.
#Essa indentação pode ser feita utilizando um "tab".
#Desta forma, no Python indentação faz parte da sintaxe
In [5]:
#O exemplo abaixo mostra como seria um bloco em "PHP" e em "Python"

#em PHP o bloco de comandos do if é separado por chaves
#if(nota>60){
#    echo "Aprovado";
#    echo "Passou Direto";
#}

#em Python, o bloco de comandos do if será separado por um tab (indentação)
#if(nota>60):
#    print("Aprovado");
#    print("Passou Direto");

Laço de Repetição WHILE

In [1]:
#Um laço de repetição WHILE repete a execução de um bloco de código até que uma condição seja alcançada.
#Se a condição nunca for alcançada, o laço será executado infinitamente
In [4]:
# exemplo abaixo pede a entrada de um nome e imprime na tela, até que a palavra sair seja digitada
#o comando break encerra o laço

condicao = True
while condicao==True:
    nome = input('Qual o seu nome: ')
    print(f'Seu nome é {nome}')
    if nome == 'sair':
        break
        print('Acabou')
Seu nome é sair
In [4]:
#outra forma de fazer é colocando valor false na variável 'condicao'
condicao = True
while condicao:
    nome = input('Qual o seu nome: ')
    print(f'Seu nome é {nome}')
    if nome == 'sair':
        condicao=False
        print('Acabou')
Seu nome é Paulo
Seu nome é sair
Acabou
In [7]:
#Também é possível utilizar while com contadores numéricos
#O exemplo abaixo imprime o valor da variável cont até chegar em 10
contador=0
while contador <= 10:
    contador = contador + 1
    print(contador)
print('Acabou')
1
2
3
4
5
6
7
8
9
10
11
Acabou

Operadores de Atribuição

In [ ]:
#Operadores de atribuição é uma forma de deixar mais curta uma operação de atribuição de valores
#Por exemplo, ao invés de fazer cont=cont+1, podemos fazer cont+=1
#Os operadores são: += -= *= /= //= **= %=
# Quando usa //= (divisão inteira) seria igual cont=cont//2 e cont//=2
In [ ]:
#O comando "continue" serve para pular um iteração de uma laço de repetição
#O comando "break" encerra o laço
In [4]:
#O exemplo abaixo tem um laço que vai ser executado até a variável contador chegar em 50
#Em cada interação fazemos a atribuição de soma de 1 no contador
#Mas vamos pular iterações quando o contador for igual a 6 ou tiver entre 10 e 27
#Se o contador for igual a 40, é para encerrar o laço

contador = 0
while contador <= 50:
    contador += 1

    if contador == 6:
        print('Não vou mostrar o 6.')
        continue

    if contador >= 10 and contador <= 27:
         print('Não vou mostrar o', contador)
         continue

    print(contador)

    if contador == 40:
        break
        
print('Acabou')
1
2
3
4
5
Não vou mostrar o 6.
7
8
9
Não vou mostrar o 10
Não vou mostrar o 11
Não vou mostrar o 12
Não vou mostrar o 13
Não vou mostrar o 14
Não vou mostrar o 15
Não vou mostrar o 16
Não vou mostrar o 17
Não vou mostrar o 18
Não vou mostrar o 19
Não vou mostrar o 20
Não vou mostrar o 21
Não vou mostrar o 22
Não vou mostrar o 23
Não vou mostrar o 24
Não vou mostrar o 25
Não vou mostrar o 26
Não vou mostrar o 27
28
29
30
31
32
33
34
35
36
37
38
39
40
Acabou

Aninhamento de While (Um while dentro de outro)

In [3]:
#quando é inserido um while dentro do outro, para cada iteração do primeiro, são realizadas todas as iterações do segundo.
#O exemplo abaixo mostra como funciona a execução.
#Para cada linha (no primeiro laço) é executado todas as colunas (segundo laço).
In [4]:
qtd_linhas = 5
qtd_colunas = 5

linha = 1
#enquanto linha menor/igual a 5
while linha <= qtd_linhas:
    coluna = 1
    #para cada valor da linha, serão executados todas as colunas
    while coluna <= qtd_colunas:
        print(f'{linha=} {coluna=}')
        coluna += 1
    linha += 1
print('Acabou')
linha=1 coluna=1
linha=1 coluna=2
linha=1 coluna=3
linha=1 coluna=4
linha=1 coluna=5
linha=2 coluna=1
linha=2 coluna=2
linha=2 coluna=3
linha=2 coluna=4
linha=2 coluna=5
linha=3 coluna=1
linha=3 coluna=2
linha=3 coluna=3
linha=3 coluna=4
linha=3 coluna=5
linha=4 coluna=1
linha=4 coluna=2
linha=4 coluna=3
linha=4 coluna=4
linha=4 coluna=5
linha=5 coluna=1
linha=5 coluna=2
linha=5 coluna=3
linha=5 coluna=4
linha=5 coluna=5
Acabou

Exemplo: Faça um algoritmo que peça para digitar um nome. EM seguida, imprima na tela cada letra do nome separada por '-'. Por exemplo: Entra com o nome "Paulo" e imprima na tela "P-a-u-l-o".

In [5]:
nome=input()
tamanho=len(nome)
contador=0
resultado=''
while contador<tamanho:
    resultado+=nome[contador]+'-'
    contador+=1
print(resultado)
A-r-t-h-u-r-

Exemplo: Faça uma calculadora que calcule as operações básicas. O usuário deverá digitar os números e o operador, e o algoritmo deverá retorar o resultado e perguntar se deseja sair. É preciso fazer as validações das entradas do usuário.

In [6]:
sair=False
while sair==False:
    numero_1 = input('Digite um número: ')
    numero_2 = input('Digite outro número: ')
    operador = input('Digite o operador (+-/*): ')

    numeros_validos = None

    try:
        num_1_float = float(numero_1)
        num_2_float = float(numero_2)
        numeros_validos = True
    except:
        numeros_validos = None

    if numeros_validos is None:
        print('Um ou ambos os números digitados são inválidos.')
        continue

    operadores_permitidos = '+-/*'

    if operador not in operadores_permitidos:
        print('Operador inválido.')
        continue

    if len(operador) > 1:
        print('Digite apenas um operador.')
        continue

    #fazendo os calculos
    if operador=='+':
        print(num_1_float + num_2_float)
    elif operador=='-':
        print(num_1_float - num_2_float)
    elif operador=='/':
        print(num_1_float / num_2_float)
    elif operador=='*':
        print(num_1_float * num_2_float)
        

#se o usuário digitar algo começando com 's', sair receberá True e encerrará o while   
    sair = input('Quer sair? [s]im: ').lower().startswith('s')

    if sair is True:
        break
5.0

Else no While (específico do Python)

In [ ]:
#Este recurso é exclusivo do Python. Colocando o else no While, ele será executado apenas se o while for inteiramente executado.
#Se houve algum interrupção no while por meio do break, o else não é executado.
In [28]:
#Neste exemplo, na segunda iteração o break é executado, e não ativa o else
nome = 'Paulo'

i = 0
while i < len(nome):
    letra = nome[i]

    if letra == 'a':
        break

    print(letra)
    i += 1
else:
    print('Não encontrei a letra na string.')
print('Fora do while.')
P
Fora do while.
In [29]:
#Já neste caso, como o while foi executado inteiro, sem interrupção, foi executado o bloco do else
string = 'Valor qualquer'

i = 0
while i < len(string):
    letra = string[i]
    print(letra)
    i += 1
else:
    print('Não encontrei um espaço na string.')
print('Fora do while.')
V
a
l
o
r
 
q
u
a
l
q
u
e
r
Não encontrei um espaço na string.
Fora do while.

Laço de Repetição FOR

In [4]:
#O for pode ser usado mais facilmente do que o while quando já é conhecido a quantidade de interações
#No for não é necessário controlar o contador, ele avança automaticamente de posição em cada iteração 
In [3]:
#No exemplo para cada interação, a variavel letra receberá um aposição da string
#No caso, colocaremos um - depois de cada letra
texto1= 'Paulo'
texto2= ''
for letra in texto1:
    texto2 += '-'+letra
    print(letra)
print(texto2)
P
a
u
l
o
*P*a*u*l*o
In [11]:
#A função range serve para gerar números no Python
#range(inicio, fim, step)
#Neste caso numeros receberá valores de 1 até 9 (10 não entra) com step de 2 em 2
numeros = range(1, 10, 2)
#com o for conseguimos pegar números individualmente
for numero in numeros:
    print(numero)
1
3
5
7
9
Out[11]:
range
In [15]:
#range(10) considera inicio=0 e step=1. É como se fosse range(0,10,1)
#No  exemplo, para i variando de 0 até 9, imprime i.
#Mas quando i=2 pula a iteração e quando for igual a 8, encerrará o laço
#Neste caso o else não será executado porque break interrompeu a execução completa
for i in range(10):
    if i == 2:
        print('i igual a 2, pulando a iteração')
        continue

    if i == 8:
        print('i igual 8, encerra o laço. O else não executará')
        break
    
    print(i)

else:
    print('For completo com sucesso!')
0
1
i é 2, pulando...
3
4
5
6
7
i é 8, seu else não executará
In [ ]: