2638 - eval exp: Difference between revisions
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 '''+''', '''-''', '''*'''. | ||
== | ==Exemplul 1:== | ||
;Intrare | ;Intrare | ||
234-10+21*12 | |||
;Ieșire | ;Ieșire | ||
: | 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"> | ||
# | def verificare_restrictii(expresia): # functia de verificare a datelor de intrare | ||
def evalueaza_expresia( | 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( | rezultat = eval(expresia) | ||
# Returnam rezultatul | # Verificam daca rezultatul se incadreaza in tipul de date long long | ||
return | if -9223372036854775808 <= rezultat <= 9223372036854775807: | ||
except Exception as | # 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( | 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 | 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>