1
resposta

Minha resolução

Cria a classe base Veiculo, que guarda as informações comuns a todos os veículos, como marca, modelo e se está ligado ou desligado. Serve como ponto de partida para criar outros tipos de veículos..

class Veiculo:
    def __init__(self, marca, modelo, estado=False):

    self.marca = marca
    self.modelo = modelo
    self.estado = estado

    def __str__(self):
        return f"{self.marca} {self.modelo} - {'Ligado' if self.estado else 'Desligado'}"

    def __repr__(self):
        return f"Veiculo(marca='{self.marca}', modelo='{self.modelo}', estado={self.estado})"

Cria a classe Carro, que herda da classe Veiculo. Ela adiciona uma informação extra: a quantidade de portas. Também mostra essa informação quando o carro for exibido.

from veiculos import Veiculo

class Carro(Veiculo):

    def __init__(self, marca, modelo, portas):
    super().__init__(marca, modelo, estado=False)
    self.portas = portas


    def __str__(self):
       return f"{self.marca} {self.modelo} - {self.portas} portas - {'Ligado' if self.estado else 'Desligado'}"

Cria a classe Moto, também herdando de Veiculo. Adiciona o detalhe se a moto é esportiva ou casual e mostra isso junto com os outros dados.

from veiculos import Veiculo

class Moto(Veiculo):

    def __init__(self, marca, modelo="Casual", esportiva=False):
        super().__init__(marca, modelo, estado=False)
        self.esportiva = esportiva

    def __str__(self):
        tipo = "Esportiva" if self.esportiva else "Casual"
        return f"{self.marca} {self.modelo} - {'Ligado' if self.estado else 'Desligado'} - Tipo: {tipo}"

Arquivo Principal (main.py) Sistema com menu de terminal. Permite: criar e armazenar veículos numa lista, ligar ou desligar veículos individualmente, exibir todos os veículos e buscar por marca ou modelo.

from veiculos import veiculo
from carro import Carro
from moto import Moto

# Criando instâncias de carro e moto
c1 = Carro("Toyota", "Corolla", 4)
c2 = Carro("Ford", "Fiesta", 2)
m1 = Moto("Yamaha", modelo="YZF-R3", esportiva=True)
m2 = Moto("Honda", modelo="CG 160", esportiva=False)
veiculos = [c1, c2, m1, m2]


def limpar():
    import os
    os.system('cls' if os.name == 'nt' else 'clear')


def veiculo_str(veiculo):
    tipo = veiculo.__class__.__name__
    estado = "Ligado" if veiculo.estado else "Desligado"
    if tipo == "Moto":
        info = f"Esportiva: {'Sim' if getattr(veiculo, 'esportiva', False) else 'Não'}"
    elif tipo == "Carro":
        info = f"Portas: {veiculo.portas}"
    else:
        info = ""
    return f"{tipo:<6} | {veiculo.marca:<10} | {veiculo.modelo:<12} | {estado:<9} | {info:<15}"


def exibir():
    limpar()
    print(f"{'Tipo':<6} | {'Marca':<10} | {'Modelo':<12} | {'Estado':<9} | {'Info':<15} \n")
    for veiculo in veiculos:
        print(veiculo_str(veiculo))


def buscar_veiculo(marca, modelo):
    for veiculo in veiculos:
        if veiculo.marca.lower() == marca.lower() and veiculo.modelo.lower() == modelo.lower():
            return veiculo
    return None


def alterar_estado(ligar=True):
    limpar()
    marca = input("Marca: ").strip()
    modelo = input("Modelo: ").strip()
    veiculo = buscar_veiculo(marca, modelo)
    if veiculo:
        veiculo.estado = ligar
        print(f"{veiculo.marca} {veiculo.modelo} {'ligado' if ligar else 'desligado'}.")
    else:
        print("Veículo não encontrado.")


def main():
    while True:
        limpar()
        exibir()

    print("\n1. Ligar veículo")
    print("2. Desligar veículo")
    print("3. Exibir veículos")
    print("4. Sair")
    opcao = input("\nOpção: ")
    if opcao == "1":
        alterar_estado(ligar=True)
        # Remova o return True para continuar no menu
    elif opcao == "2":
        alterar_estado(ligar=False)
    elif opcao == "3":
        exibir()
        input()
    elif opcao == "4":
        break
    else:
        print("Opção inválida.")
        input()


if __name__ == "__main__":
    main()
1 resposta

Boa tarde! Como está?

Incrível! Continue resolvendo os desafios e compartilhando com a comunidade Alura.

Notei que você utilizou o princípio da herança para reaproveitar atributos e métodos entre classes, aplicou de forma eficaz o método __str__ para tornar a exibição dos objetos mais clara e compreendeu a importância do uso de listas e instâncias para organizar os dados de forma dinâmica.

Permaneça postando as suas soluções, com certeza isso ajudará outros estudantes e tem grande relevância para o fórum.

Ícone de sugestão Para saber mais:

Sugestão de conteúdo para você mergulhar ainda mais sobre o tema:

Fico à disposição! E se precisar, conte sempre com o apoio do fórum.

Abraço e bons estudos!

AluraConte com o apoio da comunidade Alura na sua jornada. Abraços e bons estudos!