Exercícios Resolvidos de Laços de repetição

Ver Teoria

Enunciado

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