diff --git a/TPC5/tpc5.py b/TPC5/tpc5.py index 19ec4f4..f9d9008 100644 --- a/TPC5/tpc5.py +++ b/TPC5/tpc5.py @@ -3,38 +3,77 @@ import sys moedas_validas = ["1c", "2c", "5c", "10c", "20c", "50c", "1e", "2e"] + def format_saldo(saldo): - euros = saldo // 1 - cents = (saldo - euros) * 100 + euros = int(saldo // 1) + cents = int((saldo - euros) * 100) return f"{euros}e{cents}c" + def main(): levantado = False - msg = "" saldo = 0 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 msg = "Introduza moedas." - elif levantado and re.match(r"MOEDA\s",line): - moedas = re.findall(r"(\d+)(\w)",line) + elif levantado and re.match(r"MOEDA\s", line): + moedas = re.findall(r"((\d+)(\w))", line) invalidas = [] for moeda in moedas: - if moeda.group(0) in moedas_validas: - valor = int(moeda.group(1)) - if moeda.group(2) == "c": + if moeda[0] in moedas_validas: + valor = int(moeda[1]) + if moeda[2] == "c": valor = valor / 100 saldo += valor - else: - invalidas.append(moeda.group(0)) + else: + invalidas.append(moeda[0]) if len(invalidas) > 1: msg += str(invalidas) + " - moedas invalidas; " 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) - if __name__ == "__main__": main()