Ava Univirtus
Ava Univirtus
Ava Univirtus
LÓGICA DE PROGRAMAÇÃO E
ALGORITMOS
AULA 4
https://univirtus.uninter.com/ava/web/roa/ 1/33
26/11/2021 09:52 UNINTER
CONVERSA INICIAL
chamados de códigos
iterativos, em linguagem Python. Assim, algumas partes dos nossos
algoritmos
Iremos
investigar todos os tipos de repetições existentes em linguagem Python: a
estrutura de
Essas
estruturas de repetição são existentes nas principais linguagens de programação
modernas e
Assim
como nas aulas anteriores, todos os exemplos apresentados neste material
poderão ser
Ao
longo do material, você encontrará alguns exercícios resolvidos. Esses
exercícios estão
Vamos
voltar, nesta aula, ao nosso mascote, o lenhadorzinho. Na aula de hoje, ele
precisa chegar
depois.
https://univirtus.uninter.com/ava/web/roa/ 2/33
26/11/2021 09:52 UNINTER
Imagine
que para cada quadradinho de movimentação do desenho precisamos dar um comando
ao lenhador. Sendo assim, para que ele chegue até a madeira, serão necessárias
cinco instruções de
sendo:
_______________________________________________
Início
1. Mover
2. Mover.
3. Mover.
4. Mover.
5. Mover.
Fim
_______________________________________________
https://univirtus.uninter.com/ava/web/roa/ 3/33
26/11/2021 09:52 UNINTER
Agora,
imagine que, em vez de movimentar cinco espaços até a madeira, o personagem
demandar bastante
trabalho, tornaria o seu programa de difícil compreensão e longo demais.
Para
resolver problemas como este é que linguagens de programação contém estruturas
de
Vejamos
um segundo exemplo, agora em linguagem Python, que demonstra a necessita de uso
É
também possível reescrevermos o mesmo problema, mas agora utilizando uma
variável x que
https://univirtus.uninter.com/ava/web/roa/ 4/33
26/11/2021 09:52 UNINTER
Se
utilizarmos qualquer uma das duas soluções acima, teremos que alterar o valor
da variável (ou
Podemos
melhorar um pouco tudo isso alterando o código para o colocado a seguir.
Iniciamos o
Essa
última solução é a melhor que podemos atingir para resolver o problema proposto
sem
utilizarmos uma estrutura de repetição, uma vez que temos somente duas
linhas de código que
resolver esse
problema (e diversos outros) de uma maneira muito mais simples, empregando
estruturas iterativas.
Vamos
iniciar nossos estudos de laços de repetição pela estrutura denominada enquanto,
em
representação do
while por meio de um fluxograma.
https://univirtus.uninter.com/ava/web/roa/ 5/33
26/11/2021 09:52 UNINTER
Note
que temos um bloco de condicional no fluxograma apresentado na Figura 3, da
mesma
maneira que tínhamos nas estruturas condicionais vistas nas aulas anteriores.
A diferença agora é que
caso a condição se mantenha verdadeira, nosso programa
se mantém preso dentro do que
E como
escrevemos o while em linguagem Python? A Figura 4 ilustra isso. Note
que em Python a
Após o
while, abrimos parênteses (isso é opcional) e colocamos a condição
lógica que deve ser
https://univirtus.uninter.com/ava/web/roa/ 6/33
26/11/2021 09:52 UNINTER
iterativo.
Ademais, a linguagem Python não tem um delimitador de final de estrutura, em
que no
pseudocódigo é representado por fim-enquanto. Muitas outras
linguagens, como Java e C/C++,
Estamos
falando bastante sobre como construir o código em Python, mas até o momento
ainda
não praticamos e também não vimos como criar a tão comentada condição da
estrutura. Então,
vejamos um exemplo prático e executável em nossa ferramenta
on-line. Lembrando que você pode
Vamos
voltar ao exercício inicial, apresentado na seção 1 desta aula. Queríamos
escrever na tela
os números crescentes de 1 até o 5. Podemos fazer isso,
portanto, empregando o laço de repetição
Neste
código, iniciamos ele inicializando a variável x com o valor 1. Depois,
iniciamos um laço de
5.
Dentro
do laço, primeiro fazemos o print de x na tela (linha 3) e depois
realizamos o incremento
https://univirtus.uninter.com/ava/web/roa/ 7/33
26/11/2021 09:52 UNINTER
Na
Figura 5, temos o fluxograma do exemplo que acabamos de resolver.
Saiba mais
O problema do loop
infinito: retomando o exercício da impressão dos números crescentes
usando while,
o que aconteceria caso removêssemos a linha 4 do nosso código (a linha do
incremento)?
Continuemos
adaptando o nosso exemplo. Agora, vamos supor que queremos escrever na tela
para o usuário, os números iniciando em 0 e indo até o valor 99. Podemos
adaptar nosso algoritmo
https://univirtus.uninter.com/ava/web/roa/ 8/33
26/11/2021 09:52 UNINTER
<= 99.
Veja:
Uma
maneira alternativa de escrevermos a condição deste exercício é, em vez de x
<= 99,
Mas
por que ambas as condições produzem o mesmo resultado? Veja que tanto para x
<= 99
final
da execução.
Saiba mais
Modifique esse
mesmo programa para exibir na tela número de 10 a 1.000.
Modifique-o também
para exibir na tela uma contagem regressiva do lançamento de um
foguete,
iniciando em 10 até 0 e escrevendo, após o 0, a palavra: fogo!
2.1 CONTADORES
A
estrutura de repetição em linguagem Python é bastante versátil e poderosa.
Vamos realizar
https://univirtus.uninter.com/ava/web/roa/ 9/33
26/11/2021 09:52 UNINTER
Vamos
assumir que agora queremos imprimir uma sequência de números, porém seus
delimitadores de valor inicial e final a serem impressos serão definidos pelo
próprio usuário
Para
resolver esse problema, vamos criar um algoritmo em quem o usuário digite um
valor inicial
da saída
do programa.
Note
que a variável lida na linha 1 é atribuída para ser o valor inicial do contador
x, na linha 3. Na
Vamos
a um segundo exemplo: agora, queremos imprimir na tela somente valores dentro
de um
https://univirtus.uninter.com/ava/web/roa/ 10/33
26/11/2021 09:52 UNINTER
Vamos
analisar com calma o algoritmo que acabamos de criar. Note que dentro do laço
de
Ademais,
a linha 7, do incremento, não está colocada dentro da condicional simples
(novamente,
dentro da condicional
simples e veja o que acontece com a execução do seu algoritmo.
Saiba mais
Sua vez de
praticar!
A solução consiste
em remover o teste condicional simples e fazer com que o incremento
aconteça em
duas unidades por vez.
Atenção! Essa
solução funciona, porém, deve-se tomar cuidado para que o valor inicial da
Exercícios de fixação!
https://univirtus.uninter.com/ava/web/roa/ 11/33
26/11/2021 09:52 UNINTER
Exemplo com a
tabuada do 5: 1x5=5, 2x5=10, 3x5=15...
2.2 ACUMULADORES
Muitas
vezes, necessitamos de variáveis capazes de acumular totais, como realizar o
somatório
Em
problemas que envolvem acumuladores, normalmente necessitamos de um contador
Vamos
construir um exemplo que calcule a soma de 5 valores inteiros. Cada valor a ser
somado
será digitado pelo usuário. Aqui, vamos criar uma variável acumuladora
chamada de soma,
justamente para receber o somatório desejado e uma
variável contadora cont, que irá de 1 até 5 para
No
algoritmo que criamos, observe que para deixarmos a interface ao usuário
mais amigável,
https://univirtus.uninter.com/ava/web/roa/ 12/33
26/11/2021 09:52 UNINTER
Saiba mais
Inicializando a
variável: na execução do algoritmo, note um detalhe muito importante! A
variável de soma deve ser sempre inicializada com zero. Caso contrário, nosso
programa não
a
variável de soma (soma = 0).
O que aconteceu
com o resultado final do somatório? Funcionou?
Vamos
expandir o algoritmo da soma para calcular também a média final dos valores
digitados
pelo usuário. Vamos supor que você deseja calcular a sua média de
notas na disciplina. Vamos
Sendo
assim, precisamos ler do teclado as 5 notas e, em seguida, somá-las. Com o
somatório
Alterou-se
o input para float, pois as notas consideradas aqui podem estar
entre 0 e 10 e contêm
casas decimais.
2.3 EXERCÍCIOS
de repetição while.
2.3.1 Exercício
https://univirtus.uninter.com/ava/web/roa/ 13/33
26/11/2021 09:52 UNINTER
Escreva
um algoritmo que leia dois valores e imprima na tela o resultado da
multiplicação de
Python
2.3.2 Exercício
Escreva
um algoritmo que obtenha do usuário um valor inicial e um valor final. Para
este
a) A
quantidade de números inteiros e positivos;
b) A
quantidade de números pares;
c) A
quantidade de números ímpares;
d) A
respectiva média de cada um dos itens anteriores.
Python
https://univirtus.uninter.com/ava/web/roa/ 14/33
26/11/2021 09:52 UNINTER
Como
já vimos em diversos exemplos ao longo desta aula, uma das instruções mais comuns
de
A
linguagem Python apresenta uma característica bastante interessante, e que foi
herdada da
suporta.
https://univirtus.uninter.com/ava/web/roa/ 15/33
26/11/2021 09:52 UNINTER
valores de
1 até 5, crescente. Mas agora vamos reescrever o incremento com a nomenclatura
Compreenda
que esta é somente uma nomenclatura alternativa e que não tem impacto algum
no
desempenho do algoritmo. Vejamos mais um exemplo a seguir. Vamos revisitar o
exemplo do
Caso o requisito
exigido seja atendido logo na digitação da linha 1, o laço de repetição nem irá
agora de
maneira proposital. Por exemplo, supomos que queremos que um usuário digite
diversas
Vejamos no exemplo a
seguir. A variável texto é inicializada com vazio (aspas simples sem
https://univirtus.uninter.com/ava/web/roa/ 17/33
26/11/2021 09:52 UNINTER
A
instrução break serve para simplesmente encerrar um laço de repetição
previamente,
break.
https://univirtus.uninter.com/ava/web/roa/ 18/33
26/11/2021 09:52 UNINTER
Podemos
utilizar o comando continue somente invocando o seu nome quando
desejarmos.
Saiba mais
No exercício que
acabamos de resolver, usamos uma condição que chamamos de loop
infinito
(while True). Ela é assim chamada, pois a condição por si só nunca terá
um final, uma vez
Neste algoritmo,
encontramos uma maneira alternativa de encerrar o loop através do break.
estiver utilizando.
https://univirtus.uninter.com/ava/web/roa/ 19/33
26/11/2021 09:52 UNINTER
No
programa anteriormente mostrado, note que temos novamente o laço de repetição
infinito.
Quando
o nome correto é digitado, o programa avança para solicitar a senha. Agora, na
parte da
senha, estamos usando a instrução break. Sendo assim, quando a
senha correta for digitada (SeNhA),
False.
Porém, dados não booleanos também podem ser tratados como verdadeiro ou
falso em uma
condição. Nesta situação, chamamos estes valores de dados Truthy
e Falsey.
O
Python considera o numeral zero, tanto inteiro quanto em ponto flutuante, como
um valor
não listados
podem ser tratados como Truthy/True pela linguagem.
Vejamos
o exemplo a seguir. Nele, inicializamos a variável nome com uma string
vazia. Isso
significa que, se utilizarmos essa variável em um teste lógico
com ela estando vazia, seu valor será
Na
linha 2, fazemos um teste lógico no qual estamos negando a variável nome
(while not nome).
valor
para True. Assim, fazemos com que o programa caia dentro do laço de
repetição e solicite um
nome.
https://univirtus.uninter.com/ava/web/roa/ 20/33
26/11/2021 09:52 UNINTER
Após o
laço de repetição, temos a leitura de um valor numérico e inteiro qualquer na
variável
valor. Em seguida, na linha 5, fazemos um teste condicional
colocando somente if valor. Quando
zero, o
teste lógico resultará em False, caindo no else. Caso digite
qualquer outro número, como 10, o
teste lógico será True.
3.6 EXERCÍCIOS
3.6.1 Exercício
Escreva
um algoritmo que leia números inteiros via teclado. Somente valores positivos
devem ser
Python
https://univirtus.uninter.com/ava/web/roa/ 21/33
26/11/2021 09:52 UNINTER
A
linguagem Python, bem como todas as linguagens de programação modernas,
apresenta um
tipo de estrutura de repetição chamada de para (for).
Já
investigamos de maneira extensiva a estrutura de repetição do tipo enquanto (while).
No
while, o nosso laço tinha duração indefinida. Ou seja, a quantidade
de vezes com que as instruções
Assim
como o while, essa estrutura repete um bloco de instruções enquanto a
condição se
mantiver verdadeira. No entanto, diferente do while, o for
é empregado em situações em que o
Ademais,
a condição a ser testada pelo for sempre será uma comparação lógica
empregando
fazemos em
pseudocódigo. O equivalente em Python está colocado a seguir.
<var> é a
variável de controle do laço (normalmente adotamos a letra i), <inicial>
é o valor que
iremos iniciar a contar, e <final> é o
valor final de parada da contagem. Por fim, <incremento> é o
passo
que iremos utilizar para incrementar a variável de controle.
Temos,
na Figura 6, a representação do for em Python. Após a palavra-chave for,
inserimos a
https://univirtus.uninter.com/ava/web/roa/ 22/33
26/11/2021 09:52 UNINTER
Para o
uso da função range, abrimos parênteses (que desta vez são
obrigatórios, pois toda
[1]
função em Python precisa de parênteses ) e
colocamos dentro deles o valor final do iterador, ou
seja, a condição de
parada. Após a condição, devemos, obrigatoriamente, colocar dois pontos, nunca
esqueça dele!
Vejamos
um exemplo prático. Iremos refazer o primeiro exercício desta aula, em que
queríamos
imprimir na tela 5 valores inteiros e sequenciais. Observe o código
colocado a seguir. Escrevemos for
i in range(6).
https://univirtus.uninter.com/ava/web/roa/ 23/33
26/11/2021 09:52 UNINTER
E se
quiséssemos alterar o valor inicial do contador para 1, é possível? É permitido
também
alterarmos o passo do iterador? A resposta é sim. Conforme acabamos de
analisar, a função range é
capaz de trabalhar somente com uma informação
fornecida a ela. Quando somente uma informação
O que
fizemos no exemplo foi omitir o valor inicial do iterador, neste caso, a
linguagem Python
Podemos
informar à função range 3 valores em vez de somente 1. Fazendo assim, o
primeiro
https://univirtus.uninter.com/ava/web/roa/ 24/33
26/11/2021 09:52 UNINTER
Separamos
cada informação dentro do range por vírgulas. Vamos ver agora um exemplo
no qual
Agora,
vejamos mais um exemplo. Nele, vamos fazer uma contagem decremental, iniciando
em
Nesse
resultado, notamos que a impressão começou no 10 e foi descendo de 2 em 2. O
último
valor de impressão foi o 2. Lembrando que, como nosso limite final
imposto foi 0, ele é excluído do
laço.
Saiba mais
Vamos refazer os
exercícios de while, mas agora com for.
https://univirtus.uninter.com/ava/web/roa/ 25/33
26/11/2021 09:52 UNINTER
Vamos
retomar um conhecimento visto em aulas anteriores, o fatiamento de strings.
Aprendemos que podemos manipular individualmente cada caractere de uma string
por meio de seu
índice.
Podemos
fazer esse procedimento de uma maneira bastante dinâmica empregando um laço de
repetição. No exemplo a seguir, passamos por todos os caracteres da string usando
um for.
No
algoritmo apresentado, o for inicia sua variável de controle sempre no
zero, isso porque o
primeiro índice da string é o zero. A condição de
parada do laço será atingir o tamanho total da
string. Portanto,
podemos revisitar uma função que aprendemos em aulas anteriores, de tamanho da
string,
fazendo o laço ir até este valor com um passo unitário. Ao realizar o print,
não podemos
esquecer de iterar utilizando os colchetes para definir o índice.
Usamos a variável de controle do laço
Note
que o print realizado fez com que cada caractere fosse impresso em uma
linha separada.
Este é um comportamento padrão do print. No entanto,
podemos suprimir isso inserindo uma
https://univirtus.uninter.com/ava/web/roa/ 26/33
26/11/2021 09:52 UNINTER
Vamos
encerrar este tema verificando que podemos resolver um mesmo problema de laço
de
repetição, tanto com while, quanto com for. Queremos imprimir
na tela os números de 1 até 5. Na
Figura 9, temos o comparativo de ambas as
estruturas para resolver esse mesmo problema.
Na
Figura 9, foram realizadas marcações coloridas que indicam o equivalente em
ambos os
lhe convém.
4.3 EXERCÍCIOS
4.3.1 Exercício
https://univirtus.uninter.com/ava/web/roa/ 27/33
26/11/2021 09:52 UNINTER
Python
4.3.2 Exercício
Vamos
revisitar o exercício da tabuada que você desenvolveu na seção 2.1, mas um
pouco
modificado.
Python
Assim
como já aprendemos nas estruturas condicionais, podemos combinar diversas
estruturas
https://univirtus.uninter.com/ava/web/roa/ 28/33
26/11/2021 09:52 UNINTER
Vamos
ver um exemplo de aninhamento de laços por meio de um exemplo de cálculo de
tabuada. Você acabou de resolver um exercício semelhante na seção anterior. Mas,
agora, iremos
Vamos
escrever um algoritmo em Python que calcule a tabuada de todos os números de 1
até
O
primeiro laço while (podemos chamar também de laço externo)
servirá para iterar os números
os quais deverão ter a tabuada calculada.
Enquanto que no segundo while, aninhado ao primeiro
(podemos chamar
também de laço interno), irá iterar o multiplicador da tabuada.
Como
funcionará a execução das instruções desse algoritmo? Bom, temos um laço dentro
do
outro, então quando o programa iniciar, o laço da linha 3 será executado uma
vez para tabuada = 1.
Em seguida, cairemos no laço da linha 6. O que
acontecerá a partir de agora é que todo laço interno
será executado de 1 até
10, enquanto que o laço externo perceberá inalterado ainda preso na
primeira
iteração (tabuada = 1). Isso significa que a tabuada do 1 será
calculada, multiplicando o
número 1 por valores de 1 até 10.
Quando
o laço interno finalizar, a linha 9 irá incrementar a variável tabuada,
indo para 2, e o laço
externo será retomado. O ciclo se repetirá agora, pois a
tabuada será calculada para o valor 2,
multiplicando pelos valores de 1 até 10
do laço interno. Em suma, o primeiro laço while irá executar
10 vezes,
enquanto que o segundo while irá executar 100 vezes, pois serão 10 vezes
para cada valor
da tabuada (10x10).
Vamos
analisar linha a linha. Na linha 2, inicializamos a variável de controle do
primeiro laço.
Dentro do primeiro while (linha 3), precisamos começar
inicializando a variável de controle (linha 5)
do segundo while que está
aninhado (linha 6). Na linha 8, temos o incremento da variável de controle
https://univirtus.uninter.com/ava/web/roa/ 29/33
26/11/2021 09:52 UNINTER
do
laço interno. Na linha 9, incrementamos a variável de controle do laço externo
(atenção à
indentação!).
É
interessante frisarmos que é possível refazer o mesmo exercício empregando
laços for. Como
ambos os loops são finitos, o for se
encaixará muito bem nessa implementação também. Veja como
ficaria o algoritmo a
seguir.
Para
finalizarmos, podemos inclusive misturar while e for. A seguir o
laço externo foi
implementado com while e o interno com for (o
inverso também seria válido).
5.1 EXERCÍCIOS
5.1.1 Exercício
Escreva
um algoritmo que repetidamente pergunte ao usuário qual sua idade e seu sexo (M
ou
F). Para cada resposta o programa deve responder imprimir a mensagem: “Boa
noite, Senhor. Sua
Python
https://univirtus.uninter.com/ava/web/roa/ 30/33
26/11/2021 09:52 UNINTER
5.1.2 Exercício
Python
5.1.3 Exercício
Escreva
um algoritmo que imprima na tela as horas no formato H:M:S dentro de um intervalo
definido pelo usuário. O usuário deverá delimitar o intervalo de horas que
deseja imprimir (por
Python
https://univirtus.uninter.com/ava/web/roa/ 31/33
26/11/2021 09:52 UNINTER
5.1.4 Exercício
Escreva
um algoritmo que obtenha do usuário uma frase de tamanho entre 10 e 30
caracteres
(faça a validação desse dado).
Após a
frase ter sido digitada corretamente, faça a impressão dela na tela da maneira
exata
como foi digitada e, em seguida, remova os espaços da frase e imprima
novamente, sem espaços.
Python
FINALIZANDO
aplicação em linguagem
Python. Aprendemos sobre a estrutura do enquanto/while, do para/for e
laços aninhados.
Reforçamos
que tudo o que foi visto nesta aula continuará a ser utilizado de maneira
extensiva
ao longo das próximas, portanto, pratique e resolva todos os
exercícios do seu material.
REFERÊNCIAS
https://univirtus.uninter.com/ava/web/roa/ 32/33
26/11/2021 09:52 UNINTER
FORBELLONE,
A. L. V. et al. Lógica de programação: a construção de algoritmos e
estruturas de
MATTHES, E.
Curso Intensivo de Python: uma introdução prática baseada em projetos à
MENEZES, N.
N. C. Introdução à programação Python: algoritmos e lógica de
programação
PERKOVIC, L.
Introdução à Computação Usando Python: Um Foco no Desenvolvimento de
PUGA, S.;
RISSETI, G. Lógica de Programação e Estrutura de Dados. 3. ed. São
Paulo: Pearson,
2016.
https://univirtus.uninter.com/ava/web/roa/ 33/33