Exercícios resolvidos e explicados#

Com o conteúdo que vimos até agora, é possível resolver todos os exercícios sem ajuda. No entanto, as vezes nós aprendemos muito mais analisando um exemplo real. Vamos aos exercícios!

Exercício 1: Verificando a idade do usuário#

Crie um programa que peça ao usuário para digitar seu nome e idade e armazene essas informações em variáveis. Em seguida, use a estrutura de condição “if” para verificar se a idade do usuário é maior ou igual a 18 e, se sim, imprima “Você é maior de idade” e, caso contrário, imprima “Você é menor de idade.”

Uma das maiores dificuldades na hora de resolver exercícios de programação é na interpretação. Vamos primeiro separar tudo o que precisamos fazer, passo a passo:

  1. Criar uma variável para armazenar o nome do usuário, utilizando a função input() para solicitar ao usuário que digite seu nome.

  2. Criar uma variável para armazenar a idade do usuário, utilizando a função input() para solicitar ao usuário que digite sua idade.

  3. Utilizar a estrutura de condição if para verificar se a idade armazenada na variável é maior ou igual a 18.

  4. Se a condição for verdadeira, imprimir "Você é maior de idade"

  5. Se a condição for falsa, imprimir "Você é menor de idade"

Transformando isso em código, temos o seguinte:

nome = input("Por favor, digite seu nome: ")
idade = int(input("Por favor, digite sua idade: "))

if idade >= 18:
    print("Você é maior de idade.")
else:
    print("Você é menor de idade.")

Algumas observações:

  • Na segunda linha, nós temos duas funções encadeadas, int() e input(). Como a regra é resolver primeiro o parênteses de dentro, a primeira coisa que roda nessa linha é o input(). Lembra que o input sempre retorna uma string? É por isso que precisamos fazer a conversão para int com a função int().

  • Por mais que o exercício tenha pedido para armazenar o nome do usuário, ele não pede para exibir o nome em nenhum momento. Por isso não coloquei nada na solução, mas poderia ser feito desta maneira: print(f"{nome}, você é maior de idade.")

Exercício 2: Continuando a digitar números#

Crie um programa que pergunte ao usuário se ele deseja continuar a digitar números. O programa deve continuar pedindo números até que o usuário digite “não”.

Esse exercício pode ser um pouco mais difícil pois ele não especifica quais funções você deve utilizar.

Sabemos que para perguntar algo ao usuário nós podemos utilizar o input(). Mas a parte de “O programa deve continuar pedindo números até que o usuário digite ‘não’” precisa de um pouco de interpretação.

Sempre que temos que fazer algo “até que X”, estamos falando de um loop. Dependendo da condição, pode ser um for ou while. Geralmente, se é uma contagem, ou uma listagem, o for acompanhado de um range() ou uma list resolve o problema. Mas neste caso a condição é mais específica, o usuário precisa digitar “não”. Estamos falando de um loop while.

Outra coisa implícita é que vamos precisar de uma variável de controle para o nosso loop. Devemos criar um nome para ela, que simbolize a nossa condição. O nome pode ser deseja_continuar.

Quando trabalhamos com loops while, é comum inicializar a variável de controle logo antes dele. Esta será nossa primeira linha de código!

  1. Inicializar uma variável de controle deseja_continuar com um valor diferente de “não”.

  2. Declarar um loop while, com a condição deseja_continuar != "não"

  3. Dentro do loop, utilizar a função input() para pedir ao usuário que digite um número.

  4. Opcionalmente, podemos imprimir o número digitado. (não é um requerimento do exercício)

  5. Utilizar a função input() para perguntar ao usuário se ele deseja continuar a digitar números. Armazenar a resposta na variável deseja_continuar

  6. Se a resposta for “não”, o loop será encerrado automaticamente, pois vai falhar a condição do while.

  7. Fora do loop, podemos exibir uma mensagem de saída, como “Você encerrou o programa.” (não é requerimento do exercício)

deseja_continuar = "sim"
while deseja_continuar != "não":
    num = int(input("Por favor, digite um número: "))
    print(num)
    deseja_continuar = input("Deseja continuar? (sim/não) ")

print("Programa finalizado")

Observações:

  • Nossa condição é extremamente restrita. Se o usuário digitar “Não” (com o N maiúsculo), ou “nao” (sem o ~) a condição de parada não será satisfeita e o loop vai continuar.

    • Existem algumas funções específicas para strings que poderiam nos ajudar com isso, mas não foram apresentadas ainda neste curso. Aos curiosos, estou falando do .upper() (para deixar tudo maiúsculo), .lower() (tudo minúsculo) e unidecode() (remover acentuação)

  • No texto “Deseja continuar? (sim/não)”, nós colocamos as opções de resposta como exemplo. Isto é uma boa prática para programas que rodam no terminal, pois o usuário sabe como o programa quer que ele responda.

A título de curiosidade, uma solução mais sucinta e mais compacta seria a seguinte:

while input("Deseja continuar? (sim/não) ") != "não":
    num = int(input("Por favor, digite um número: "))
    print(num)

Nesta solução, nós eliminamos completamente a variável de controle. Podemos fazer isso pois ela não é relevante para o que está acontecendo dentro do loop. O problema dessa solução é que a primeira mensagem que o programa exibe é a pergunta de “deseja continuar?” mesmo antes de você começar a digitar números.

Resolvi mostrar essa solução alternativa para você ver que podemos rodar funções até mesmo nas nossas condições de loop.

Exercício 3: Calculando a média aritmética de uma lista#

Crie uma função que calcule a média aritmética de uma lista de números. Utilize a estrutura de repetição “for” e a função “range()” para percorrer a lista e calcular a soma dos números e, em seguida, divida essa soma pelo número de elementos na lista.

Para este exercício, podemos fazer o seguinte:

  1. Devemos criar uma função que recebe como argumento uma lista de números. Vamos chamá-la de calcular_media

  2. Dentro da função, precisamos de uma variável para armazenar a soma dos números na lista, inicializada com o valor 0. Vamos chamá-la de soma

  3. Precisamos utilizar uma estrutura de repetição for e a função range() para percorrer a lista de números.

    1. O jeito mais fácil de percorrer a lista seria fazer um for numero in lista_numeros, mas o exercício exige a utilização do range().

    2. Para o for funcionar com o range, precisamos saber quantos itens existem na lista. Utilizamos a função len() para isso.

    3. Dessa maneira, vamos acessar a lista a partir do índice de cada número, iniciando do 0 e indo até o último índice, assim: for indice in range(len(lista_numeros))

  4. Dentro do loop, adicionar cada número da lista à variável de soma.

  5. Fora do loop, devemos dividir a soma dos números pela quantidade de elementos na lista (len novamente), utilizando o operador / para a divisão. Vamos atribuir esse valor a uma variável chamada “media”

  6. Por último, retornamos a variável “media”

  7. Fora da função, podemos criar uma lista de números em uma nova variável, e imprimir o resultado da função calcular_media passando a lista como parâmetro.

def calcular_media(lista_numeros):
    soma = 0
    for indice in range(len(lista_numeros)):
        soma += lista_numeros[indice]
    media = soma / len(lista_numeros)
    return media

lista = [1, 2, 3, 4, 5]
resultado = calcular_media(lista)
print(resultado)

Lembrando que a criação de diversas variáveis é mais para ajudar você a entender o código e deixar ele legível.

Uma solução completamente válida poderia ser a seguinte:

def calcular_media(lista_numeros):
    soma = 0
    for i in range(len(lista_numeros)):
        soma += lista_numeros[i]
    return soma / len(lista_numeros)

print(calcular_media([1, 2, 3, 4, 5]))

Nesta solução, temos bem menos variáveis.

  • Removemos a variável media, já que não usamos ela em nenhum lugar, portanto podemos voltar o resultado da divisão diretamente.

  • Removemos as variávels lista e resultado, fora da função, pois podemos rodar a função diretamente na linha do print, e podemos passar a lista de variáveis diretamente também.

  • A variável indice muitas vezes é abreviada para apenas i ou idx (do inglês, index) em diversos programas reais.

O que podemos aprender com esses exercícios?#

Muitas vezes, a solução de um problema está em saber a ferramenta certa. Em alguns casos precisamos do input() para conseguir dados do usuário, precisamos do if e else para criar rotas alternativas em nosso código, precisamos do for e while para repetir pedaços de código, etc.

Outras vezes temos alguma restrição que nos impede de utilizar a ferramenta ideal (como no caso do exercício 3, onde tínhamos que usar o range() com o índice ao invés de iterar sobre a lista). Nesses casos, devemos usar a criatividade e solucionar o problema de outra maneira. Isso mostra como na programação existem diversas maneiras de fazer a mesma coisa. Quanto mais experiência você adquirir, mais rápido chegará em boas soluções para os problemas!