tpc5 done

This commit is contained in:
Tiago Sousa 2023-03-22 12:06:29 +00:00
parent 2bd5481644
commit 233da9d95f

View file

@ -3,38 +3,77 @@ import sys
moedas_validas = ["1c", "2c", "5c", "10c", "20c", "50c", "1e", "2e"] moedas_validas = ["1c", "2c", "5c", "10c", "20c", "50c", "1e", "2e"]
def format_saldo(saldo): def format_saldo(saldo):
euros = saldo // 1 euros = int(saldo // 1)
cents = (saldo - euros) * 100 cents = int((saldo - euros) * 100)
return f"{euros}e{cents}c" return f"{euros}e{cents}c"
def main(): def main():
levantado = False levantado = False
msg = ""
saldo = 0 saldo = 0
for line in sys.stdin: for line in sys.stdin:
if not levantado and re.match(r"LEVANTAR\s*",line): msg = ""
if not levantado and re.match(r"LEVANTAR\s*", line):
levantado = True levantado = True
msg = "Introduza moedas." msg = "Introduza moedas."
elif levantado and re.match(r"MOEDA\s",line): elif levantado and re.match(r"MOEDA\s", line):
moedas = re.findall(r"(\d+)(\w)",line) moedas = re.findall(r"((\d+)(\w))", line)
invalidas = [] invalidas = []
for moeda in moedas: for moeda in moedas:
if moeda.group(0) in moedas_validas: if moeda[0] in moedas_validas:
valor = int(moeda.group(1)) valor = int(moeda[1])
if moeda.group(2) == "c": if moeda[2] == "c":
valor = valor / 100 valor = valor / 100
saldo += valor saldo += valor
else: else:
invalidas.append(moeda.group(0)) invalidas.append(moeda[0])
if len(invalidas) > 1: if len(invalidas) > 1:
msg += str(invalidas) + " - moedas invalidas; " msg += str(invalidas) + " - moedas invalidas; "
msg += "saldo = " + format_saldo(saldo) msg += "saldo = " + format_saldo(saldo)
elif elif levantado and line[:2] == "T=":
match_num = re.match(r"T=((\d{3})\d+)", line)
if match_num:
fst_3digits = match_num.group(2)
num_len = len(match_num.group(1))
if num_len == 9:
if fst_3digits == "601" or fst_3digits == "641":
msg = "Numero permitido neste telefone. Queira discar novo número!"
elif fst_3digits[0] == "2":
if saldo >= 0.25:
saldo -= 0.25
msg = f"saldo = {format_saldo(saldo)}"
else:
msg = f"Saldo insuficiente {format_saldo(saldo)}! Para chamadas iniciadas por 2, saldo minimo de 25c"
elif fst_3digits == "800":
msg = f"saldo = {format_saldo(saldo)}"
elif fst_3digits == "808":
if saldo >= 0.10:
saldo -= 0.10
msg = f"saldo = {format_saldo(saldo)}"
else:
msg = f"Saldo insuficiente {format_saldo(saldo)}! Para chamadas iniciadas por 808, saldo minimo de 10c"
elif fst_3digits[:2] == "00":
if saldo >= 1.5:
saldo -= 1.5
msg = f"saldo = {format_saldo(saldo)}"
else:
msg = f"Saldo insuficiente {format_saldo(saldo)}! Para chamadas iniciadas por 00, saldo minimo de 1e50c"
else:
msg = "Numero invalido!"
else:
msg = "Numero invalido!"
elif levantado and re.match(r"POUSAR\s*", line):
levantado = False
msg = f"Troco={format_saldo(saldo)}; Volte Sempre!"
elif levantado and line == re.match(r"ABORTAR\s*", line):
levantado = False
msg = f"Operacao abortada; Saldo devolvido={format_saldo(saldo)}"
else:
msg = "Instrucao incorreta, tente novamente"
print(msg) print(msg)
if __name__ == "__main__": if __name__ == "__main__":
main() main()