Laços de repetição

Ver Todos os Exercícios

Teoria

Cara, imagina que você precisa exibir na tela uma sequência de 100 números. Já pensou se você tivesse que escrever a função print 100 vezes?! Ia ser mó doideira. Pra isso, existem os laços de repetição. São estruturas que permitem que um bloco de código fique se repetindo várias vezes, e alterando seu comportamento durante cada repetição. As duas estruturas de repetição em Python são o While, e For.

Laço While

Se você se lembrar bem, na estrutura condicional, usando o if, somos capazes de executar ou não um bloco de código dependendo de uma condição booleana.

A estrutura while tem um formato muito parecido.

Você só precisa colocar uma expressão booleana na estrutura e o bloco de código dentro da estrutura vai ser executado repetidamente até que a condição seja falsa. Repara que é muito possível que essa condição nunca fique falsa, caracterizando um loop infinito.

Se você executar esse código, vai ver que seu programa vai exibir o texto “é verdade” pra sempre. Literalmente, eu não tô zoando. Você vai ter que finalizar o programa manualmente, porque a condição 1

Olha, nesse caso o laço não vai se repetir pra sempre. A cada vez que o código se repetir, a variável “contador” vai ter um valor diferente. Esse código resolve o problema que a gente tinha falado no início! Ao executar esse programa, será exibida uma sequência de 1 a 100. Quando o valor da variável “contador” for maior que 100, a repetição vai terminar, sacou?! Agora vamos falar do for.

Laço For

Diferentemente do laço while, que é baseado em condições booleanas e pode até ser um loop infinito, o laço “for” tem um número determinado de passos. Você pode dizer, antes mesmo da repetição começar, quais vão ser o valor de uma determinada variável a cada loop. Ficou confuso? Calma que eu te mostro, mano!

Ao executar esse código, o resultado é esse aqui:

Viu? O mesmo código se repetiu, mas a cada repetição o valor da variável foi alterado na sequência da lista que é passada na estrutura. Mas você não tem que fazer a lista manualmente sempre. Existem algumas funções que criam listas pra gente ali de forma automática!

Esse código faz a mesma coisa que a gente fez com o while, ele exibe todos os números de 1 a 100. Repara que na função range() a gente passou 1 e 101. Isso é porque o segundo intervalo não tá incluso, blz? Se fizer range(1, 100), só vai exibir até o 99!

Mas também não é obrigatório usar a variável da estrutura. Olha:

Viu? A variável muda a cada loop, mas a gente cagou pra ela e não usou.

Mas se liga que eu usei a função range() de outra forma. Se você passar só um valor, ele faz no intervalo de 0 até o valor que você passar -1, beleza?!

Laço For com string

Doido, lembra daquele papo de strings serem bem parecidas com listas??! Então… As strings também funcionam no laço for, e a gente consegue iterar pelas letras de uma string. Se liga nesse exemplo prático:

A gente colocou a string no lugar da lista, e o resultado é que, a cada repetição, a variável que a gente criou vai ter uma das letras da string dentro. Se a gente executar esse programa, o resultado vai ser esse:

Ou seja, executamos um print() pra cada letra, sacou??! Também, queria enfatizar que o nome da variável do for é arbitrário, você que escolhe. Reparou que eu tava usando “variável” e depois mudei pra “letra”?? Então! Qualquer nome funciona, ok? E por enquanto é só isso.

Te vejo nos exercícios!!!

Laço For

Laço For com string

Exercícios Resolvidos

Exercício Resolvido #1

Faça um programa que percorre uma lista com o seguinte formato: [['Brasil', 'Italia', [10, 9]], ['Brasil', 'Espanha', [5, 7]], ['Italia', 'Espanha', [7,8]]]. Essa lista indica o número de faltas que cada time fez em cada jogo. Na lista acima, no jogo entre Brasil e Itália, o Brasil fez 10 faltas e a Itália fez 9.

O programa deve imprimir na tela:

a) o total de faltas do campeonato

b) o time que fez mais faltas

c) o time que fez menos faltas

Passo 1

Ok, aqui a gente tem um aninhado de listas (uma dentro da outra). Bom, o que vamos fazer é iterar sobre cada uma delas. Vamos começar criando nossas variáveis e copiando a lista do enunciado e salvando com um nome que a gente vai escolher, e eu vou chamar de “jogos”.

Agora, a primeira coisa a fazer é contar quantas faltas cada time cometeu, levando em consideração que os times jogaram mais de uma vez. Antes de começar a resolução de fato, eu queria te lembrar que, em programação, existem várias respostas possíveis. Se você pensar em outra forma de fazer a mesma coisa e funcionar de boas, então também é uma resposta certa, ok?!

Beleza, vamos continuar! Vamos criar duas variáveis de listas, onde a gente vai armazenar separadamente todos os times do campeonato e seu respectivo número de faltas. Além disso, vamos criar também uma variável onde a gente possa guardar todas as faltas cometidas no campeonato, que é pedido na letra a.

Se liga que eu comecei colocando o número de faltas igual a zero. Isso porque a gente não sabe quantas faltas vão ter no total, mas a gente vai somando nesse número todas as faltas de todos os jogos. No fim, o resultado vai ser o total, beleza?!

Passo 2

Agora que já criamos as variáveis que vamos usar, bora fazer um for pela lista de jogos pra gente conseguir analisar cada jogo individualmente.

A gente precisa colocar dentro da variável “lista_times” o nome de todos os times do campeonato, sem repetir. Pra isso, primeiro a gente precisa checar se o time já está na lista. Se não estiver, a gente adiciona ele lá! Vamos pensar, por enquanto, só no primeiro time de cada jogo.

O que a gente fez foi checar se o primeiro time do jogo (jogo[0]) está dentro da lista que a gente criou (lista_times). Se NÃO estiver, a gente coloca ele lá, e coloca também o número de faltas cometidas por aquele time na lista “lista_faltas”. A ideia é que a gente separe em duas listas, mas na mesma ordem, o número de faltas e o nome do time. Mas e caso já tenha? Bom. Se o time já estiver na lista de times, a gente pode só acrescentar o número de faltas na lista de faltas.

Se liga que eu usei a função lista.index() ali na penúltima linha. Isso é porque eu quero saber em qual ordem o time tá na lista_times. Já que o número de faltas tá na mesma ordem da lista_times, eu posso usar o mesmo índice. Beleza! Agora, a gente só precisa fazer a mesma coisa pro segundo time!

Eu copiei e colei o código que tava tratando os times da esquerda de cada jogo e mudei tudo de 0 pra 1, assim o código funciona também consideranto os times da direita. Mas, cara... Ficou bem repetitivo, né?! A gente executou um mesmo código e a única coisa que a gente mudou foi um número de 0 pra 1. Isso me lembra o laço de repetição for-range!

O laço for-range repete o código dentro dele, mas a cada loop a variável que a gente criou (nesse caso “i”) é um número diferente. Como usando range(2), o código vai se repetir com i = 0 e depois com i = 1. No fim, é exatamente a mesma coisa que a gente tinha feito antes, mas a gente escreveu bem menos!

Show! Até aqui a gente conseguiu separar todos os dados em duas listas. No fim, desse código, terminamos com as variáveis assim:

Se liga bem na ideia das listas lista_faltas e lista_times estarem na mesma ordem. Significa que o Brasil cometeu 15 faltas, a Italia 16 e a Espanha 15 também. Parece tudo ok, mas a gente não mexeu na faltas_totais. Era pra faltas_totais ser igual a 15+15+16 = 46, mas a gente não mexeu nela no código. Precisamos corrigir isso!

Se liga na linha de número 11 (coloquei o número das linhas pra você não precisar contar

Beleza! Agora que nossos dados estão todos prontos, vamos usar eles pra fazer as verificações necessárias nos itens b e c.

Passo 3

A gente precisa saber qual time tem mais faltas e qual tem menos. Bom, a gente tá ligado que o que tem mais falta é a Itália, mas precisamos verificar com códigos. Outra coisa é que o Brasil e a Espanha estão empatados. Nesse caso, tanto faz qual dos dois o nosso programa devolva, ok?! Mãos a obra! Vamos começar criando as variáveis que vão guardar o time de mais faltas e o de menos faltas.

E pra começar, eu coloquei os dois sendo igual ao primeiro dos times na lista lista_times. Isso pode parecer meio confuso, mas eu te explico. A ideia é que a gente tem que comparar todos os elementos das listas, mas pra isso a gente precisa de alguma referência. A ideia é que a gente pode fazer um for e a cada loop, checar se o time atual tem mais faltas que o mais_faltas, ou se tem menos faltas que o menos_faltas. Mas como a gente tem as informações separadas em duas listas, a gente tem que fazer o for em duas listas simultaneamente. Faremos isso com o laço for-zip.

Dentro desse for, na primeira vez as variáveis vão ser time = “Brasil” e faltas = 15. Depois, “Itália” e 16. Por fim, “Espanha” e 15. Só pra enfatizar, as duas listas são percorridas simultaneamente, ok?!

O que a gente tá fazendo é comparando as faltas, mas salvando nas variáveis mais_faltas e menos_faltas o nome do time correspondente, e não o número de faltas. Uma última ressalva, no entanto, é que as variáveis foram inicializadas já com o primeiro time. A gente não precisa comparar o primeiro time com o primeiro time, saca?! Comparar o time com ele mesmo é doideira (apesar de funcionar)... Por isso, o ideal é a gente comparar somente com todos os outros times, do segundo em diante.

Beleza, agora no fim do nosso programa todas as variáveis vão estar com os valores certinhos, prontos pra gente exibir pro usuário!

Passo 4

Agora, vamos exibir pro usuário, usando a famosa função print().

Caramba! Esse programa ficou grande, né?! Mas pelo menos tá funcionando huahahahha! Até a próxima, doido!

Resposta

Exercício Resolvido #2

Ao executar o seguinte programa, o que será exibido?

Passo 1

Fala aí! A gente precisa dar uma analisada no código pra qual vai ser o resultado. O importante a se notar nessa questão é o uso do range() de uma forma que talvez você não tenha notado. O range funciona exatamente como os intervalos em listas e strings. No primeiro parâmetro, recebe um valor inicial, no segundo, um valor final. Já no terceiro, recebe o passo que deve ser dado a cada loop pra chegar no valor final. Só pra você sacar bem, vou te mostrar na prática como intervalos são gerados com a função range().

Não costumamos usar essa notação em programas reais, mas é útil pra gente visualizar. Se executar esse código, será exibida a lista [0,1,2,3,4]. Isso porque nós só passamos um parâmetro. Quando passamos 2, são considerados como intervalos.

Porém, os intervalos são inclusivos na esquerda e exclusivos na direita. Isso significa que o último digito do intervalo não será incluído no resultado (nesse caso, o 5 não foi pra lista final).

Já no ultimo caso, quando passamos três parâmetros, também podemos escolher o passo no qual o intervalo vai aumentar ou diminuir. No exemplo (mesmo números do enunciado), a lista retornada foi -1 e -3.

De forma análoga, o for do enunciado vai repetir o código print(frutas[k]) com k sendo -1 e depois sendo -3. Com isso, o programa exibirá “uva” e “laranja”.

Resposta

“uva” e “laranja”.

Exercício Resolvido #3

Dado uma string com uma frase informada pelo usuário (incluindo espaços em branco), conte: a) quantos espaços em branco existem na frase.

b) quantas vezes aparecem as vogais a, e, i, o, u.

Passo 1

Fala aí, doido! Pra começar, a gente precisa perguntar pro usuário uma frase. E pra isso a gente usa a função input().

A frase digitada pelo usuário vai ficar salva na variável que a gente chamou de “frase” (bem criativo haha). Agora, precisamos contar quantos dos caracteres dessa string são vogais ou espaço. Primeiro, vamos criar nossas variáveis que vão servir de contadores.

Show! Com tudo preparado, vamos por a mão na massa!

Passo 2

Agora a gente precisa checar, letra por letra, se é vogal ou espaço. Pra isso, podemos usar um laço de repetição for.

Essa estrutura vai repetir o código em seu corpo uma vez a cada letra da frase, atualizando a variável “letra” a cada loop. Então, a gente só precisa checar se a variável guarda uma vogal ou um espaço. Vamos começar com o espaço, que é mais fácil.

Pronto! Agora, sempre que a letra for um espaço, vai ser acrescentado uma unidade na variável “espacos”. Também precisamos checar se é uma vogal, e vamos usar o operador in pra isso.

Caso você não recorde bem, esse operador checa se uma letra está dentro de uma string. Malandramente eu criei uma string com todas as vogais, e o operador diz de a letra está dentro da string. Nesse caso, se estiver, é uma vogal. Mas se liga que o operador não é comutativo, isso significa que a letra tem que ficar à esquerda e a string à direita do “in”, ok?!

Passo 3

Beleza! Agora a gente já tem os dados necessários, a gente só precisa exibir pro usuário. Pra exibir, vamos usar a função print().

Pronto! Finalizamos o exercício! =)

Resposta

Exercício Resolvido #4

Faça um programa que inicialmente leia a quantidade de candidatos do Rio de Janeiro de um concurso. A seguir, para cada candidato, o programa deverá ler seu nome e sua nota, exibindo se o candidato foi aprovado ou reprovado. Para ser aprovado, o candidato deverá ter nota superior a 80. Ao final o programa deverá exibir a quantidade de aprovados e a quantidade de reprovados e a nota média dos candidatos.

Passo 1

E aíi! Mano, tu conseguiu sacar que a gente só precisa escrever o código pra ler o nome e a nota do candidato uma vez e dizer se ele foi aprovado, e depois a gente fica repetindo esse código um montão de vezes? É isso que a gente vai fazer!

Mas vamos começar lendo a quantidade de repetições que a gente tem que fazer. E, com certeza, esse é um número inteiro, né?!

O que é SUPER importante tu notar é que o número de vezes que o código precisa se repetir é justamente o número de candidatos no concurso! Bora escrever esse código aí!

Passo 2

Cara, o ideal é a gente usar o for só quando estiver usando listas, e usar o while quando não. Nesse caso, bora usar o while! Nossa estrutura fica assim:

Se liga que, a cada loop, a gente tá diminuindo uma unidade na variável “contador” E o while fica repetindo enquanto “contador” for maior que 0. Ou seja, só vai parar quando for 0. E aí vai ter repetido exatamente a quantidade de vezes que a gente quer!

Beleza, agora que temos a estrutura, bora preparar nosso código!

Passo 3

O código que a gente quer que repita é perguntar o nome candidato e a nota dele. Pra isso, vamos usar dois inputs.

Pronto! Mas ainda não acabou. Precisamos verificar e dizer se esse candidato passou ou não. Pra isso, vamos usar uma condicional (if).

Beleza! Até aqui deu pra chegar. Mas o enunciado também tá pedindo pra gente calcular a quantidade de aprovados, de reprovados e a nota média de todos os candidatos!

A lágrima quase desceu, mas calma! A gente vai conseguir!

Passo 4

Se liga, tudo que tá dentro do while vai ser repetido a cada loop. Se a gente quer salvar algum dado que não seja reiniciado a cada loop, precisamos definir fora do while. Então, vamos criar algumas variáveis fora do loop.

Pronto! No início do programa a gente definiu as variáveis “aprovados”, “reprovados” e “media” como zero. A cada loop a gente vai atualizando elas, e aí no final do programa a gente vai ter o total, sacou?

Então, a cada candidato que for aprovado, a gente acrescenta um na variavel “aprovados”. Vamos fazer a mesma coisa também pros reprovados.

Prontinho! Agora, a cada loop as variáveis de aprovados e reprovados vão ser atualizadas, e no fim a gente vai ter o total de cada. Mas ainda falta calcular a média! Vamo lá! Força, guerreiro!

Passo 5

Primeiro, bora pensar sobre o que é a média.

Bom, a média é a o somatório de todas as notas dividido pelo total de candidatos. A gente pode fazer o seguinte: a cada loop a gente soma a nota do candidato. No final do programa, a gente divide esse somatório todo pela quantidade total de candidatos, sacou? Então, bora fazer o somatório!

Pronto! Agora, no fim do programa a gente vai ter, na variável “media”, o somatório das notas. Precisamos dividir, no fim, pelo total de candidatos. Mas tu reparou que a gente não sabe mais o total de candidatos? A cada loop a gente mexeu na variável “contador”, então no fim a gente não vai mais saber quantos candidatos tinham. Então, vamos criar mais uma variável!

Pronto! Criando uma outra variável chamada total_candidatos e fazendo backup do contador antes da gente mexer nele, a gente consegue salvar a quantidade de candidatos pra usar no final! Repara que eu já coloquei no final a gente tinha o somatório das notas dentro da variável “media”. Agora, eu to atualizando na última linha essa variável! A média passa a ser o somatório dividido pelo total de candidatos! Agora sim!!!

Bora exibir as informações que a gente coletou no final do programa!

Passo 6

Pra exibir alguma coisa pro usuário, tu já sabe bem! A gente vai usar o print(), mano! Se liga só:

Pronto! Exibimos todas as informações que o enunciado pediu no final. Também usamos ali formatação de string, que a gente falou sobre no tópico Operações com Strings. Se tu não tá ligado naquele % ali dentro dos prints, seria o ideal tu dar uma olhadinha lá! Vai ser rapidinho, prometo.

Mas antes da gente finalizar o exercício, bora fazer os testes pra ver se ta tudo ok!

Passo 7

Coloquei o programa pra executar e escrevi algumas entradas pra testar.

Malandramente eu coloquei só 3 candidatos, se não eu ia ter que ficar digitando nomes e notas por maior tempão!

Mas, olha pelo lado bom, FUNCIONOU TUDO!

É isso! Vou ali descansar e já volto no próximo exercício! Valeuuuuu!

Resposta

Exercício Resolvido #5

Reescreva o seguinte laço for com um laço while.

Passo 1

Opa! Fala aí! Nesse exercício, a ideia é certificar que a gente tá voando nas diferenças entre os laços for e while.

Então, pra gente reescrever como um laço while, precisamos entender bem o que tá acontecendo nesse for. A gente tá ligado que a função range() cria uma lista com todos os elementos no intervalo entre os valores que a gente passar como parâmetro, incluindo o primeiro, mas não incluindo o último! Por isso, range(1, 10) vai corresponder a seguinte lista:

Obs: tu não precisa lembrar como faz pra ver o resultado do range(), só precisa lembrar do funcionamento. Eu só mostrei pra você entender, não pra decorar, ok?!

Beleza! A quantidade de vezes que o laço for se repete é a mesma quantidade de elementos da lista que a gente tá usando na iteração. Nesse caso, a lista que estamos usando é essa que a gente acabou de ver do range, então são 9 vezes.

Outra coisa sobre o laço for é que, a cada loop, o valor da variável de iteração (nesse caso, a variável i) é igual a um elemento diferente da lista a cada iteração. No código do enunciado, o professor criou uma variável s = 0 fora do loop, e a cada loop ele acrescentou i na variável s. Pô, se i é um elemento da lista a cada repetição, então no fim do programa a gente vai ter o somatório da lista na variável s.

Substituindo i pelos elementos da lista:

Show! Agora sacamos o que o loop tá fazendo. Precisamos repetir a proeza utilizando, dessa vez, um laço while. Bora lá!

Passo 2

Cara, a gente precisa calcular o somatório de todos os números entre 1 e 9. Pra isso, vamos criar uma variável pra armazenar o somatório igual o professor fez com o laço for:

Mas vamos criar também uma variável chamada “i”, e vamos fazer ela variar entre 1 e 9. Aí a gente repete o código s = s + i até i ser maior que 9.

Pronto! Mas se a gente executar esse programa, ele NUNCA vai terminar. NUNCA!

Isso é porque a gente não tá variando o i. O i começou o loop sendo igual a 1, e a condição i

Prontinho! Só dando uma revisada. Olha de novo o que acontecia com o s no for do professor:

Percebe que nosso while tá fazendo exatamente a mesma coisa? A cada loop, a gente acrescenta 1 na variável i, e depois soma esse i no s. Deu tudo certo. Mas repara, mano, que nem no código do professor e nem no nosso vai exibir nada! Não tem nenhum print() em nenhum dos códigos. Mas a ideia é essa mesmo, conseguimos imitar o for do prof com um while!

Mas antes de finalizar o exercício, queria te mostrar uma coisa.

Passo 3

Mano, exercícios de programação têm várias respostas possíveis, ok?! Olha o código que a gente escreveu até aqui:

Eu vou te mostrar que dá pra escrever de outra forma. Lembra que o loop precisa se repetir 9 vezes?! Então… De 1 até 9 são 9 vezes, mas de 0 até 8 também são! Olha:

Cara, esse código faz EXATAMENTE a mesma coisa que o anterior. No fim, o resultado dentro de s vai ser igual ao último código, e igual ao do professor também. Se você fez assim, ou de qualquer outra forma que o s termina sendo igual a 45, tá certo, jae?!

Obs: se liga que eu mudei a ordem das linhas dentro do while.

Agora sim a gente finalizou o exercício! Te espero no próximo, doido!

Resposta

Exercício Resolvido #6

Escreva um programa que pergunte um número n para o usuário e exiba todos os seus divisores.

Passo 1

Fala aí, meu parceiro! Maninho, a gente precisa descobrir todos os divisores de um certo número. Mas como podemos fazer isso?!

Bom, uma ideia é a gente testar todos os números! A gente pode usar um laço de repetição e verificar todos os números de 1 até n, checando se são divisores. Se forem, a gente exibe, sacou?? Relaxa, a gente vai chegar lá! Mas primeiro, vamos começar perguntando o número pro usuário. Pra isso, bora usar a função input().

Mas se liga que a gente usou a função int() também. Isso porque a função input() sempre retorna string, mas a gente espera que a entrada seja um número inteiro, por isso usamos a função int() ali, ok?

Passo 2

Beleza, agora que sabemos o número n, precisamos criar uma estrutura de repetição que varie de 1 até n-1. Vamos usar o laço for!

Dentro do escopo do laço for, a variável i vai ser igual a 1, depois 2, depois 3, assim por diante… Lembrando que vai até n-1, ok?! i não vai ser igual a n nunca, porque a função range() é exclusiva na direita. Pros amantes de cálculo, o intervalo da função range ali é [1,n). Show! Agora precisamos checar se o número i é divisor de n ou não. Mas como checamos isso???

Relaxa, doido! É de boa! Olha esse exemplo:

Nessa continha, a gente dividir 10 por 2, e deu 5. Mas reparou que o resto deu 0? Isso significa que 2 é um divisor de 10. Vamos escrever essa mesma lógica em Python, mas em vez de usar 10 e 2, a gente usa n e i.

Pronto! A gente tá verificando se o resto da divisão de n por i é 0 e, se for, então i é divisor, sacou?? Beleza! Até aqui tá tranquilo!

O enunciado tá falando pra gente que quando o número for divisor, a gente precisa exibir. E pra exibir a gente usa a função print()! Fica +/- assim:

Pronto! Agora, se i for divisor, ele vai ser exibido. Só pra enfatizar, o código dentro do for vai se repetir várias vezes, e a cada vez a variável i vai ter um valor diferente, variando entre 1 e n, sacou? Por isso, depois de executar esse código, TODOS os divisores vão ser exibidos!

Passo 3

Ok, a gente já escreveu nosso código. Mas antes de entregar a prova, a gente PRECISA testar, ok? Vamos executar pra ver se tá tudo funcionando de boas!

Executei o código e digitei o número 10, e o programa exibiu 1, 2 e 5, que são os divisores de 10. Parece que funcionou de boas, cara!

Show! Agora é só entregar a prova e ser feliz! Valeuuuu

Resposta

Exercício Resolvido #7

Escreva um programa que determine todos os números de 4 algarismos que possam ser separados em dois números de dois algarismos que somados e elevando-se a soma ao quadrado obtenha-se o próprio número. Exemplo: 3025 = (30 + 25) = 55, e 55**2 = 3025 .

Passo 1

E aí, doido! Nesse exercício a gente precisa fazer uma verificação pra cada número entre 1000 e 10000.

Mas, pra nossa sorte, existem estruturas de repetição que podem fazer isso pra gente com tranquilidade.

Bora começar escrevendo a estrutura de repetição. Vamos usar o laço for, já que a gente sabe o intervalo de repetição (também dá pra fazer com o while, é só uma questão de escolha).

É importante sacar que o 10000 NÃO tá incluído, beleza?! A função range() inclui o menor valor, mas não inclui o maior. Show! Agora, a gente precisa digitar o código que faz a checagem que o enunciado diz. Vamo lá!

Passo 2

Só pra revisar, o que tá acontecendo no laço for é que a variável i que a gente criou na estrutura vai variar entre 1000 e 9999 (o 10000 não tá incluso). A variável i também poderia ter qualquer nome, a gente escolhe i só por comodidade, jae? hahaha show!

Agora, o enunciado tá falando pra gente somar os dois primeiros dígitos com os dois últimos. Pra isso, vamos separar o número i nos dois outros números pra gente conseguir somar. Bora dar uma segunda olhada no exemplo que tá no enunciado.

Se a gente dividir esse número por 100, vai ficar assim:

Beleza… Sacou que a gente conseguiu dividir o número no meio com a vírgula ali? Pra gente pegar os números à esquerda da vírgula, a gente só precisa pegar a divisão inteira. E, os dígitos da direita, a gente pega com o resto da divisão!

E assim a gente consegue separar o número grande no meio de forma matemática! Bora escrever essa lógica em Python, generalizando pra i.

Pronto! Agora, a gente tem o número i dividido em duas partes. Agora, precisamos verificar se a soma das partes ao quadrado é igual ao i.

Passo 3

Show! Agora que a gente tem as duas partes, bora montar nossa estrutura condicional, seguindo as regras que foram ditas no enunciado!

Foi! Caso a soma das partes ao quadrado seja igual a i, a estrutura vai ser executada. Dentro do if a gente coloca um print() mostrando o número i.

Show! Com esse código, todos os números que seguem as regras ditas no enunciado vão ser exibidos quando a gente executar o programa. Bora testar??

Opa! Depois de executar, o resultado foram esses três números e todos eles respeitam as regras do enunciado. SIGNIFICA QUE FUNCIONOUUUU!

Agora sim a gente finalizou o exercício! Te espero no próximo, doido!

Resposta

Exercício Resolvido #8

Escreva um programa que recebe uma frase do usuário e exibe a mesma frase sem nenhuma vogal. Ex:

Passo 1

Fala aí, doido! A ideia desse exercício é sacar que as strings são como listas em vários aspectos, e por isso também é possível iterar por strings! Mas você pode estar se perguntando que diabos significa iterar...

Relaxa, eu vou te lembrar! Iterar é usar a estrutura de repetição for. Lembra que quando a gente usa o for em uma lista, o código dentro do for se repete pra cada um dos elementos da lista??! Então… Também dá pra fazer isso com letras de uma string! Mas calma, vamos aos poucos. Bora começar perguntando a frase pro usuário.

Pronto! Agora, a gente vai fazer o loop. Mas não esquece que as variáveis que a gente cria dentro do loop, só ficam dentro do loop! Então, bora criar uma variável do lado de fora, antes da gente escrever a estrutura de repetição em si, beleza?!

Viu? Fizemos uma variável do tipo string, mas vazia. Ao longo do loop a gente vai atualizando ela, ok?! Show! Bora fazer o loop.

Passo 2

Cara, a ideia é a gente iterar por cada letra da frase, verificando se essa letra é ou não é uma vogal. Você vai entender melhor olhando o código! Se liga só:

A gente trata a string “frase” como uma lista e cria a variável “letra”. Dessa forma, a cada loop, a variável “letra” vai conter uma das letras da string. A ideia é a gente colocar essa letra na string “resposta” caso ela não seja uma vogal, ok?! Pra isso a gente precisa verificar se a letra é ou não uma vogal antes.

Mas calma, isso é tranquilo! A gente pode usar o operador in!

Beleza! A gente acabou de verificar se a letra é vogal. Se a letra estiver dentro da string que a gente criou ali, que só tem vogais, então é uma vogal! Mas não é isso que a gente queria. A gente quer consoantes apenas, certo? Bom.. A gente pode simplesmente negar a condição no if.

Prontinho! Agora, se não for vogal, então é consoante, certo?!

Ok, assumo que a gente podia ter colocado na string todas as consoantes, maiúsculas e minúsculas, e aí verificado sem o not. Daria no mesmo. Mas desse jeito é bem mais fácil, né? As vogais são mais fáceis de escrever. Quanto menos trabalho, melhor!

Show! Agora precisamos colocar a letra dentro da variável que criamos fora do loop.

Passo 3

Olha, se a letra for uma consoante, vamos concatenar com a string “resposta” (caso tu não lembra, concatenar significa unir strings).

Pronto! Agora, se a letra for consoante, ela vai ser concatenada com a resposta que a gente criou fora do loop. No fim do loop, a gente vai ter apenas as consoantes na variável resposta. Aí, a gente só precisa exibir! E pra exibir, bora usar a função print() FORA do loop.

Se ligou que o alinhamento do print() tá igual ao do for? Isso significa que a gente colocou o print() fora do loop, isso é importante a gente só quer que o print seja executado uma vez no final, ok?! Show, agora bora testar...

Passo 4

Bora executar o programa e verificar se tá tudo funcionando de boas.

AEEE funcionou de boas, cara! Que maravilha, hein.

A gente se vê no próximo exercício! Valeuuu.

Resposta