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[edit]

Să se evalueze expresia.

Date de intrare[edit]

Programul citește de la tastatură expresia.

Date de ieșire[edit]

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

Restricții și precizări[edit]

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

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

Exemplul 2:[edit]

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

Rezolvare[edit]

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