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.

Hide 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)

Hide 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.

Hide 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#

  1. Crie três variáveis para armazenar as seguintes informações: seu nome, sua idade e seu hobby favorito.

  2. Use f-strings para criar uma mensagem que inclua as três variáveis e imprima a mensagem no console.

Hide 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}.")
Hide 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.

Hide 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.

Hide 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?

Hide 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$)

Hide 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

Hide 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

Hide 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

Hide 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.).

Hide 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}")
Hide 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:

  1. 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.

  2. 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.

  3. 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ço for 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.

Hide 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:

  1. Contar produtos aprovados: Percorra a lista de lotes e conte os produtos aprovados.

  2. Interromper em caso de defeito: Se encontrar um produto defeituoso (False), interrompa a inspeção.

  3. 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.
Hide 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.

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.

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.

16.4 - Escreva um programa que cria uma nova pasta vazia chamado exercicios na pasta atual. Vefique se a pasta foi criada com sucesso.

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.

16.6 - Crie um programa que imprime a mensagem «Tarefa agendada executada!» após 5 segundos.