2649 - reactii
Cerința
Într-un laborator de chimie, cercetătorii monitorizează o serie de reacții chimice reprezentate prin stive de reacții. Fiecare reacție poate adăuga un nou element pe stivă sau poate elimina elementul de la vârful stivei. Sarcina ta este să implementezi un program care să simuleze aceste operațiuni asupra unei stive de reacții chimice.
Date de intrare
Programul citește de la tastatură:
Un număr întreg n reprezentând numărul de operațiuni. O listă de n operațiuni, fiecare operațiune fiind de forma "PUSH X" (unde X este un element chimic) sau "POP".
Date de ieșire
Pe ecran se va afișa stiva rezultată după efectuarea tuturor operațiunilor. Dacă o operațiune "POP" este efectuată pe o stivă goală, se va afișa mesajul "Eroare: stivă goală".
Restricții și precizări
- 1 ⩽ n ⩽ 100
- 'x' este întotdeauna un tip de bloc reprezentat printr-un șir de caractere.
Exemplu 1
- Intrare
5
PUSH H
PUSH O
POP
PUSH N
PUSH C
- Iesire
['H', 'N', 'C']
Exemplu 2
- Intrare
4
PUSH Na
POP
POP
PUSH Cl
- Iesire
Eroare: stivă goală
['Cl']
Datele de intrare nu corespund restricțiilor impuse.
Rezolvare
<syntaxhighlight lang="python" line> def citeste_date():
try: n = int(input("Introduceți numărul de operațiuni (n): ")) operatiuni = [] for _ in range(n): operatiune = input().strip() operatiuni.append(operatiune) return n, operatiuni except ValueError: return None, None
def valideaza_date(n, operatiuni):
if not (1 <= n <= 100): return False for operatiune in operatiuni: if not (operatiune.startswith("PUSH ") or operatiune == "POP"): return False if operatiune.startswith("PUSH ") and len(operatiune.split()) != 2: return False if operatiune.startswith("PUSH ") and not operatiune.split()[1].isalpha(): return False return True
def proceseaza_operatiuni(n, operatiuni):
stiva = [] for operatiune in operatiuni: if operatiune.startswith("PUSH "): _, element = operatiune.split() stiva.append(element) elif operatiune == "POP": if stiva: stiva.pop() else: print("Eroare: stivă goală") return stiva
def main():
n, operatiuni = citeste_date() if n is None or operatiuni is None or not valideaza_date(n, operatiuni): print("Datele de intrare nu corespund restricțiilor impuse.") return print("Datele de intrare corespund restricțiilor impuse.") rezultat = proceseaza_operatiuni(n, operatiuni) print(rezultat)
if __name__ == "__main__":
main()
</syntaxhighlight>