Lista de exercícios#
Como funciona#
Cada exercício terá um enunciado, e uma sugestão de solução feita por mim, que a princípio, ficará oculta. Basta clicar no botão para expandir a solução.
Minha recomendação é que você tente fazer sozinho e use a sugestão de solução somente para fins de consulta!
Os exercícios a princípio tem fim didático para estimular desenvolvimento do raciocínio lógico. No futuro terão desafios mais complexos envolvendo problemas mais próximos do mundo real.
Exercício 1 - «Olá mundo» personalizado#
Faça um programa que escreva o seu nome completo.
Show code cell content
print("Escreva aqui seu nome completo")
Escreva aqui seu nome completo
Exercício 2 - tipos de dados#
Qual é o tipo de dado (int
ou float
) do resultado de cada uma das operações matemáticas abaixo?
Dica
Busque pensar, refletir e responder (pode até ser mentalmente) antes de verificar a saída dos tipos no código. O importante é a reflexão, que leva ao desenvolvimento do raciocínio lógico, e não só a execução do código.
Exp 1 -> 8 ÷ 4 + 2 × 3
Exp 2 -> 15 - 4 × 2 + 10
Exp 3 -> (10 - 3) × (5 + 2)
Exp 4 -> 100 ÷ (5 + 5)
Exp 5 -> 23 + 4
Exp 6 -> 7 + 3 × (10 ÷ 2)
Exp 7 -> (8 + 2) × 3 - 5
Exp 8 -> 50 ÷ 5 + √16
Exp 9 -> 5 + √25 × 2 - 3
Exp 10 -> 20 - 4 × (√9 + 1)
Show code cell content
print(type(8 / 4 + 2 * 3))
print(type(15 - 4 * 2 + 10))
print(type((10 - 3) * (5 + 2)))
print(type(100 / (5 + 5)))
print(type(2**3 + 4))
print(type(7 + 3 * (10 / 2)))
print(type((8 + 2) * 3 - 5))
print(type(50 / 5 + 16 ** (1 / 2)))
print(type(5 + 25 ** (1 / 2) * 2 - 3))
print(type(20 - 4 * (9 ** (1 / 2) + 1)))
<class 'float'>
<class 'int'>
<class 'int'>
<class 'float'>
<class 'int'>
<class 'float'>
<class 'int'>
<class 'float'>
<class 'float'>
<class 'float'>
Exercício 3 - operações matemáticas#
Qual é o resultado das expressões do exercício 2 quando executadas no Python?
Faça na mão primeiro, e confira o resultado no código depois.
Dica
Lembre-se da tabela de precedência de operadores!
Show code cell content
print(8 / 4 + 2 * 3)
print(15 - 4 * 2 + 10)
print((10 - 3) * (5 + 2))
print(100 / (5 + 5))
print(2**3 + 4)
print(7 + 3 * (10 / 2))
print((8 + 2) * 3 - 5)
print(50 / 5 + 16 ** (1 / 2))
print(5 + 25 ** (1 / 2) * 2 - 3)
print(20 - 4 * (9 ** (1 / 2) + 1))
8.0
17
49
10.0
12
22.0
25
14.0
12.0
4.0
Exercício 4 - variáveis#
Crie três variáveis para armazenar as seguintes informações: seu nome, sua idade e seu hobby favorito.
Use f-strings para criar uma mensagem que inclua as três variáveis e imprima a mensagem no console.
Show code cell content
nome = "Ana"
idade = 22
hobby = "leitura"
mensagem = f"Meu nome é {nome}, tenho {idade} anos e meu hobby favorito é {hobby}."
print(mensagem)
Meu nome é Ana, tenho 22 anos e meu hobby favorito é leitura.
Exercício 5 - encontre o erro#
Você está trabalhando em um sistema para calcular o salário de um funcionário baseado em algumas variáveis, como o salário base, o bônus e os descontos. O código foi feito por outra pessoa e está apresentando um erro. Execute o código, identifique o erro e corrija-o. Justifique a sua correçao com um comentário #
acima do que foi corrigido.
Dica
Diante de mensagens de erro, leia a mensagem com calma! Vai te ajudar muito a identificá-lo e corrigir o problema.
salario_base = 3500.00
bonus = 500.00
Descontos = 300.00
salario_liquido = salario_base + bonus - descontos
print(f"O salário líquido é {salario_liquido}.")
Show code cell content
salario_base = 3500.00
bonus = 500.00
# Como Python é case-sensitive, `Descontos` é diferente de `descontos`
# A correção é renomear a variável `Descontos` para `descontos` na linha abaixo.
descontos = 300.00
salario_liquido = salario_base + bonus - descontos
print(f"O salário líquido é {salario_liquido}.")
O salário líquido é 3700.0.
Exercício 6 - validação código produto#
Suponha que uma empresa tem um código de produto no formato PROD-XXXX
, onde XXXX
são dígitos de 0 a 9, e ela deseja verificar se os códigos segue o formato correto. Por exemplo, PROD-1234
é válido, mas prod-1234
e PROD1234
não são.
Faça um programa que retorne se o código prod0000 é válido ou não, justificando sua resposta.
Show code cell content
produto = "prod0000"
# Contabilizando a quantidade de caracteres em cada produto
print(f"Quantos caracteres tem o código do produto? {len(produto)} caracteres.")
# Verificando se os produtos começam com PROD-
print(f"O código do produto começa com 'PROD-'? {produto.startswith('PROD-')}")
# Verificando se os produtos terminam com 4 dígitos
print(f"O produto termina com 4 dígitos? {produto[-4:].isdigit()}")
print("Conclusão: o código do produto não é válido pois não começa com PROD-")
Quantos caracteres tem o código do produto? 8 caracteres.
O código do produto começa com 'PROD-'? False
O produto termina com 4 dígitos? True
Conclusão: o código do produto não é válido pois não começa com PROD-
Exercício 7 - placas veiculares#
Você trabalha para o Detran/SP e recebeu uma tarefa de separar as partes (letras e números) de uma determinada placa de veículo no modelo antigo. Faça um código que automatize essa separação. Use a placa ABC-1234 como exemplo.
Show code cell content
placa = "ABC-1234"
letras = placa[:3]
numeros = placa[4:]
print(f"As letras são {letras} e os números são {numeros}")
As letras são ABC e os números são 1234
Exercício 8 - um texto e um crime#
Você fará o papel de detetive agora, e seu papel é desvendar a motivação de um crime!
Em um determinado caso de assassinato, foi deixada para trás uma pista com o motivo de tal ato. A pista é um texto misterioso que ninguém consegue decifrar. E você, como especialista em Python foi convocado para esta missão.
A pista é o texto Kg8vlk8jIU7D8nNbd0GG4F2aCa4gnb85oÇAcm9aBmc55mnbtBl39Cvbn3
.
Os peritos crimininais fizeram uma investigação prévia antes da sua chegada e eles trouxeram algumas dicas. Porém, não conseguiram decifrar a motivação do crime.
As dicas são:
A primeira letra da motivação parece estar escondida no quarto caractere da pista.
As outras letras estão dispersas de 5 em 5, no sentido de leitura (da esquerda para direita)
A motivação contém 8 caracteres.
Não há uma padronização de maiúsculo e minúsculo na palavra da motivação.
Com estas dicas, você, como especialista em Python com foco em resolução de crimes através de manipulação de strings, consegue resolver!
Qual foi a motivação do crime?
Show code cell content
pista = "Kg8vlk8jIU7D8nNbd0GG4F2aCa4gnb85oÇAcm9aBmc55mnbtBl39Cvbn3"
motivo = pista[3:-15:5].title()
print(f"O crime foi motivado por: {motivo}!")
O crime foi motivado por: Vingança!
Exercício 9 - análise de vendas#
Uma empresa de varejo quer analisar as vendas históricas de seus produtos para tomar decisões estratégicas. As vendas são armazenadas no seguinte formato, com nome do produto, quantidade vendida e preço unitário em R$:
vendas_diarias = (
["Produto A", 10, 100],
["Produto B", 5, 250],
["Produto C", 2, 150],
)
9.1 - As informações de vendas diárias são mutáveis ou imutáveis? A estrutura de dados usada é a mais adequada? Justifique sua resposta.
Resposta 9.1
A estrutura usada para vendas diárias é uma tupla, portanto, imutável. Não é a estrutura mais adequada, pois não permite a inserção de novas vendas na estrutura.
A estrutura usada para armazenar cada informação dos produtos é uma lista, portanto mutável. Também não é a estrutura mais adequada pois permite uma certa flexibilidade que pode ser indesejada, como, por exemplo, adicionar ao produto A um item a mais de categoria e os outros produtos não terem.
Além disso, sendo listas, é possível não só acrescentar itens como alterá-los após a criação da estrutura de vendas. Como são dados históricos, não há motivos para tais alterações, sendo uma lista uma estrutura mutável indesejada.
9.2 - As informações específicas de cada produto são mutáveis ou imutáveis? A estrutura de dados usada é a mais adequada? Justifique sua resposta.
Resposta 9.2
A estrutura usada para armazenar cada informação dos produtos (nome, quantidade e preço) é uma lista, portanto mutável. Também não é a estrutura mais adequada pois permite uma certa flexibilidade que pode ser indesejada, como, por exemplo, adicionar ao produto A um item a mais de categoria e os outros produtos não terem.
Além disso, sendo listas, é possível não só acrescentar itens como alterá-los após a criação da estrutura de vendas. Como são dados históricos, não há motivos para tais alterações, sendo uma lista uma estrutura mutável indesejada.
9.3 - Caso as estruturas sejam inadequadas, como você sugeriria?
Resposta 9.3
A estrutura externa de vendas diárias deveria ser uma lista para eventual acréscimo de mais vendas e a estrutura interna dos produtos como sendo tuplas para garantir que não haja modificações.
vendas_diarias = [
("Produto A", 10, 100),
("Produto B", 5, 250),
("Produto C", 2, 150),
]
9.4 - Faça um código que traga o faturamento da empresa (quantidade total de vendas em R$)
Show code cell content
vendas_diarias = [
("Produto A", 10, 100),
("Produto B", 5, 250),
("Produto C", 2, 150),
]
total_produto_a = vendas_diarias[0][1] * vendas_diarias[0][2]
total_produto_b = vendas_diarias[1][1] * vendas_diarias[1][2]
total_produto_c = vendas_diarias[2][1] * vendas_diarias[2][2]
faturamento = total_produto_a + total_produto_b + total_produto_c
print(f"O faturamento da empresa foi de R$ {faturamento}")
O faturamento da empresa foi de R$ 2550
Exercício 10 - RH e Python#
Você trabalha no departamento de Recursos Humanos (RH) de uma empresa e recebeu a tarefa de analisar alguns dados de funcionários. Os dados são armazenados do seguinte formato:
funcionarios = {
"Alice": {"salario": 5000, "ferias_restantes": 15, "departamento": "TI"},
"Bruno": {"salario": 4500, "ferias_restantes": 10, "departamento": "Financeiro"},
"Carlos": {"salario": 6000, "ferias_restantes": 20, "departamento": "Marketing"},
"Diana": {"salario": 7000, "ferias_restantes": 5, "departamento": "Vendas"},
"Eduardo": {"salario": 5500, "ferias_restantes": 12, "departamento": "TI"}
}
Execute as seguintes manupilações, conforme descritos abaixo:
10.1 - Acesse e imprima o salário do colaborador Bruno.
Resposta 10.1
print("Salário do Bruno:", funcionarios["Bruno"]["salario"])
10.2 - Acesse e imprima os dias de férias restantes da colaboradora Diana.
Resposta 10.2
print("Dias de férias restantes da Diana:", funcionarios["Diana"]["ferias_restantes"])
10.3 - Eduardo recebeu um aumento de salário de 5%. Atualize o salário dele na estrutura para o novo salário.
Resposta 10.3
funcionarios["Eduardo"]["salario"] = funcionarios["Eduardo"]["salario"] * 1.05
10.4 - Uma nova colaboradora entrou pra equipe. Adicione-a à base usando as informações abaixo:
Nome: Fernanda
Salário: R$6.000,00
Férias restantes: 30 (CLT)
Departamento: Recursos Humanos
Resposta 10.4
funcionarios["Fernanda"] = {"salario": 6000, "ferias_restantes": 30, "departamento": "Recursos Humanos"}
10.5 - Calcule e imprima o custo total de salários para a empresa (somatório de todos os salários). Considere a colaboradora recém-ingressada do item anterior.
Resposta 10.5
custo_total = (
funcionarios["Bruno"]["salario"] +
funcionarios["Carlos"]["salario"] +
funcionarios["Diana"]["salario"] +
funcionarios["Eduardo"]["salario"] +
funcionarios["Fernanda"]["salario"]
)
print(f"Custo total com a folha de pagamento: {custo_total})
10.6 - Alice pediu demissão e foi trabalhar em outra empresa. Remova-a da base de colaboradores.
Resposta 10.6
del funcionarios["Alice"]
10.6 - O gerente gostaria de saber se há algum colaborador chamado Carlos. Verifique.
Resposta 10.6
print("Carlos" in funcionarios)
10.7 - A estrutura de dados usada é a mais adequada? Justifique sua resposta.
Resposta 10.7
Sim, a estrutura de dados é adequada porque dicionários permitem acesso direto e mutável aos dados por meio de chaves nomeadas, o que é crucial no contexto de RH, onde informações dos funcionários, como salário e férias, precisam ser atualizadas frequentemente. Além disso, a mutabilidade dos dicionários possibilita a adição ou remoção de elementos, o que reflete bem o ambiente de RH, com processos constantes de contratação e desligamento.
Em comparação, listas e tuplas são menos intuitivas para esse tipo de manipulação. As listas exigem indexação numérica, o que pode ser confuso pois requerem uma ordenação prévia, e as tuplas, sendo imutáveis, dificultam qualquer alteração, tornando-as menos adequadas para um ambiente dinâmico como o de RH.
Exercício 11 - Controle de estoque de peças automotivas#
Uma concessionária de automóveis precisa gerenciar o estoque de peças de reposição em seus diferentes depósitos. O gerente gostaria de ter uma visão sobre o gerenciamento de controle de estoque das peças disponíveis para manutenção. Abaixo há uma lista de todos os depósitos com suas respectivas peças em estoque:
Depósito A: junta homocinética, filtro de óleo, vela de ignição, correia dentada, pastilha de freio, amortecedor
Depósito B: filtro de óleo, vela de ignição, pastilha de freio, disco de freio, pneu, válvula termostática
Depósito C: correia dentada, pastilha de freio, amortecedor, bateria, filtro de óleo, alternador, vela de ignição
Depósito D: vela de ignição, disco de freio, óleo de motor, correia alternador, sensor de oxigênio, fluido de freio
Depósito E: pneu, amortecedor, radiador, bomba d’água, mangueira de água, rolamento de roda, filtro de óleo, vela de ignição
Responda as seguintes perguntas:
11.1 - Quais peças estão disponíveis em todos os depósitos?
11.2 - Quais peças que estão faltando em cada um dos depósitos?
11.3 - Quais peças são exclusivas de cada depósito?
Dica
Lembre-se de usar todas as estruturas de dados que você já aprendeu até aqui para representar os dados do exercício.
Resposta 11.1
Show code cell content
deposito_a = {
"junta homocinética",
"filtro de óleo",
"vela de ignição",
"correia dentada",
"pastilha de freio",
"amortecedor",
}
deposito_b = {
"filtro de óleo",
"vela de ignição",
"pastilha de freio",
"disco de freio",
"pneu",
"válvula termostática",
}
deposito_c = {
"correia dentada",
"pastilha de freio",
"amortecedor",
"bateria",
"filtro de óleo",
"alternador",
"vela de ignição",
}
deposito_d = {
"vela de ignição",
"disco de freio",
"óleo de motor",
"correia alternador",
"sensor de oxigênio",
"fluido de freio",
}
deposito_e = {
"pneu",
"amortecedor",
"radiador",
"bomba d'água",
"mangueira de água",
"rolamento de roda",
"filtro de óleo",
"vela de ignição",
}
pecas_comuns_em_todos_depositos = (
deposito_a & deposito_b & deposito_c & deposito_d & deposito_e
)
print(f"Peças disponíveis em todos os depósitos: {pecas_comuns_em_todos_depositos}")
Peças disponíveis em todos os depósitos: {'vela de ignição'}
Resposta 11.2
Show code cell content
deposito_a = {
"junta homocinética",
"filtro de óleo",
"vela de ignição",
"correia dentada",
"pastilha de freio",
"amortecedor",
}
deposito_b = {
"filtro de óleo",
"vela de ignição",
"pastilha de freio",
"disco de freio",
"pneu",
"válvula termostática",
}
deposito_c = {
"correia dentada",
"pastilha de freio",
"amortecedor",
"bateria",
"filtro de óleo",
"alternador",
"vela de ignição",
}
deposito_d = {
"vela de ignição",
"disco de freio",
"óleo de motor",
"correia alternador",
"sensor de oxigênio",
"fluido de freio",
}
deposito_e = {
"pneu",
"amortecedor",
"radiador",
"bomba d'água",
"mangueira de água",
"rolamento de roda",
"filtro de óleo",
"vela de ignição",
}
todas_pecas = deposito_a | deposito_b | deposito_c | deposito_d | deposito_e
pecas_faltantes = {
"A": todas_pecas - deposito_a,
"B": todas_pecas - deposito_b,
"C": todas_pecas - deposito_c,
"D": todas_pecas - deposito_d,
"E": todas_pecas - deposito_e,
}
print(pecas_faltantes)
{'A': {'disco de freio', 'bateria', "bomba d'água", 'óleo de motor', 'correia alternador', 'sensor de oxigênio', 'pneu', 'radiador', 'fluido de freio', 'válvula termostática', 'rolamento de roda', 'mangueira de água', 'alternador'}, 'B': {'alternador', 'bateria', "bomba d'água", 'óleo de motor', 'amortecedor', 'correia alternador', 'sensor de oxigênio', 'radiador', 'correia dentada', 'fluido de freio', 'junta homocinética', 'rolamento de roda', 'mangueira de água'}, 'C': {'disco de freio', "bomba d'água", 'óleo de motor', 'correia alternador', 'sensor de oxigênio', 'pneu', 'radiador', 'fluido de freio', 'válvula termostática', 'junta homocinética', 'rolamento de roda', 'mangueira de água'}, 'D': {'bateria', "bomba d'água", 'pastilha de freio', 'amortecedor', 'filtro de óleo', 'pneu', 'radiador', 'correia dentada', 'válvula termostática', 'junta homocinética', 'rolamento de roda', 'mangueira de água', 'alternador'}, 'E': {'disco de freio', 'bateria', 'pastilha de freio', 'óleo de motor', 'correia alternador', 'sensor de oxigênio', 'correia dentada', 'fluido de freio', 'válvula termostática', 'junta homocinética', 'alternador'}}
Resposta 11.3
Show code cell content
deposito_a = {
"junta homocinética",
"filtro de óleo",
"vela de ignição",
"correia dentada",
"pastilha de freio",
"amortecedor",
}
deposito_b = {
"filtro de óleo",
"vela de ignição",
"pastilha de freio",
"disco de freio",
"pneu",
"válvula termostática",
}
deposito_c = {
"correia dentada",
"pastilha de freio",
"amortecedor",
"bateria",
"filtro de óleo",
"alternador",
"vela de ignição",
}
deposito_d = {
"vela de ignição",
"disco de freio",
"óleo de motor",
"correia alternador",
"sensor de oxigênio",
"fluido de freio",
}
deposito_e = {
"pneu",
"amortecedor",
"radiador",
"bomba d'água",
"mangueira de água",
"rolamento de roda",
"filtro de óleo",
"vela de ignição",
}
pecas_exclusivas = {
"A": deposito_a - deposito_b - deposito_c - deposito_d - deposito_e,
"B": deposito_b - deposito_a - deposito_c - deposito_d - deposito_e,
"C": deposito_c - deposito_a - deposito_b - deposito_d - deposito_e,
"D": deposito_d - deposito_a - deposito_b - deposito_c - deposito_e,
"E": deposito_e - deposito_a - deposito_b - deposito_c - deposito_d,
}
print(pecas_exclusivas)
{'A': {'junta homocinética'}, 'B': {'válvula termostática'}, 'C': {'bateria', 'alternador'}, 'D': {'fluido de freio', 'óleo de motor', 'correia alternador', 'sensor de oxigênio'}, 'E': {'radiador', 'rolamento de roda', 'mangueira de água', "bomba d'água"}}
Exercício 12 - Terremotos e escala Richter#
A tabela a seguir contém intervalos de magnitude de terremotos na escala Richter e a descrição do impacto de cada intervalo:
Magnitude |
Descrição |
---|---|
Menor que 2.0 |
Micro |
2.0 a menor que 3.0 |
Muito pequeno |
3.0 a menor que 4.0 |
Pequeno |
4.0 a menor que 5.0 |
Leve |
5.0 a menor que 6.0 |
Moderado |
6.0 a menor que 7.0 |
Forte |
7.0 a menor que 8.0 |
Grande |
8.0 a menor que 10.0 |
Enorme |
10.0 ou mais |
Catastrófico |
Escreva um programa que leia uma magnitude fornecida pelo usuário e exiba o descritor apropriado como parte de uma mensagem significativa. Por exemplo, se o usuário inserir 5.5, seu programa deve indicar que um terremoto de magnitude 5.5 é considerado um terremoto moderado.
Dica (leitura de dados do usuário)
Para ler dados do usuário, você pode usar a função input()
, cuja documentação oficial pode ser encontrada neste link.
Obs importante: a função input()
sempre retorna uma string. Caso necessário, então você precisa converter o valor do tipo string para o tipo desejado (int, float, etc.).
Show code cell content
# Use esta linha para ler uma magnitude fixa
valor_magnitude = 10
# Ou descomente a linha abaixo para ler a magnitude do usuário
# valor_magnitude = float(input("Digite a magnitude do terremoto: "))
if valor_magnitude < 2.0:
categoria_terremoto = "Micro"
elif valor_magnitude < 3.0:
categoria_terremoto = "Muito pequeno"
elif valor_magnitude < 4.0:
categoria_terremoto = "Pequeno"
elif valor_magnitude < 5.0:
categoria_terremoto = "Leve"
elif valor_magnitude < 6.0:
categoria_terremoto = "Moderado"
elif valor_magnitude < 7.0:
categoria_terremoto = "Forte"
elif valor_magnitude < 8.0:
categoria_terremoto = "Grande"
elif valor_magnitude < 10.0:
categoria_terremoto = "Enorme"
else:
categoria_terremoto = "Catastrófico"
print(
f"O terremoto de magnitude {valor_magnitude} está na categoria {categoria_terremoto}"
)
O terremoto de magnitude 10 está na categoria Catastrófico
Exercício 13 - Conta mensal de plano de celular#
Um plano de celular específico inclui 50 minutos de tempo de ligação e 50 mensagens de texto por R$100,00 por mês. Cada minuto adicional de tempo de ligação custa R$0,25, enquanto mensagens de texto adicionais custam R$0,15 cada. Todas as contas de celular incluem uma taxa adicional de R$2,00 para suportar os centros de atendimento de emergência 191, e o valor total da conta (incluindo a taxa do 911) está sujeito a um imposto de 5%.
Escreva um programa que leia do usuário o número de minutos e mensagens de texto utilizados em um mês. Exiba o valor base, a cobrança por minutos adicionais (se houver), a cobrança por mensagens de texto adicionais (se houver), a taxa do 191, o imposto e o valor total da conta. Exiba as cobranças por minutos e mensagens de texto adicionais apenas se o usuário tiver incorrido em custos nessas categorias. Certifique-se de que todos os valores sejam exibidos com 2 casas decimais.
Dica (casas decimais)
Para imprimir os valores com 2 casas decimais, use f-strings para formatar a saída conforme o exemplo abaixo:
x = 10
print(f"x = {x:.2f}")
Show code cell content
# Use esta linha para ler a quantidade de mensagens e minutos fixos no código
minutos = 10
mensagens = 20
# Ou descomente a linha abaixo para ler as informações do usuário
# minutos = int(input("Digite a quantidade de minutos utilizada: "))
# mensagens = int(input("Digite a quantidade de mensagens enviadas: "))
valor_base = 100
print(f"O valor base da conta é R$ {valor_base:.2f}")
# Condição para verificar se houveram minutos adicionais
teve_minutos_adicionais = 50 < minutos
# Condição para verificar se houveram mensagens adicionais
teve_mensagens_adicionais = 50 < mensagens
if teve_minutos_adicionais:
minutos_adicionais = minutos - 50
cobranca_minutos_adicionais = 0.25 * minutos_adicionais
valor_base = valor_base + cobranca_minutos_adicionais
print(
f"O valor da cobrança por minutos adicionais foi de R$ {cobranca_minutos_adicionais:.2f}"
)
if teve_mensagens_adicionais:
mensagens_adicionais = mensagens - 50
cobranca_mensagens_adicionais = 0.15 * mensagens_adicionais
valor_base = valor_base + cobranca_mensagens_adicionais
print(
f"O valor da cobrança por minutos mensagens foi de R$ {cobranca_mensagens_adicionais:.2f}"
)
taxa_emergencia = 2
print(f"O valor da taxa de emergência é R$ {taxa_emergencia:.2f}")
valor_base = valor_base + taxa_emergencia
imposto = valor_base * 0.05
print(f"O valor do imposto (5%) é R$ {imposto:.2f}")
valor_total = valor_base + imposto
print(f"O valor total da conta é R$ {valor_total:.2f}")
O valor base da conta é R$ 100.00
O valor da taxa de emergência é R$ 2.00
O valor do imposto (5%) é R$ 5.10
O valor total da conta é R$ 107.10
Exercício 14 - Avaliação de sustentabilidade e redução de emissões de CO2#
Uma empresa comprometida com práticas de ESG deseja reduzir suas emissões de CO2 e promover práticas sustentáveis. Eles monitoram suas emissões mês a mês e estabelecem metas de redução de emissões para cada mês no próximo ano. A empresa quer avaliar quais meses precisam de maior atenção para atingir suas metas de sustentabilidade.
Dados:
emissoes_atuais
: uma lista com as emissões reais de CO2 (em toneladas) para cada mês do ano.metas_reducao
: uma lista com as metas de redução de CO2 (em toneladas) para cada mês do próximo ano.
emissoes_atuais = [45, 52, 48, 53, 47, 55, 49, 51, 50, 46, 54, 48]
metas_reducao = [40, 48, 45, 50, 42, 49, 45, 46, 45, 43, 50, 46]
Tarefas:
Calcular o total de emissões anuais. Use um laço for para calcular o total de emissões de CO2 ao longo do ano.
Comparar emissões com metas de redução. Para cada mês, compare as emissões reais com as metas e imprima se a empresa atingiu a meta ou não. Para os meses em que as emissões excederam as metas, imprima quanto excederam.
Calcular a redução necessária. Se o total de emissões ultrapassar a soma das metas de redução anuais, calcule uma redução proporcional que deve ser aplicada a cada mês no próximo ano para que a empresa atinja suas metas de ESG.
Saída esperada: O programa deve fornecer:
O total anual de emissões de CO2.
Um relatório mensal que mostre se a empresa atingiu ou excedeu as metas, e quanto excedeu em cada caso.
A sugestão de quanto a empresa deve reduzir proporcionalmente em cada mês para atingir a meta anual, se necessário.
Exemplo de saída:
Total de emissões no ano: 598 toneladas
Mês 1: Emissões de 45 toneladas, Meta atingida: Não, Excedido por 5 toneladas
Mês 2: Emissões de 52 toneladas, Meta atingida: Não, Excedido por 4 toneladas
...
Total de metas de redução: 549 toneladas
A empresa precisa reduzir 49 toneladas ao longo do ano.
Redução sugerida em cada mês: 4.08 toneladas
Dica
É possível também usar a função
sum()
para calcular o total de emissões e metas anuais. Neste caso, o laçofor
não é necessário.Para calcular a redução proporcional, divida a diferença entre o total de emissões e o total de metas pelo número de meses do ano.
Show code cell content
# Listas de dados: emissões atuais e metas de redução de CO2 (em toneladas) para cada mês
emissoes_atuais = [45, 52, 48, 53, 47, 55, 49, 51, 50, 46, 54, 48]
metas_reducao = [40, 48, 45, 50, 42, 49, 45, 46, 45, 43, 50, 46]
# 1. Calcular o total de emissões anuais
total_emissoes = sum(emissoes_atuais)
total_metas = sum(metas_reducao)
# Imprimir o total de emissões no ano
print(f"Total de emissões no ano: {total_emissoes} toneladas")
print(f"Total de metas de redução: {total_metas} toneladas\n")
# 2. Comparar emissões com metas de redução para cada mês
for mes, (emissao, meta) in enumerate(zip(emissoes_atuais, metas_reducao), start=1):
if emissao > meta:
excedente = emissao - meta
print(
f"Mês {mes}: Emissões de {emissao} toneladas, Meta atingida: Não, Excedido por {excedente} toneladas"
)
else:
print(f"Mês {mes}: Emissões de {emissao} toneladas, Meta atingida: Sim")
# 3. Calcular a redução necessária para atingir a meta anual
if total_emissoes > total_metas:
excesso_total = total_emissoes - total_metas
reducao_proporcional = excesso_total / 12
print(f"\nA empresa precisa reduzir {excesso_total} toneladas ao longo do ano.")
print(f"Redução sugerida em cada mês: {reducao_proporcional:.2f} toneladas")
else:
print("\nA empresa atingiu ou ficou abaixo das metas de emissão anuais.")
Total de emissões no ano: 598 toneladas
Total de metas de redução: 549 toneladas
Mês 1: Emissões de 45 toneladas, Meta atingida: Não, Excedido por 5 toneladas
Mês 2: Emissões de 52 toneladas, Meta atingida: Não, Excedido por 4 toneladas
Mês 3: Emissões de 48 toneladas, Meta atingida: Não, Excedido por 3 toneladas
Mês 4: Emissões de 53 toneladas, Meta atingida: Não, Excedido por 3 toneladas
Mês 5: Emissões de 47 toneladas, Meta atingida: Não, Excedido por 5 toneladas
Mês 6: Emissões de 55 toneladas, Meta atingida: Não, Excedido por 6 toneladas
Mês 7: Emissões de 49 toneladas, Meta atingida: Não, Excedido por 4 toneladas
Mês 8: Emissões de 51 toneladas, Meta atingida: Não, Excedido por 5 toneladas
Mês 9: Emissões de 50 toneladas, Meta atingida: Não, Excedido por 5 toneladas
Mês 10: Emissões de 46 toneladas, Meta atingida: Não, Excedido por 3 toneladas
Mês 11: Emissões de 54 toneladas, Meta atingida: Não, Excedido por 4 toneladas
Mês 12: Emissões de 48 toneladas, Meta atingida: Não, Excedido por 2 toneladas
A empresa precisa reduzir 49 toneladas ao longo do ano.
Redução sugerida em cada mês: 4.08 toneladas
Exercício 15 - Monitoramento de qualidade de produtos#
Uma fábrica de eletrônicos está monitorando a qualidade dos produtos que passam por sua linha de produção. A cada dia, um lote de produtos é inspecionado, e a empresa quer garantir que todos os produtos estejam dentro dos padrões de qualidade. Se algum produto for detectado como defeituoso, a produção é interrompida imediatamente para inspeção detalhada.
Dados:
Você tem uma lista que representa os resultados da inspeção de cada lote de produtos ao longo de vários dias. Cada lote pode ser:
True
: Produto aprovado.False
: Produto defeituoso.None
: Lote não inspecionado.
lotes = [True, True, None, True, False, True, True, None, False, True, None, False, None]
Tarefas:
Contar produtos aprovados: Percorra a lista de lotes e conte os produtos aprovados.
Interromper em caso de defeito: Se encontrar um produto defeituoso (
False
), interrompa a inspeção.Ignorar lotes não inspecionados: Se encontrar um lote não inspecionado (
None
), passae para o próximo lote sem contá-lo.
Saída esperada: O programa deve fornecer:
Uma mensagem informando que a inspeção foi interrompida.
O número de produtos aprovados antes de encontrar um defeito ou até o final da inspeção.
Exemplo de saída:
Produto defeituoso encontrado! Interrompendo a inspeção.
4 produtos foram aprovados antes de encontrar um produto defeituoso.
Show code cell content
lotes = [True, True, None, True, False, True, True]
# Contador de produtos aprovados
produtos_aprovados = 0
# 1. Verificar cada lote de produtos
for lote in lotes:
# 2. Se encontrar um produto defeituoso, interromper a verificação
if not lote:
print("Produto defeituoso encontrado! Interrompendo a inspeção.")
break
# 3. Ignorar lotes não inspecionados
if lote is None:
continue
# Contar produtos aprovados
if lote:
produtos_aprovados += 1
# 4. Exibir o número de produtos aprovados
print(
f"{produtos_aprovados} produtos foram aprovados antes de encontrar um produto defeituoso."
)
Produto defeituoso encontrado! Interrompendo a inspeção.
2 produtos foram aprovados antes de encontrar um produto defeituoso.
Exercício 16 - Explorando módulos nativos#
Busque explorar os módulos nativos do Python para resolver os exercícios a seguir. Evite clicar na dica e resposta antes de tentar resolver o exercício por conta própria.
16.1 - Crie um programa que simula o lançamento de um dado de 6 lados. O programa deve utilizar o módulo random para gerar um número aleatório entre 1 e 6, e exibir o resultado ao usuário.
Dica 16.1
Use a função randint()
do módulo random
.
Resposta 16.1
import random
# Simulação do lançamento de um dado de 6 lados
def rolar_dado():
return random.randint(1, 6)
# Exibindo o resultado ao usuário
resultado = rolar_dado()
print(resultado)
16.2 - Crie um programa que exibe a data e a hora atuais no formato DD/MM/AAAA HH:MM:SS. Use o módulo datetime para obter a data e a hora.
Dica 16.2
Utilize o módulo datetime
, função datetime.now()
, para capturar a data e hora atuais. Usestrftime()
para formatar a data e hora.
Resposta 16.2
from datetime import datetime
# Obtendo a data e hora atuais
data_hora_atual = datetime.now()
# Formatando a data e hora no formato DD/MM/AAAA HH:MM:SS
data_hora_formatada = data_hora_atual.strftime("%d/%m/%Y %H:%M:%S")
# Exibindo o resultado
print(data_hora_formatada)
16.3 - Crie um programa que mede o tempo de execução de um loop que conta de 1 até 1.000.000. Use o módulo time para capturar o tempo antes e depois da execução do loop e exiba quanto tempo foi gasto.
Dica 16.3
Utilize a função time()
do módulo time
antes e depois do loop.
Resposta 16.3
import time
# Capturando o tempo antes do loop
tempo_inicial = time.time()
# Loop que conta de 1 até 1.000.000
for i in range(1, 1000001):
pass # O loop não faz nada, apenas conta
# Capturando o tempo depois do loop
tempo_final = time.time()
# Calculando o tempo gasto
tempo_gasto = tempo_final - tempo_inicial
print(f"Tempo gasto: {tempo_gasto} segundos")
16.4 - Escreva um programa que cria uma nova pasta vazia chamado exercicios na pasta atual. Vefique se a pasta foi criada com sucesso.
Dica 16.4
Use as funções os.mkdir()
e os.path.exists()
do módulo os
para criar a pasta e verificar sua existência.
Resposta 16.4
import os
# Nome da pasta que será criada
nome_pasta = "exercicios"
# Criando a pasta
os.mkdir(nome_pasta)
# Verificando se a pasta foi criada com sucesso
if os.path.exists(nome_pasta):
print(f"A pasta '{nome_pasta}' foi criada com sucesso.")
else:
print(f"Falha ao criar a pasta '{nome_pasta}'.")
16.5 - Crie um programa que gere uma senha aleatória de 12 caracteres, incluindo letras maiúsculas, minúsculas, números e símbolos.
Dica 16.5
Utilize funções do módulo string para ajudar na criação da senha e funções do módulo random
pra gerar valores aleatórios.
Resposta 16.5
import string
import random
def gerar_senha(tamanho=12):
# Define os caracteres que podem ser usados na senha
letras_maiusculas = string.ascii_uppercase
letras_minusculas = string.ascii_lowercase
numeros = string.digits
simbolos = string.punctuation
# Combina todos os caracteres
todos_os_caracteres = letras_maiusculas + letras_minusculas + numeros + simbolos
# Gera a senha aleatória
senha = ''.join(random.choice(todos_os_caracteres) for _ in range(tamanho))
return senha
# Gera e imprime a senha aleatória
senha_gerada = gerar_senha()
print("Senha gerada:", senha_gerada)
16.6 - Crie um programa que imprime a mensagem «Tarefa agendada executada!» após 5 segundos.
Dica 16.5
Utilize funções do módulo string
para ajudar na criação da senha e funções do módulo random
pra gerar valores aleatórios.
Resposta 16.5
import string
import random
def gerar_senha(tamanho=12):
# Define os caracteres que podem ser usados na senha
letras_maiusculas = string.ascii_uppercase
letras_minusculas = string.ascii_lowercase
numeros = string.digits
simbolos = string.punctuation
# Combina todos os caracteres
todos_os_caracteres = letras_maiusculas + letras_minusculas + numeros + simbolos
# Gera a senha aleatória
senha = ''.join(random.choice(todos_os_caracteres) for _ in range(tamanho))
return senha
# Gera e imprime a senha aleatória
senha_gerada = gerar_senha()
print("Senha gerada:", senha_gerada)
Exercício 17 - Fabricando um carro (literalmente)#
Imagine que você está dirigindo um carro. Quando você acelera, a velocidade aumenta, e quando você freia, a velocidade diminui. Se continuar freando, o carro eventualmente vai parar. Também há momentos em que você quer saber o modelo do carro, o ano de fabricação e, claro, a velocidade atual.
Agora, pense nas ações que você pode realizar enquanto dirige:
Acelerar: A cada vez que você pressiona o acelerador, a velocidade do carro aumenta em 10 km/h.
Frear: Ao pisar no freio, a velocidade diminui em 10 km/h, mas o carro nunca pode andar com velocidade negativa.
Parar: Quando você freia até o carro parar completamente, a velocidade vai para 0 km/h.
Checar informações: Às vezes, você quer saber qual o modelo do carro, o ano de fabricação e a velocidade atual.
Agora, tente pensar em como você organizaria essas funcionalidades de forma lógica. Como você armazenaria o modelo e o ano do carro? E como você controlaria as ações de acelerar e frear?
Exemplo:
Você começa dirigindo um Fusca, fabricado em 1980, com uma velocidade inicial de 0 km/h.
Ao acelerar duas vezes, sua velocidade chega a 20 km/h.
Você freia uma vez e a velocidade cai para 10 km/h.
Se frear mais uma vez, a velocidade vai para 0 km/h, e o carro para completamente.
Pense em como organizar isso de forma que você possa controlar o carro, saber suas informações e decidir quando acelerar ou frear.
Desafio: E se você quisesse reverter a marcha do carro? Imagine que em marcha ré o fusca ande a no máximo 10 km/h. Como você implementaria isso?
Show code cell content
class Carro:
def __init__(self, modelo: str, ano: int):
# Inicialização dos atributos de instância
self.modelo = modelo
self.ano = ano
self.velocidade = 0 # Inicializa a velocidade como 0
def acelerar(self):
self.velocidade += 10
def frear(self):
if self.velocidade >= 10:
self.velocidade -= 10
else:
self.velocidade = 0
def parar(self):
self.velocidade = 0
def informacoes(self):
print(
f"Modelo: {self.modelo}, Ano: {self.ano}, Velocidade: {self.velocidade} km/h"
)
def reverter(self):
if self.velocidade > 0:
self.velocidade -= 10
print("O carro está em marcha à ré.")
else:
print("O carro já está parado.")
# Criando um objeto da classe Carro
carro = Carro("Fusca", 1980)
# Exibindo as informações iniciais
carro.informacoes() # Deve mostrar "Modelo: Fusca, Ano: 1980, Velocidade: 0 km/h"
# Acelerando o carro
carro.acelerar()
carro.acelerar()
# Exibindo as informações após acelerar
carro.informacoes() # Deve mostrar "Modelo: Fusca, Ano: 1980, Velocidade: 20 km/h"
# Freando o carro
carro.frear()
# Exibindo as informações após frear
carro.informacoes() # Deve mostrar "Modelo: Fusca, Ano: 1980, Velocidade: 10 km/h"
# Parando o carro
carro.parar()
# Exibindo as informações finais
carro.informacoes() # Deve mostrar "Modelo: Fusca, Ano: 1980, Velocidade: 0 km/h"
# Tentando reverter o carro
carro.reverter() # Deve mostrar "O carro já está parado."
# Acelerando novamente para testar o reverter
carro.acelerar()
carro.acelerar()
carro.informacoes() # Velocidade: 20 km/h
# Revertendo a marcha
carro.reverter() # Deve mostrar "O carro está em marcha à ré."
carro.informacoes() # Velocidade: 10 km/h
# Revertendo novamente
carro.reverter() # Deve mostrar "O carro está em marcha à ré."
carro.informacoes() # Velocidade: 0 km/h
Modelo: Fusca, Ano: 1980, Velocidade: 0 km/h
Modelo: Fusca, Ano: 1980, Velocidade: 20 km/h
Modelo: Fusca, Ano: 1980, Velocidade: 10 km/h
Modelo: Fusca, Ano: 1980, Velocidade: 0 km/h
O carro já está parado.
Modelo: Fusca, Ano: 1980, Velocidade: 20 km/h
O carro está em marcha à ré.
Modelo: Fusca, Ano: 1980, Velocidade: 10 km/h
O carro está em marcha à ré.
Modelo: Fusca, Ano: 1980, Velocidade: 0 km/h
Exercício 18 - Gerenciando uma biblioteca#
Você está criando um sistema para gerenciar uma biblioteca. Nesse sistema, você terá um conceito central de um livro. Cada livro terá algumas características importantes, como:
O nome do livro.
O nome do autor que escreveu o livro.
O ano em que o livro foi publicado.
Um status que mostra se o livro está disponível para empréstimo ou se já foi retirado.
Além disso, é importante ter uma contagem que rastreie quantos livros foram cadastrados na biblioteca. Essa contagem deve ser atualizado sempre que um novo livro for adicionado.
Segue algumas sugestões de funcionalidades que você pode implementar no sistema:
Quando um usuário deseja pegar um livro emprestado, o sistema deve verificar se o livro está disponível. Se estiver, a disponibilidade deve ser alterada para refletir que o livro foi emprestado. Caso contrário, uma mensagem deve ser exibida informando que o livro não está disponível.
Quando o usuário retorna o livro, o sistema deve atualizar a disponibilidade do livro para indicar que ele está novamente disponível para empréstimo.
Para cada livro, o sistema deve ser capaz de mostrar as informações relevantes, como título, autor, ano de publicação e o status de disponibilidade.
Você também deve ter a capacidade de saber quantos livros estão cadastrados na biblioteca.
Exemplo de uso do sistema:
Você cria um livro chamado «1984», escrito por George Orwell, publicado em 1949.
Outro livro que você adiciona é «O Senhor dos Anéis», de J.R.R. Tolkien, publicado em 1954.
Ao tentar emprestar «1984», o sistema deve confirmar que ele está disponível.
Se você tentar emprestar «1984» novamente, o sistema deve informar que ele não está mais disponível.
Ao devolver «1984», o sistema deve registrar que ele está novamente disponível para ser emprestado.
Por fim, você pode verificar quantos livros estão cadastrados na biblioteca.
Desafio: Pense em como você poderia implementar uma funcionalidade que permite buscar um livro pelo título e exibir suas informações, caso ele exista na biblioteca. Além disso, considere como a contagem de livros pode ser atualizada quando um livro é removido.
Show code cell content
class Livro:
# Atributo de classe para contar o total de livros
total_livros = 0
def __init__(self, titulo, autor, ano_publicacao):
# Atributos de instância
self.titulo = titulo
self.autor = autor
self.ano_publicacao = ano_publicacao
self.disponibilidade = True # O livro começa como disponível
# Incrementa o contador de livros ao criar um novo livro
Livro.total_livros += 1
def emprestar(self):
if self.disponibilidade:
self.disponibilidade = False
print(f"O livro '{self.titulo}' foi emprestado.")
else:
print(f"O livro '{self.titulo}' não está disponível.")
def devolver(self):
self.disponibilidade = True
print(f"O livro '{self.titulo}' foi devolvido.")
def exibir_informacoes(self):
status = "disponível" if self.disponibilidade else "não disponível"
print(
f"Título: {self.titulo}, Autor: {self.autor}, Ano de Publicação: {self.ano_publicacao}, Status: {status}"
)
# Criando alguns objetos da classe Livro
livro1 = Livro("1984", "George Orwell", 1949)
livro2 = Livro("O Senhor dos Anéis", "J.R.R. Tolkien", 1954)
# Exibindo informações dos livros
livro1.exibir_informacoes()
livro2.exibir_informacoes()
# Emprestando um livro
livro1.emprestar() # Deve indicar que o livro foi emprestado
livro1.emprestar() # Deve indicar que o livro não está disponível
# Devolvendo o livro
livro1.devolver() # Deve indicar que o livro foi devolvido
# Exibindo total de livros na biblioteca
print(f"Total de livros na biblioteca: {Livro.total_livros}")
Título: 1984, Autor: George Orwell, Ano de Publicação: 1949, Status: disponível
Título: O Senhor dos Anéis, Autor: J.R.R. Tolkien, Ano de Publicação: 1954, Status: disponível
O livro '1984' foi emprestado.
O livro '1984' não está disponível.
O livro '1984' foi devolvido.
Total de livros na biblioteca: 2