Aprenda Python

  • Página Inicial
  • Contato!
  • Tudo sobre Python Parte 1!
  • Tudo sobre Python Parte 2!
  • Tudo sobre Python Parte 3!
  • Tudo sobre Python Parte 4!
  • Tudo sobre Python Parte 5!
  • Tudo sobre Python Parte 6!
  • Tudo sobre Python Parte 7!
  • Exercícios - Parte 8

    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)