Condicionais ternárias e inlines
Condicionais em Python são escritas com a palavra if exemplo:
aberto = True
if aberto:
print("Boas vindas, pode entrar")
else:
print("Desculpe, estamos fechados")
Essa mesma condicional pode ser expressa usando um condicional ternário também chamado de if inline
aberto = True
print("Boas vindas, pode entrar" if aberto else "Desculpe, estamos fechados")
Essa construção é bastante útil em casos onde precisamos atribuir variáveis:
if temperatura > 30:
mensagem = "Está calor"
else:
mensagem = "Está frio"
Pode ser reescrito com:
mensagem = "Está calor" if temperatura > 30 else "Está frio"
Operadores lógicos.
Também é possível usar operadores lógicos para criar condicionais abreviadas.
NOTA Muito cuidado ao escolher esta opção, pois além de estar sujeita a falsos positivos também não é tão fácil de ler.
aberto = True
print(aberto and "Boas vindas, pode entrar" or "Desculpe, estamos fechados")
O interessante é ver como os operadores lógicos and
e or
podem ser usados
para tomar decisões.
Exemplo com tudo o que vimos até aqui
"""
Faça um programa de terminal que exibe ao usuário uma listas dos quartos
disponiveis para alugar e o preço de cada quarto, esta informação está
disponível em um arquivo de texto separado por virgulas.
`quartos.txt`
# codigo, nome, preço
1,Suite Master,500
2,Quarto Familia,200
3,Quarto Single,100
4,Quarto Simples,50
O programa pergunta ao usuário o nome, qual o número do quarto a ser reservado
e a quantidade de dias e no final exibe o valor estimado a ser pago.
O programa deve salvar esta escolha em outro arquivo contendo as reservas
`reservas.txt`
# cliente, quarto, dias
Bruno,3,12
Se outro usuário tentar reservar o mesmo quarto o programa deve exibir uma
mensagem informando que já está reservado.
"""
import sys
import logging
RESERVAS_FILE = "reservas.txt"
QUARTOS_FILE = "quartos.txt"
# Acesso ao banco de dados
# TODO: Usar pacote csv
ocupados = {} # acumulador
try:
for line in open(RESERVAS_FILE):
nome_cliente, num_quarto, dias = line.strip().split(",")
ocupados[int(num_quarto)] = {
"nome_cliente": nome_cliente,
"dias": int(dias),
}
except FileNotFoundError:
logging.error("arquivo %s não existe", RESERVAS_FILE)
sys.exit(1)
# TODO: Usar função para ler os arquivos
quartos = {} # acumulador
try:
for line in open(QUARTOS_FILE):
num_quarto, nome_quarto, preco = line.strip().split(",")
quartos[int(num_quarto)] = {
"nome_quarto": nome_quarto,
"preco": float(preco), # TODO: Usar Decimal
"disponivel": False if int(num_quarto) in ocupados else True,
}
except FileNotFoundError:
logging.error("arquivo %s não existe", QUARTOS_FILE)
sys.exit(1)
# Programa principal
print("Reservas no Hotel Pythonico da Linux Tips")
print("-" * 52)
if len(ocupados) == len(quartos):
print("Hotel está lotado, volte depois.")
sys.exit(0)
nome_cliente = input("Qual é o seu nome:").strip()
print()
# TODO: Usar rich.Table
print("Lista de quartos")
print()
head = ["Número", "Nome do Quarto", "Preço", "Disponível"]
print(f"{head[0]:<6} - {head[1]:<14} - R$ {head[2]:<9} - {head[3]:<10}")
for num_quarto, dados_quarto in quartos.items():
nome_quarto = dados_quarto["nome_quarto"]
preco = dados_quarto["preco"]
disponivel = "⛔" if not dados_quarto["disponivel"] else "👍"
print(
f"{num_quarto:<6} - {nome_quarto:<14} - " f"R$ {preco:<9.2f} - {disponivel:<10}"
)
print("-" * 52)
# reserva
try:
num_quarto = int(input("Qual o quarto desejado:").strip())
if not quartos[num_quarto]["disponivel"]:
print(f"O quarto {num_quarto} está ocupado, escolha outro.")
sys.exit(0)
except KeyError:
print(f"O Quarto {num_quarto} não existe.")
sys.exit(0)
except ValueError:
print("Número inválido, digite apenas digitos.")
sys.exit(0)
try:
dias = int(input("Quantos dias:").strip())
except ValueError:
print("Número inválido, digite apenas digitos.")
sys.exit(0)
nome_quarto = quartos[num_quarto]["nome_quarto"]
preco_diaria = quartos[num_quarto]["preco"]
total = dias * preco_diaria
print(
f"Olá {nome_cliente}, você escolheu o quarto {nome_quarto} "
f"o valor total estimado será R$ {total:.2f}"
)
if input("Confirma? (digite y)").strip().lower() in ("y", "yes", "sim", "s"):
with open(RESERVAS_FILE, "a") as reserva_file:
reserva_file.write(f"{nome_cliente},{num_quarto},{dias}\n")