Desafio Python
Troca de variáveis e desempacotamento em uma função
Enunciado
Escreva uma função min_max que recebe uma lista de números e retorna uma tupla (minimo, maximo). Em seguida, use desempacotamento para atribuir o resultado a duas variáveis minimo e maximo, e depois troque os valores dessas variáveis usando a, b = b, a. Imprima os valores antes e depois da troca.
Requisitos
- A função
min_maxdeve retornar uma tupla com o menor e o maior valor. - Use desempacotamento para obter
minimoemaximoa partir do retorno. - Realize a troca de variáveis sem variável auxiliar.
- Imprima os valores antes e depois da troca no formato especificado.
Código inicial
def min_max(numeros):
# Seu código aqui
pass
# Seu código aqui
Saída esperada
Antes: minimo = 3, maximo = 9
Depois: minimo = 9, maximo = 3
Ver dica
Use as funções embutidas min() e max(). Para trocar, minimo, maximo = maximo, minimo.
Mostrar solução
def min_max(numeros):
"""Retorna uma tupla (minimo, maximo) da lista."""
return (min(numeros), max(numeros))
# Lista de exemplo
valores = [5, 3, 8, 1, 9, 2]
# Desempacotando o retorno da função
minimo, maximo = min_max(valores)
print(f"Antes: minimo = {minimo}, maximo = {maximo}")
# Trocando os valores
minimo, maximo = maximo, minimo
print(f"Depois: minimo = {minimo}, maximo = {maximo}")
Passo a passo
- Definimos
min_maxque calcula o mínimo e o máximo da lista usandomin()emax(), e retorna uma tupla. - Criamos uma lista
valorescom números variados. - Chamamos
min_max(valores)e desempacotamos o retorno nas variáveisminimoemaximo. - Imprimimos os valores antes da troca.
- Trocamos os valores com
minimo, maximo = maximo, minimo, que cria uma tupla à direita e a desempacota à esquerda. - Imprimimos os valores depois da troca.
Por que funciona
A função retorna uma tupla, que é imutável, mas pode ser desempacotada. A troca de variáveis explora a criação de uma tupla temporária implícita: (maximo, minimo) é avaliada primeiro, depois desempacotada nas variáveis, trocando os valores sem variável auxiliar.
Erros comuns
- Esquecer de retornar tupla: se
min_maxretornarmin(numeros), max(numeros)sem parênteses, ainda é uma tupla, mas se retornar apenas um valor, o desempacotamento falha. - Tentar desempacotar sem parênteses:
minimo, maximo = min_max(valores)está correto;minimo, maximo = min_max(valores),criaria uma tupla aninhada. - Modificar a tupla retornada:
min_max(valores)[0] = 10geraTypeError. Lembre-se da imutabilidade.
Outra forma de resolver
Poderia usar uma variável auxiliar para a troca: temp = minimo; minimo = maximo; maximo = temp. Mas a troca por desempacotamento é mais pythônica e evita erros.
Saída esperada
Antes: minimo = 3, maximo = 9
Depois: minimo = 9, maximo = 3