سلام روزتون بخیر
من تابع eval رو نوشتم اما باگی که داره اینه وقتی پرانتزی درون پرانتز دیگریه خطا میده و ایدهای ندارم که باید چیکار کنم
اگر ایدهای دارید خوشحال میشم کمکم کنید وگرنه همین رو به عنوان نکته آموزشی درون سایت قرار میدم
''' bayad bein adad va parantez amaliat riazi bashe tavan va radikal ro in kod poshtibani nemikone bugi ke dare ine parantezi daroon parntez dige bashe be moshkel bar mikhore ''' ebarat_string = input("Please Enter ... \\n") print(eval(ebarat_string)) ebarat_string = ebarat_string + '.' # to khat 15 ta 40 baray jelogiry as yek bag mishe va adad akhar ham be list e ezafe mishe def joda_sazi (ebarat_string): ebarat_joda_shode = list() for i in ebarat_string: #kol string ra joda mikone ebarat_joda_shode += i return ebarat_joda_shode def chasbondan_adad(ebarat_joda_shode): list_ebarat = list() d = str() for i in ebarat_joda_shode: #adad ra be ham michasbone if i.isalnum(): d = d+i else: list_ebarat.append(d) d = '' if i == '(': list_ebarat.append('(') elif i == ')': list_ebarat.append(')') elif i == '*': list_ebarat.append('*') elif i == '/': list_ebarat.append('/') elif i == '+': list_ebarat.append('+') elif i == '-': list_ebarat.append('-') for i in range(list_ebarat.count('') ):# string khali hay ezafi ke niazi be anha nadarim ra pak mikonad list_ebarat.remove('') return list_ebarat def amaliat_ha (list_ebarat): while list_ebarat.count('*') != 0: jaygah_alamat_amaliat = list_ebarat.index('*') amaliat_adad = (float(list_ebarat[jaygah_alamat_amaliat - 1])) * (float(list_ebarat[jaygah_alamat_amaliat + 1])) list_ebarat.pop(list_ebarat.index('*') -1) list_ebarat.pop(list_ebarat.index('*') +1) list_ebarat.pop(list_ebarat.index('*')) list_ebarat.insert((jaygah_alamat_amaliat - 1) ,amaliat_adad ) while list_ebarat.count('/') != 0: jaygah_alamat_amaliat = list_ebarat.index('/') amaliat_adad = (float(list_ebarat[jaygah_alamat_amaliat - 1])) / (float(list_ebarat[jaygah_alamat_amaliat + 1])) list_ebarat.pop(list_ebarat.index('/') -1) list_ebarat.pop(list_ebarat.index('/') +1) list_ebarat.pop(list_ebarat.index('/')) list_ebarat.insert((jaygah_alamat_amaliat - 1) ,amaliat_adad ) while list_ebarat.count('+') != 0: jaygah_alamat_amaliat = list_ebarat.index('+') amaliat_adad = (float(list_ebarat[jaygah_alamat_amaliat - 1])) + (float(list_ebarat[jaygah_alamat_amaliat + 1])) list_ebarat.pop(list_ebarat.index('+') -1) list_ebarat.pop(list_ebarat.index('+') +1) list_ebarat.pop(list_ebarat.index('+')) list_ebarat.insert((jaygah_alamat_amaliat - 1) ,amaliat_adad ) while list_ebarat.count('-') != 0: jaygah_alamat_amaliat = list_ebarat.index('-') amaliat_adad = (float(list_ebarat[jaygah_alamat_amaliat - 1])) - (float(list_ebarat[jaygah_alamat_amaliat + 1])) list_ebarat.pop(list_ebarat.index('-') -1) list_ebarat.pop(list_ebarat.index('-') +1) list_ebarat.pop(list_ebarat.index('-')) list_ebarat.insert((jaygah_alamat_amaliat - 1) ,amaliat_adad ) return list_ebarat def parantez (list_check): #baray mohasebe dakhle parantez list_check = list_check[list_check.index('(') : list_check.index(')') + 1] if list_check.count('(') > 1 : return parantez else: list_check = amaliat_ha(list_check) list_check.remove('(') list_check.remove(')') adad_akhar_parantez = list_check.pop() return(adad_akhar_parantez) def mohasebe(ebarat_string): #mohasbe akhar list_ebarat = (chasbondan_adad(joda_sazi(ebarat_string))) tedad_parantez = list_ebarat.count('(') i = 0 while i < tedad_parantez : adad_jay_gozari = parantez(list_ebarat) while (list_ebarat.index('(') + 1) != list_ebarat.index(')'): list_ebarat.pop(list_ebarat.index('(') + 1) list_ebarat.insert(list_ebarat.index('('), adad_jay_gozari) list_ebarat.remove('(') list_ebarat.remove(')') i += 1 list_ebarat = amaliat_ha(list_ebarat) javab_akhar = list_ebarat.pop() return javab_akhar print(mohasebe(ebarat_string))