2638 - eval exp

From Bitnami MediaWiki

Se consideră o expresie formată din numere naturale și operatorii +, -,*.

Cerința[edit | edit source]

Să se evalueze expresia.

Date de intrare[edit | edit source]

Programul citește de la tastatură expresia.

Date de ieșire[edit | edit source]

Programul va afișa pe ecran un singur număr reprezentând valoarea expresiei.

Restricții și precizări[edit | edit source]

  • Lungimea expresiei va fi de cel mult 50 de caractere
  • Rezultatul final precum și rezultatele intermediare se vor încadra în tipul de date long long
  • Expresia este corectă și nu conține alte caractere în afară de cifre și operatorii +, -, *.

Exemplul 1:[edit | edit source]

Intrare
234-10+21*12
Ieșire
Datele de intrare corespund restrictiilor impuse.
476

Exemplul 2:[edit | edit source]

Intrare
eval exp
Ieșire
Datele de intrare nu corespund restrictiilor impuse.

Rezolvare[edit | edit source]

<syntaxhighlight lang="python" line="1" start="1">

def verificare_restrictii(expresia): # functia de verificare a datelor de intrare

   if len(expresia) <= 50 and all(c.isdigit() or c in ['+', '-', '*'] for c in expresia):
       return True
   else:
       return False


def evalueaza_expresia(expresia):

   try:
       # Folosim functia eval() pentru a evalua expresia
       rezultat = eval(expresia)
       # Verificam daca rezultatul se incadreaza in tipul de date long long
       if -9223372036854775808 <= rezultat <= 9223372036854775807:
           # Returnam rezultatul
           return rezultat
       else:
           return "Datele de intrare nu corespund restrictiilor impuse."
   except Exception as excep:
       # Daca apare o eroare, o returnam
       return str(excep)


if __name__ == '__main__':

   try:
       # Citim expresia de la tastatura
       expresie = input("Introduceti expresia: ")
       if verificare_restrictii(expresie):             # verificam datele de intrare
           print("Datele de intrare corespund restrictiilor impuse.")
           # Apelam functia pentru a evalua expresia si afisam rezultatul
           print("Rezultatul este: ", evalueaza_expresia(expresie))
       else:
           print("Datele de intrare nu corespund restrictiilor impuse.")
   # ne asteptam la o eroare din cauza datelor de intrare, o tratam corespunzator
   except Exception as e:
       print("A aparut o eroare: ", str(e))

</syntaxhighlight>