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