Crie um módulo chamado moeda.py, que tenha as funções incorporadas aumentar(), diminuir(), dobro() e metade(). Faça também um programa que importe esse módulo e use algumas dessas funções:
Módulo:
def aumentar(preco, taxa):
res = preco + (preco * taxa / 100)
return res
def diminuir(preco, taxa):
res = preco - (preco * taxa / 100)
return res
def dobro(preco):
res = preco * 2
return res
def metade(preco):
res = preco / 2
return res
Programa:
# Coloque tudo no mesmo diretório
import moeda
p = float(input("Digite o preço: R$"))
print(f"A metade de R${p:.2f} é R${moeda.metade(p):.2f}.")
print(f"O dobro de R${p:.2f} é R${moeda.dobro(p):.2f}.")
print(f"Aumentando 10%, temos R${moeda.aumentar(p, 10):.2f}.")
Pode ser assim também:
# Coloque tudo no mesmo diretório
from moeda import metade, dobro, aumentar
p = float(input("Digite o preço: R$"))
print(f"A metade de R${p:.2f} é R${metade(p):.2f}.")
print(f"O dobro de R${p:.2f} é R${dobro(p):.2f}.")
print(f"Aumentando 10%, temos R${aumentar(p, 10):.2f}.")
Adapte o código do desafio anterior, criando uma função adicional chamada moeda(), que consiga mostrar os valores como um valor monetário formatado:
Módulo:
def aumentar(preco, taxa):
res = preco + (preco * taxa / 100)
return res
def diminuir(preco, taxa):
res = preco - (preco * taxa / 100)
return res
def dobro(preco):
res = preco * 2
return res
def metade(preco):
res = preco / 2
return res
def moeda(preco = 0, m = "R$"):
return f"{m}{preco:.2f}".replace(".",",")
Programa:
# Coloque tudo no mesmo diretório
from moeda import moeda, metade, dobro, aumentar
p = float(input("Digite o preço: R$"))
print(f"A metade de {moeda(p)} é {moeda(metade(p))}.")
print(f"O dobro de {moeda(p)} é {moeda(dobro(p))}.")
print(f"Aumentando 10%, temos {moeda(aumentar(p, 10))}.")
Modifique as funções que foram criadas nos desafios anteriores para que elas aceitem um parâmetro a mais, informando se o valor retornado por elas vai ser ou não formatado pela função moeda():
Módulo:
def aumentar(preco, taxa, formato = False):
res = preco + (preco * taxa / 100)
return res if formato is False else moeda(res)
def diminuir(preco, taxa, formato = False):
res = preco - (preco * taxa / 100)
return res if formato is False else moeda(res)
def dobro(preco, formato = False):
res = preco * 2
return res if formato is False else moeda(res)
def metade(preco, formato = False):
res = preco / 2
return res if formato is False else moeda(res)
def moeda(preco = 0, m = "R$"):
return f"{m}{preco:.2f}".replace(".",",")
Programa:
# Coloque tudo no mesmo diretório
from moeda import moeda, metade, dobro, aumentar, diminuir
p = float(input("Digite o preço: R$"))
print(f"A metade de {moeda(p)} é {metade(p, True)}.")
print(f"O dobro de {moeda(p)} é {dobro(p, True)}.")
print(f"Aumentando 10%, temos {aumentar(p, 10, True)}.")
print(f"Diminuindo 13%, temos {diminuir(p, 13, True)}.")
Adicione ao módulo moeda.py criados nos desafios anteriores, uma função chamada resumo(), que mostre na tela algumas informações geradas pelas funções que já temos no módulo criado até aqui:
Módulo:
# Adicione isso:
def resumo(preco = 0, taxaA = 10, taxaR = 5):
print("-" * 30)
print("RESUMO DO VALOR".center(30))
print("-" * 30)
print(f"Preço Analisado: \t{moeda(preco)}")
print(f"Dobro do preço: \t{dobro(preco, True)}")
print(f"Metade do preço: \t{metade(preco, True)}")
print(f"{taxaA:02.0f}% de aumento: \t{aumentar(preco, taxaA, True)}")
print(f"{taxaR:02.0f}% de redução: \t{diminuir(preco, taxaR, True)}")
print("-" * 30)
Programa:
from moeda import resumo
p = float(input("Digite o preço: R$"))
resumo(p, 20, 12)
Crie um pacote com uma pasta utilidades que tenha dois módulos internos chamados moeda e dado. Transfira todas as funções utilizadas nos desafios anteriores para o primeiro pacote e mantenha tudo funcionando:
Crie a pasta utilidades, dentro dela o pacote moeda e coloque o mesmo código de moeda no arquivo __init__.py do mesmo pacote.
Programa:
from utilidades.moeda import resumo
p = float(input("Digite o preço: R$"))
resumo(p, 20, 12)
Dentro do pacote criado no desafio anterior, temos um módulo chamado dado. Crie uma função chamada leiaDinheiro() que seja capaz de funcionar como a função input(), mas com uma validação de dados para aceitar apenas valores que sejam monetários:
Módulo (arquivo __init__.py):
def leiaDinheiro(msg):
valido = False
while not valido:
entrada = str(input(msg)).replace(",", ".").strip()
if entrada.isalpha() or entrada == "":
print(f"\033[0;31mERRO: \"{entrada}\" é um preço inválido!\033[m")
else:
valido = True
return float(entrada)
Programa:
from utilidades.moeda import resumo
from utilidades.dado import leiaDinheiro
p = leiaDinheiro("Digite o preço: R$")
resumo(p, 20, 12)
Reescreva a função leiaInt(), incluindo agora a possibilidade da digitação de um número de tipo inválido. Aproveite e crie também a função leiaFloat com a mesma funcionalidade:
Módulo:
def leiaInt(msg):
while True:
try:
n = int(input(msg))
except (ValueError, TypeError):
print("\033[31mERRO: Por favor, digite um número inteiro válido!\033[m")
continue
except KeyboardInterrupt:
print("\033[31m\nEntrada de dados interrompida pelo usuário!\033[m")
return 0
else:
return n
def leiaFloat(msg):
while True:
try:
n = float(input(msg))
except (ValueError, TypeError):
print("\033[31mERRO: Por favor, digite um número real válido!\033[m")
continue
except KeyboardInterrupt:
print("\033[31m\nEntrada de dados interrompida pelo usuário!\033[m")
return 0
else:
return n
Programa:
from leitura import leiaInt, leiaFloat
n1 = leiaInt("Digite um valor inteiro: ")
n2 = leiaFloat("Digite um valor real: ")
print(f"O valor inteiro digitado foi {n1} e o valor real foi {n2}.")
Crie um código em Python que teste se o site pudim (pudim.com.br) está acessível no momento:
import urllib.request
try:
site = urllib.request.urlopen("http://www.pudim.com.br")
except urllib.error.URLError:
print("O site Pudim não está acessível no momento!")
else:
print("Consegui acessar o site Pudim com sucesso!")
print(site.read().decode()) # Isso pega o conteúdo HTML do site
Crie uma função segura para criptografar senhas, com a opção de usar ou não o "salt":
Módulo:
from hashlib import md5, sha1, sha256
def criptografar(texto, sal = ""):
texto = texto.strip().encode("utf-8")
sal = sal.strip().encode("utf-8")
if not texto:
raise Exception("\033[31mPasse um Valor em Texto!\033[m")
hashTex = sha1(texto).hexdigest()
hashSal = ""
if sal:
hashSal = md5(sal).hexdigest()
cript = sha256(hashTex.encode("utf-8") + hashSal.encode("utf-8")).hexdigest()
return cript
Programa:
from criptografia import criptografar
try:
print(criptografar("senha", "salt"))
except Exception as erro:
print(erro)
Crie um pequeno sistema modularizado que permita cadastrar pessoas pelo seu nome e idade em um arquivo de texto simples. O sistema só vai ter duas opções: Cadastrar uma nova pessoa e listar todas as pessoas cadastradas:
Módulo (menu/lib/interface):
def leiaInt(msg):
while True:
try:
n = int(input(msg))
except (ValueError, TypeError):
print("\033[31mERRO: Por favor, digite um número inteiro válido!\033[m")
continue
except KeyboardInterrupt:
print("\033[31m\nEntrada de dados interrompida pelo usuário!\033[m")
return 0
else:
return n
def linha(tam = 42):
return "-" * tam
def cabecalho(txt):
print(linha())
print(txt.center(42))
print(linha())
def menu(lista):
cabecalho("MENU PRINCIPAL")
c = 1
for item in lista:
print(f"\033[33m{c}\033[m - \033[34m{item}\033[m")
c += 1
print(linha())
opc = leiaInt("\033[32mSua opção: \033[m") # Pegue a função criada na outra aula
return opc
Sistema (fora de qualquer biblioteca):
from menu.lib.interface import *
from time import sleep
while True:
resposta = menu(["Ver Pessoas Cadastradas", "Cadastrar Nova Pessoa", "Sair do Sistema"])
if resposta == 1:
cabecalho("Opção 1")
elif resposta == 2:
cabecalho("Opção 2")
elif resposta == 3:
cabecalho("Saindo do Sistema...")
break
else:
print("\033[31mERRO! Digite uma Opção Válida!\033[m")
sleep(2)
Parte dois:
Módulo (menu/lib/arquivo):
from menu.lib.interface import *
def arqExiste(nome):
try:
a = open(nome, "rt") # Abrir pra leitura em modo texto
a.close()
except FileNotFoundError:
return False
else:
return True
def criarArq(nome):
try:
a = open(nome, "wt+") # Escrever no arquivo, e cria-lo caso nao exista!
a.close()
except:
print("Houve um erro na criaçao do arquivo!")
else:
print(f"Arquivo {nome} criado com sucesso!")
def lerArq(nome):
try:
a = open(nome, "rt")
except:
print("Erro ao ler o arquivo!")
else:
cabecalho("PESSOAS CADASTRADAS")
print(a.read())
Sistema:
from menu.lib.interface import *
from menu.lib.arquivo import *
from time import sleep
arq = "cadastro.txt"
if not arqExiste(arq):
criarArq(arq)
while True:
resposta = menu(["Ver Pessoas Cadastradas", "Cadastrar Nova Pessoa", "Sair do Sistema"])
if resposta == 1:
# Listar conteudo de arquivo
lerArq(arq)
elif resposta == 2:
cabecalho("Opção 2")
elif resposta == 3:
cabecalho("Saindo do Sistema...")
break
else:
print("\033[31mERRO! Digite uma Opção Válida!\033[m")
sleep(2)
Parte três:
Complemento do módulo arquivo:
def lerArq(nome):
try:
a = open(nome, "rt")
except:
print("Erro ao ler o arquivo!")
else:
cabecalho("PESSOAS CADASTRADAS")
for linha in a:
dado = linha.split(";")
dado[1] = dado[1].replace("\n", "")
print(f"{dado[0]:<30}{dado[1]:>3} anos")
finally:
a.close()
def cadastrar(arq, nome = "desconhecido", idade = 0):
try:
a = open(arq, "at")
except:
print("Houve um ERRO na abertura dentro do arquivo!")
else:
try:
a.write(f"{nome};{idade}\n")
except:
print("Houve um ERRO na hora de escrever os dados!")
else:
print(f"Novo registro de {nome} adicionado.")
a.close()
Complemento do programa principal (sistema):
while True:
resposta = menu(["Ver Pessoas Cadastradas", "Cadastrar Nova Pessoa", "Sair do Sistema"])
if resposta == 1:
# Listar conteudo de arquivo
lerArq(arq)
elif resposta == 2:
cabecalho("NOVO CADASTRO")
nome = str(input("Nome: "))
idade = leiaInt("Idade: ")
cadastrar(arq, nome, idade)
elif resposta == 3:
cabecalho("Saindo do Sistema...")
break
else:
print("\033[31mERRO! Digite uma Opção Válida!\033[m")
sleep(2)