ich habe folgendes Problem ich möchte gerne aus einem string (z.B.: "45 * 9 - 9 + 2.3") eine mathematische rechnung machen. Hatte es schonmal mit folgenden Code versucht, hat aber nicht wirklich funktioniertund ich glaube es geht auch wesentlich einfacher.
Code: Alles auswählen
import re
" Math functions--------------------"
def plus(int1, int2):
return float(int1 + int2)
def minus(int1, int2):
return float(int1 - int2)
def multiply(int1, int2):
return float(int1 * int2)
def square(int1, int2):
return float(int1 ** int2)
def root(int1, int2):
return float(int1 // int2)
" Main functions--------------------"
def get_operators(string):
global oprt_plattern
return re.findall(oprt_plattern, string)
def get_numbers(string):
global numbers_plattern
return re.findall(numbers_plattern, string)
def calculate(string):
global operators
global tmp_result
string_numbers = get_numbers(string)
string_operators = get_operators(string)
result = int(string_numbers[0])
string_numbers.pop(string_numbers.index(string_numbers[0]))
for None_ in range(len(string_numbers)):
result = operators[string_operators[0]] (result, int(
string_numbers[0]))
string_operators.pop(string_operators.index(string_operators[0]))
string_numbers.pop(string_numbers.index(string_numbers[0]))
return tmp_result
" Vars---------------------------------"
oprt_plattern = r"[+-/*(//)(**)]{1,}"
numbers_plattern = r"\d{1,}"
operators = {
"+" : plus,
"-" : minus,
"*" : multiply,
"**" : square,
"//" : root,
}
Hätte da jemand von ecuh ne Idee wie man es einfacher macht?
lg
microkernel