Python Desafio 5: Locadora de Carro

Caso ainda não tenha feito o Desafio 4 – Clique Aqui

Descrição do Desafio:

Acabei de ver meu errinho de português kkk portifólio 🙂

Você vai construir um programa em Python que simula uma locadora simples. O usuário poderá:

  • Ver o Portfólio;
  • Alugar um carro por x número de dias;
  • Devolver o carroalugado.

Regras:

Você deve usar um dicionário em Python para guardar os itens disponíveis e o preço por dia.

Crie um menu interativo no terminal, com as seguintes opções:

  • Mostrar Portifólio
  • Alugar um carro
  • Devolver um carro

Exemplo de funções para organizar o código:

  • mostrar_portifolio()
  • alugar_um_carro()
  • devolver_um_carro()
  • tela()

O carro alugado deve ser removido da lista de carros e adicionado a uma nova lista chamada carros_alugados.

Ao devolver, o item deve voltar para os disponíveis.

Use try/except para tratar entradas inválidas (ex: letras onde deveria ser número).

Exiba o valor total do aluguel com base no número de dias.


Exemplo de execução:

Tela Inicial


Mostrar portifólio


Alugar um carro


Devolver um Carro


Resultado

import os
import sys

carros = {
    "Fiat Mobi": 95.00,
    "Chevrolet Onix": 120.00,
    "Volkswagen Gol": 110.00,
    "Hyundai HB20": 130.00,
    "Toyota Corolla": 180.00,
    "Honda Civic": 185.00,
    "Renault Kwid": 90.00,
    "Jeep Renegade": 200.00,
    "Chevrolet Tracker": 210.00,
    "Toyota Hilux": 250.00,
    "Volkswagen T-Cross": 220.00,
    "Fiat Toro": 240.00,
    "Nissan Kicks": 190.00,
    "Hyundai Creta": 200.00,
    "Ford Ka": 100.00
}

carros_alugados = {}

def mostrar_portifolio(lista_carros):
    os.system("cls")
    for index, (carros, valores) in enumerate(lista_carros.items()):
        print(f"[{index}] {carros} - R$ {valores:.0f} /dia")
    

def alugar_um_carro(lista_carros, lista_carros_alugados):
    print ("[ ALUGAR ] Dê uma olhada em nosso portifólio.\n")
    mostrar_portifolio(lista_carros)
    while True:
        try:
            codigo_do_carro = int(input("\nEscolha o código do carro:\n"))
            if codigo_do_carro not in range(len(lista_carros)+1):
                print(f"Digite um número de 0 a {len(lista_carros)}")
                continue
        except ValueError:
            print("Você digitou uma letra, por favor digite o código do carro\n")
            continue   
        while True: 
            try:
                dia = int(input("\nEscolha por quantos dias deseja alugar:\n"))
                break
            except ValueError:
                print("Você digitou uma letra, por favor digite o total de dias\n")
                continue    

        nome_carro, preco_diaria = list(lista_carros.items())[codigo_do_carro]
        valor_total = dia*preco_diaria
        os.system("cls")
        print(f"\nVocê escolheu {nome_carro} por {dia} dias.\n")
        print(f"O aluguel totalizaria R$ {valor_total}. Deseja Alugar?\n")

        while True:
            try:
                vou_alugar = int(input("0 - SIM | 1 - NÃO\n"))
                if vou_alugar not in range(2):
                    print(f"Digite 0 para ALUGAR ou 1 para NÃO ALUGAR\n")
                    continue
                elif vou_alugar == 0:
                    os.system("cls")
                    print(f"Parabéns você alugou o {nome_carro} por {dia} dias.\n")
                    retirar_portifolio(nome_carro, preco_diaria, lista_carros, lista_carros_alugados)
                    acesso()
                else:
                    acesso()
            except ValueError:
                print("Você digitou uma letra, por favor digite 0 ou 1\n")
                continue  

def retirar_portifolio(nome_do_carro, valor_do_carro, lista_carros, lista_carros_alugados):
    lista_carros.pop(nome_do_carro)
    lista_carros_alugados.update({nome_do_carro:valor_do_carro})


def devolver_um_carro(lista_carros, lista_de_carros_alugados):
    os.system("cls")
    if len(lista_de_carros_alugados) == 0:
        print("Nenhum carro foi alugado\n")
        acesso()
    print(f"Segue a lista de carros alugados. Qual você deseja devolver?")
    for index, (carros, valores) in enumerate(lista_de_carros_alugados.items()):
        print(f"[{index}] {carros} - R$ {valores:.0f} /dia")
    while True:
        try:
            codigo_do_carro = int(input("\nEscolha o código do carro que deseja devolver:\n"))
            if codigo_do_carro not in range(len(lista_de_carros_alugados)+1):
                print(f"Digite um número de 0 a {len(lista_de_carros_alugados)}")
                continue
            else:
                break
        except ValueError:
            print("Você digitou uma letra, por favor digite o código do carro\n")
            continue   
    
    nome_carro, preco_diaria = list(lista_de_carros_alugados.items())[codigo_do_carro]
    lista_carros.update({nome_carro:preco_diaria})
    lista_de_carros_alugados.pop(nome_carro)
    os.system("cls")
    print(f"Obrigado por devolver o carro {nome_carro}\n")
    acesso()

def acesso():
    print("\n=========\n")
    while True:
        try:
            print("\nVocê deseja continuar ou sair?")
            saida = int(input("0 - CONTINUAR | 1 - SAIR\n"))
            if saida not in range(2):
                continue
            elif saida == 0:
                tela()
            else:
                sys.exit()
        except ValueError:
            print("\nDigite 0 para continuar ou 1 para sair")
            continue

def tela():
    while True:
        os.system("cls")
        print("===========\n")
        print("Bem vindo à locadora de carros!\n")
        print("===========\n")
        print("O que você deseja fazer?\n")
        
        try: 
            fazer = int(input("0 - Mostrar portifólio | 1 - Alugar um carro | 2 - Devolver um carro\n"))
            if fazer not in range(3):
                print("Digite um valor de 0 a 2")
                continue
        except ValueError:
            print("Digite um número de 0 a 2")
            continue

        if fazer == 0:
            mostrar_portifolio(carros)
            acesso()
        elif fazer == 1:
            alugar_um_carro(carros, carros_alugados)
            acesso()
        else: 
            devolver_um_carro(carros, carros_alugados)

tela()

Deixe um comentário