import math
def RPN_calc(list_calc_exp):
operators = {'+': lambda b,a: a+b,
'-': lambda b,a: a-b,
'*': lambda b,a: a*b,
'/': lambda b,a: a/b,
'//': lambda b,a: a//b,
'%': lambda b,a: a%b,
'^': lambda b,a: a**b,
'!': lambda x: math.factorial(x)}
for ind, char in enumerate(list_calc_exp):
if char == '!':
list_calc_exp[ind-1] = operators[char](float(list_calc_exp[ind-1]))
del list_calc_exp[ind]
return list_calc_exp
elif char in operators:
list_calc_exp[ind-2] = operators[char](float(list_calc_exp[ind-1]), float(list_calc_exp[ind-2]))
del list_calc_exp[ind]
del list_calc_exp[ind-1]
return list_calc_exp
def output_res(text):
result = text.split()
while len(result) != 1:
result = RPN_calc(result)
return result[0]
print(output_res('0.5 1 2 ! * 2 1 ^ + 10 + *'))
print(output_res('1 2 3 4 ! + - / 100 *'))
print(output_res('100 807 3 331 * + 2 2 1 + 2 + * 5 ^ * 23 10 558 * 10 * + + *'))
aW1wb3J0IG1hdGgKCmRlZiBSUE5fY2FsYyhsaXN0X2NhbGNfZXhwKToKCiAgICBvcGVyYXRvcnMgPSB7JysnOiBsYW1iZGEgYixhOiBhK2IsCiAgICAgICAgICAgICAgICAgJy0nOiBsYW1iZGEgYixhOiBhLWIsCiAgICAgICAgICAgICAgICAgJyonOiBsYW1iZGEgYixhOiBhKmIsCiAgICAgICAgICAgICAgICAgJy8nOiBsYW1iZGEgYixhOiBhL2IsCiAgICAgICAgICAgICAgICAgJy8vJzogbGFtYmRhIGIsYTogYS8vYiwKICAgICAgICAgICAgICAgICAnJSc6IGxhbWJkYSBiLGE6IGElYiwKICAgICAgICAgICAgICAgICAnXic6IGxhbWJkYSBiLGE6IGEqKmIsCiAgICAgICAgICAgICAgICAgJyEnOiBsYW1iZGEgeDogbWF0aC5mYWN0b3JpYWwoeCl9CgoKICAgIGZvciBpbmQsIGNoYXIgaW4gZW51bWVyYXRlKGxpc3RfY2FsY19leHApOgogICAgICAgIGlmIGNoYXIgPT0gJyEnOgogICAgICAgICAgICBsaXN0X2NhbGNfZXhwW2luZC0xXSA9IG9wZXJhdG9yc1tjaGFyXShmbG9hdChsaXN0X2NhbGNfZXhwW2luZC0xXSkpCiAgICAgICAgICAgIGRlbCBsaXN0X2NhbGNfZXhwW2luZF0KICAgICAgICAgICAgcmV0dXJuIGxpc3RfY2FsY19leHAKICAgICAgICBlbGlmIGNoYXIgaW4gb3BlcmF0b3JzOgogICAgICAgICAgICBsaXN0X2NhbGNfZXhwW2luZC0yXSA9IG9wZXJhdG9yc1tjaGFyXShmbG9hdChsaXN0X2NhbGNfZXhwW2luZC0xXSksIGZsb2F0KGxpc3RfY2FsY19leHBbaW5kLTJdKSkKICAgICAgICAgICAgZGVsIGxpc3RfY2FsY19leHBbaW5kXQogICAgICAgICAgICBkZWwgbGlzdF9jYWxjX2V4cFtpbmQtMV0KICAgICAgICAgICAgcmV0dXJuIGxpc3RfY2FsY19leHAKCmRlZiBvdXRwdXRfcmVzKHRleHQpOgoKICAgIHJlc3VsdCA9IHRleHQuc3BsaXQoKQoKICAgIHdoaWxlIGxlbihyZXN1bHQpICE9IDE6CiAgICAgICAgcmVzdWx0ID0gUlBOX2NhbGMocmVzdWx0KQogICAgcmV0dXJuIHJlc3VsdFswXQoKCnByaW50KG91dHB1dF9yZXMoJzAuNSAxIDIgISAqIDIgMSBeICsgMTAgKyAqJykpCnByaW50KG91dHB1dF9yZXMoJzEgMiAzIDQgISArIC0gLyAxMDAgKicpKQpwcmludChvdXRwdXRfcmVzKCcxMDAgODA3IDMgMzMxICogKyAyIDIgMSArIDIgKyAqIDUgXiAqIDIzIDEwIDU1OCAqIDEwICogKyArIConKSk=