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!
  • Tudo sobre Python Parte 8!
  • Exercícios - Parte 9

    Desafios em Python

    Crie a classe Funcionário, onde podemos cadastrar nome, setor e cargo. Crie também um método que permita ao funcionário se apresentar.

    Classe:

    
    from rich import print
    
    class Funcionario:
        # Atributo de classe
        empresa = "Curso em Vídeo"
    
        def __init__(self, nome, setor, cargo):
            self.nome = nome
            self.setor = setor
            self.cargo = cargo
    
        def apresentacao(self) -> str: # Definindo tipo de retorno
            return f":handshake: Olá, sou [blue]{self.nome}[/] e sou {self.cargo.lower()} do setor de {self.setor.lower()} da empresa {self.__class__.empresa}."
    
    

    Programa principal:

    
    c1 = Funcionario("Maria", "Administração", "Diretora")
    c1.empresa = "Estudonauta" # Apenas criará um atributo empresa nesse objeto, sem alterar o empresa original da classe
    print(c1.empresa) # Usando nome do objeto, para atributo da classe use o nome dela
    print(c1.apresentacao())
    
    c2 = Funcionario("Sérgio", "TI", "Programador")
    print(c2.apresentacao())
    
    

    Crie a classe Produto, onde podemos cadastrar nome e o preço. Crie também um método que mostre uma etiqueta de preço do produto.

    Classe:

    
    from rich import print
    from rich.panel import Panel
    
    class Produto:
        def __init__(self, nome, preco):
            self.nome = nome
            self.preco = preco
    
        def __str__(self):
            return f"{self.nome} custa R${self.preco:.2f}"
    
        def etiqueta(self):
            cont = f"{self.nome.center(30, ' ')}"
            cont += f"{'-' * 30}"
            precoF = f"R${self.preco:.2f}".replace(".", ",")
            cont += f"{precoF.center(30, '.')}"
            etiq = Panel(cont, title = "Produto", width = 34)
    
            print(etiq)
    
    

    Programa principal:

    
    p1 = Produto("IPhone 17 Pro Max", 25_000.85)
    p2 = Produto("Notebook Gamer", 8_000)
    
    p1.etiqueta()
    p2.etiqueta()
    
    

    Crie a classe Churrasco, onde seja possível informar quantas pessoas vão participar e mostre quanto de carne deve ser comprado, o custo total do churrasco e o preço por pessoa.

    Classe:

    
    from rich import print
    from rich.panel import Panel
    
    class Churrasco:
        # Atributos de classe
        consumoPadrao:float = 0.400 # Cada pessoa come em média 400 g de carne
        precoKg:float = 82.40 # Cada Kg de carne custa R$ 82,40
    
        def __init__(self, titulo, quant):
            self.titulo = titulo
            self.participantes = quant
    
        def __str__(self):
            return f"Esse é {self.titulo} com {self.participantes} pessoas participando."
    
        def calcularQtdCarne(self) -> float:
            return self.participantes * self.__class__.consumoPadrao
    
        def calcularCustoTotal(self) -> float:
            return self.calcularQtdCarne() * self.__class__.precoKg
    
        def calcularCustoIndividual(self) -> float:
            return self.calcularCustoTotal() / self.participantes
    
        def analisar(self):
            conteudo = f"Analisando [green]{self.titulo}[/] com [blue]{self.participantes} convidados.[/]"
            conteudo += f"\nCada participante comerá {self.__class__.consumoPadrao:.3f} Kg e cada quilo custa R${self.__class__.precoKg:.2f}."
            conteudo += f"\nRecomendo [blue]comprar {self.calcularQtdCarne():.3f}Kg[/] de carne."
            conteudo += f"\nO custo total será [green]R${self.calcularCustoTotal():.2f}.[/]"
            conteudo += f"\nCada pessoa pagará [yellow]R${self.calcularCustoIndividual():.2f}[/] para participar."
    
            painel = Panel(conteudo, title = self.titulo)
            print(painel)
    
    

    Programa principal:

    
    c1 = Churrasco("Churras dos Amigos", 15)
    c1.analisar()
    
    c2 = Churrasco("Festa do Fim de Ano", 80)
    c2.analisar()
    
    

    Crie a classe Livro, que vai simular a passagem de páginas de um livro, considerando também se o usuário chegou ao fim da leitura.

    Classe:

    
    from rich import print
    import time
    
    class Livro:
        def __init__(self, titulo, paginas):
            self.titulo = titulo
            self.totalPaginas = paginas
            self.paginaAtual = 1
            print(f":open_book: [blue]Você acabou de abrir o livro [red]\"{self.titulo}\"[/] que tem [green]{self.totalPaginas} páginas[/] no total. Você agora está na [yellow]página {self.paginaAtual}[/].[/]")
    
        def avancarPaginas(self, qtd = 1):
            cont = 0
    
            for pq in range(0, qtd, 1):
                if not self.fimDoLivro():
                    self.paginaAtual += 1
                    print(f"Pág {self.paginaAtual} :arrow_forward: ", end = "")
                    time.sleep(0.3)
                    cont += 1
    
            print(f"[blue]Você avançou {cont} páginas agora está na [yellow]página {self.paginaAtual}[/].[/]")
    
            if self.fimDoLivro():
                print(f":closed_book: [red]Você chegou ao final do livro \"{self.titulo}\".[/]")
    
        def fimDoLivro(self) -> bool:
            return self.paginaAtual == self.totalPaginas
    
    

    Programa principal:

    
    l1 = Livro("10 Coisas que Aprendi", 20)
    
    l1.avancarPaginas(5)
    l1.avancarPaginas(10)
    l1.avancarPaginas(50)
    
    

    Crie a classe Gamer, onde podemos cadastrar nome, nick e os jogos favoritos de uma pessoa. Crie também um método que permite mostrar a ficha desse gamer.

    Classe:

    
    from rich import print
    from rich.panel import Panel
    
    class Gamer:
        def __init__(self, nome, nick):
            self.nome = nome
            self.nick = nick
            self.favoritos = list()
    
        def addFavoritos(self, game):
            self.favoritos.append(game)
            self.favoritos = sorted(self.favoritos, key = str.lower)
    
        def ficha(self):
            conteudo = f"Nome real: [black on blue] {self.nome} [/]"
            conteudo += f"\nJogos favoritos:"
    
            for n, g in enumerate(self.favoritos):
                conteudo += f"\n:video_game: [blue]{g}[/]"
    
            painel = Panel(conteudo, title = f"[yellow]Jogador <{self.nick}>[/]", width = 40)
            print(painel)
    
    

    Programa principal:

    
    j1 = Gamer("Fabrício da Silva", "detonator2025")
    
    j1.addFavoritos("Mario Bros.")
    j1.addFavoritos("Sonic")
    j1.addFavoritos("God of War")
    j1.addFavoritos("Fortnite")
    
    j1.ficha()
    
    j2 = Gamer("Olívia Souza", "peach_raivosa")
    
    j2.addFavoritos("Mario Bros.")
    j2.addFavoritos("Call of Duty")
    
    j2.ficha()
    
    

    Crie a classe Caneta, que simule o funcionamento de uma caneta colorida, podendo escrever frases na cor relativa.

    Classe:

    
    from rich import print
    
    class Caneta:
        def __init__(self, cor = "Azul"):
            escolha = ""
    
            match cor.lower().strip():
                case "azul":
                    escolha = "[blue]"
                case "vermelho" | "vermelha":
                    escolha = "[red]"
                case "verde":
                    escolha = "[green]"
                case _:
                    escolha = "[white]"
    
            self.cor = escolha
            self.tampada = True
    
        def escrever(self, msg):
            if self.tampada:
                print(f":prohibited: A {self.cor}caneta[/] está tampada!")
            else:
                print(f"{self.cor}{msg}[/]", end = " ")
    
        def quebrarLinha(self, qtd = 1):
            print("\n" * qtd, end = "")
    
        def tampar(self):
            self.tampada = True
    
        def destampar(self):
            self.tampada = False
    
    

    Programa principal:

    
    c1 = Caneta("Azul")
    c2 = Caneta("Vermelha")
    c3 = Caneta("Verde")
    
    c1.destampar()
    c2.destampar()
    c3.destampar()
    
    c1.escrever("Olá, Mundo!")
    c2.escrever("Funciona!")
    c2.quebrarLinha(2)
    c3.escrever("Deu certo!")
    c3.quebrarLinha(5)
    
    # c1.tampar()
    c1.escrever("Será que rola?")
    
    

    Crie a classe ControleRemoto, onde vamos simular o funcionamento de um controle simples (canal, volume e liga/desliga).

    Classe:

    
    from rich import print
    from rich.panel import Panel
    import os
    
    class ControleRemoto:
        def __init__(self):
            self.ligado = False
            self.canalAtual = 2
            self.canalTotal = 13
            self.volumeAtual = 0
            self.volumeTotal = 50
    
            self.caixa = Panel(":prohibited: [red]A TV está desligada![/]", title = "[TV]", width = 30)
    
            print(self.caixa)
    
        def mostrarTela(self):
            if self.ligado:
                texto = ""
    
                for i in range(2, self.canalTotal + 1):
                    if i == self.canalAtual:
                        texto += f"[on yellow] {i} [/]"
                    else:
                        texto += f" {i} "
    
                self.caixa = Panel(f":tv: A TV está ligada!\nCANAL = {texto}\nVOLUME = [on spring_green4]{" " * self.volumeAtual}[/][on bright_black]{" " * (self.volumeTotal - self.volumeAtual)}[/]", title = "[TV]", width = 60)
            else:
                self.caixa = Panel(":prohibited: [red]A TV está desligada![/]", title="[TV]", width=30)
    
            print(self.caixa)
    
        def ligarOuDesligar(self):
            if self.ligado:
                self.ligado = False
    
                self.caixa = Panel(":prohibited: [red]A TV está desligada![/]", title = "[TV]", width = 30)
    
                print(self.caixa)
    
                return
            else:
                self.ligado = True
    
                self.mostrarTela()
    
                print("Ligou!")
    
        def aumentarOuDiminuirVolume(self, botao):
            if self.ligado:
                if botao == "+":
                    if self.volumeAtual >= self.volumeTotal:
                        self.mostrarTela()
    
                        return
    
                    self.volumeAtual += 1
                    self.mostrarTela()
                elif botao == "-":
                    if self.volumeAtual <= 0:
                        self.mostrarTela()
    
                        return
    
                    self.volumeAtual -= 1
                    self.mostrarTela()
                else:
                    self.mostrarTela()
            else:
                self.mostrarTela()
    
        def mudarCanal(self, botao):
            if self.ligado:
                if botao == ">":
                    if self.canalAtual >= self.canalTotal:
                        self.canalAtual = 2
                        self.mostrarTela()
    
                        return
    
                    self.canalAtual += 1
                    self.mostrarTela()
                elif botao == "<":
                    if self.canalAtual <= 2:
                        self.canalAtual = self.canalTotal
                        self.mostrarTela()
    
                        return
    
                    self.canalAtual -= 1
                    self.mostrarTela()
                else:
                    self.mostrarTela()
            else:
                self.mostrarTela()
    
    

    Programa principal:

    
    tv = ControleRemoto()
    
    controle = str(input("< CH > - VOL + ")).strip()[0]
    
    while True:
        os.system("cls" if os.name == "nt" else "clear")
    
        if controle == "0":
            break
        elif controle == "@":
            tv.ligarOuDesligar()
        elif controle == "-" or controle == "+":
            tv.aumentarOuDiminuirVolume(controle)
        elif controle == "<" or controle == ">":
            tv.mudarCanal(controle)
    
        controle = str(input("< CH > - VOL + ")).strip()[0]