2638 - eval exp: Difference between revisions

From Bitnami MediaWiki
Pagină nouă: Se consideră o expresie formată din numere naturale și operatorii '''+''', '''-''','''*'''. ==Cerința== Să se evalueze expresia. ==Date de intrare== Programul citește de la tastatură expresia. ==Date de ieșire== Programul va afișa pe ecran un singur număr reprezentând valoarea expresiei. ==Restricții și precizări== *Lungimea expresiei va fi de cel mult '''50''' de caractere *Rezultatul final precum și rezultatele intermediare se vor încadra în tipul d...
 
No edit summary
 
Line 19: Line 19:
*Expresia este corectă și nu conține alte caractere în afară de cifre și operatorii '''+''', '''-''', '''*'''.
*Expresia este corectă și nu conține alte caractere în afară de cifre și operatorii '''+''', '''-''', '''*'''.


==Exemplu==:
==Exemplul 1:==


;Intrare
;Intrare


:234-10+21*12
234-10+21*12


;Ieșire
;Ieșire


:476
Datele de intrare corespund restrictiilor impuse.
476
 
==Exemplul 2:==
 
;Intrare
 
eval exp
 
;Ieșire
 
Datele de intrare nu corespund restrictiilor impuse.


==Rezolvare==
==Rezolvare==
Line 33: Line 44:
<syntaxhighlight lang="python" line="1" start="1">
<syntaxhighlight lang="python" line="1" start="1">


# Definim o functie care evalueaza o expresie
def verificare_restrictii(expresia):    # functia de verificare a datelor de intrare
def evalueaza_expresia(expresie):
    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:
     try:
         # Folosim functia eval() pentru a evalua expresia
         # Folosim functia eval() pentru a evalua expresia
         rezultat = eval(expresie)
         rezultat = eval(expresia)
         # Returnam rezultatul
         # Verificam daca rezultatul se incadreaza in tipul de date long long
         return rezultat
        if -9223372036854775808 <= rezultat <= 9223372036854775807:
     except Exception as e:
            # Returnam rezultatul
            return rezultat
         else:
            return "Datele de intrare nu corespund restrictiilor impuse."
     except Exception as excep:
         # Daca apare o eroare, o returnam
         # Daca apare o eroare, o returnam
         return str(e)
         return str(excep)
 


# Citim expresia de la tastatura
if __name__ == '__main__':
expresie = input("Introduceti expresia: ")
    try:
# Apelam functia pentru a evalua expresia si afisam rezultatul
        # Citim expresia de la tastatura
print("Rezultatul este: ", evalueaza_expresia(expresie))
        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>
</syntaxhighlight>

Latest revision as of 20:38, 12 December 2023

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

Cerința

Să se evalueze expresia.

Date de intrare

Programul citește de la tastatură expresia.

Date de ieșire

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

Restricții și precizări

  • 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:

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

Exemplul 2:

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

Rezolvare

<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>