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': {'alternador', 'correia alternador', 'rolamento de roda', "bomba d'água", 'pneu', 'óleo de motor', 'bateria', 'mangueira de água', 'sensor de oxigênio', 'fluido de freio', 'disco de freio', 'radiador', 'válvula termostática'}, 'B': {'correia dentada', 'alternador', 'correia alternador', 'rolamento de roda', "bomba d'água", 'óleo de motor', 'bateria', 'mangueira de água', 'amortecedor', 'junta homocinética', 'sensor de oxigênio', 'fluido de freio', 'radiador'}, 'C': {'correia alternador', 'rolamento de roda', "bomba d'água", 'pneu', 'óleo de motor', 'mangueira de água', 'junta homocinética', 'sensor de oxigênio', 'fluido de freio', 'disco de freio', 'radiador', 'válvula termostática'}, 'D': {'correia dentada', 'alternador', 'rolamento de roda', "bomba d'água", 'pneu', 'bateria', 'mangueira de água', 'amortecedor', 'junta homocinética', 'filtro de óleo', 'radiador', 'pastilha de freio', 'válvula termostática'}, 'E': {'correia dentada', 'alternador', 'correia alternador', 'óleo de motor', 'bateria', 'junta homocinética', 'sensor de oxigênio', 'fluido de freio', 'disco de freio', 'pastilha de freio', 'válvula termostática'}}
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': {'alternador', 'bateria'}, 'D': {'correia alternador', 'sensor de oxigênio', 'óleo de motor', 'fluido de freio'}, 'E': {'mangueira de água', 'rolamento de roda', 'radiador', "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)