By Lothar Jung
Date 2023-03-04 11:13
Edited 2023-03-04 11:25
Ich habe über ChatGTP ein Rechenprogramm in Python generiert:
Das Programm verfügt über eine Vielzahl von Funktionen, darunter:
Grundlegende arithmetische Operationen wie Addition, Subtraktion, Multiplikation und Division von Zahlen
Fortgeschrittene arithmetische Operationen wie Potenz, Wurzel, Fakultät und Logarithmus
Funktionen zum Rechnen mit Variablen, einschließlich Zuweisung von Werten und Abrufen von Werten
Ein Parser, der die Eingabe von mathematischen Ausdrücken analysiert und in Berechnungen und Funktionsaufrufe umwandelt
Eine Editierfunktion zum Bearbeiten von Ausdrücken, die bereits eingegeben wurden
Eine Funktion zum Plotten von 2D-Graphen von mathematischen Funktionen
Algebraische Funktionen wie Gleichungslösung und Polynomdivision
Grundlegende Analysisfunktionen wie Ableitung und Integration
Statistikfunktionen wie Mittelwert, Median und Standardabweichung
Binäre Funktionen wie Bitweise AND, OR, XOR, Addition und Subtraktion von Binärzahlen
Eine Speicherfunktion zum Speichern von Ergebnissen und Variablenwerten in einer Datenbank oder Datei
Diese Funktionen können je nach Bedarf des Benutzers angepasst oder erweitert werden.
Hier ist das genierte Programm:
import re
import numpy as np
import sympy as sp
import matplotlib.pyplot as plt
import sqlite3
conn = sqlite3.connect('calculator.db')
c = conn.cursor()
# Erstelle die Tabelle, wenn sie nicht existiert
c.execute('''CREATE TABLE IF NOT EXISTS variables
(name text primary key, value real)''')
variables = {}
def parse_input(input_string):
# Versuche, die Eingabe zu parsen
pattern = r'^([a-zA-Z]+)\s*=\s*(\d+(?:\.\d+)?)$|^([a-zA-Z]+)\s*([-+*/&|])\s*(\d+(?:\.\d+)?)$|^([a-zA-Z0-9\^\+\-\*/\s=\(\)]+)$|^([a-zA-Z]+)\(([0-9\.,\s]*)\)$|^plot\s+(.+)\s+from\s+(-?\d+)\s+to\s+(-?\d+)\s*(step\s+(\d+(?:\.\d+)?))?|^solve\s+([a-zA-Z]+)\s*=\s*([a-zA-Z0-9\^\+\-\*/\s\(\)]+)$|^differentiate\s+([a-zA-Z0-9\^\+\-\*/\s\(\)]+)\s+with\s+respect\s+to\s+([a-zA-Z]+)$|^integrate\s+([a-zA-Z0-9\^\+\-\*/\s\(\)]+)\s+with\s+respect\s+to\s+([a-zA-Z]+)$|^mean\s*\(([0-9\.,\s]*)\)$|^median\s*\(([0-9\.,\s]*)\)$|^mode\s*\(([0-9\.,\s]*)\)$|^variance\s*\(([0-9\.,\s]*)\)$|^stddev\s*\(([0-9\.,\s]*)\)$|^0b([01]+)\s*([-+*/&|])\s*0b([01]+)$|^save\s+([a-zA-Z]+)\s*=\s*(\d+(?:\.\d+)?)$|^load\s+([a-zA-Z]+)$'
match = re.match(pattern, input_string)
if match:
# Wenn es eine Zuweisung ist, speichere den Variablenwert
if match.group(1):
var_name = match.group(1)
var_value = float(match.group(2))
c.execute("INSERT OR REPLACE INTO variables (name, value) VALUES (?, ?)", (var_name, var_value))
conn.commit()
return None
# Wenn es eine Berechnung ist, gib die Zahlen und den Operator zurück
elif match.group(3):
var_name = match.group(3)
op = match.group(4)
num2 = float(match.group(5))
if var_name in variables:
num1 = variables[var_name]
return num1, op, num2
else:
print(f"{var_name} ist keine definierte Variable")
return None
# Wenn es eine Funktion ist, gib die Funktion zurück
elif match.group(6):
return match.group(6)
# Wenn es ein Plotbefehl ist, gib die Funktion elif match.group(7):
function_name = match.group(7)
x_min = float(match.group(8))
x_max = float(match.group(9))
step = float(match.group(11)) if match.group(11) else 0.1
# Erstelle die x-Werte
x = np.arange(x_min, x_max + step, step)
# Evaluiere die Funktion für jeden x-Wert
try:
y = eval(function_name, {'x': x})
except:
print("Ungültige Funktion")
return None
# Plotte die Funktion
plt.plot(x, y)
plt.xlabel('x')
plt.ylabel('y')
plt.show()
return None
# Wenn es eine Gleichungslösung ist, gib die Gleichung und die Lösung zurück
elif match.group(12):
equation = match.group(12)
try:
solution = sp.solve(equation)
print(f"Die Lösung für {equation} ist:", solution)
except:
print("Ungültige Gleichung")
return None
# Wenn es eine Ableitung ist, gib die Funktion und die Ableitung zurück
elif match.group(13):
function_string = match.group(13)
variable = match.group(14)
try:
function = sp.sympify(function_string)
derivative = function.diff(variable)
print(f"Die Ableitung von {function_string} nach {variable} ist:", derivative)
except:
print("Ungültige Funktion")
return None
# Wenn es eine Integration ist, gib die Funktion und die Integration zurück
elif match.group(15):
function_string = match.group(15)
variable = match.group(16)
try:
function = sp.sympify(function_string)
integration = sp.integrate(function, variable)
print(f"Die Integration von {function_string} nach {variable} ist:", integration)
except:
print("Ungültige Funktion")
return None
# Wenn es eine Statistikfunktion ist, gib die Funktion und die Werte zurück
elif match.group(17):
function_name = match.group(17)
values_string = match.group(18)
values = [float(x) for x in re.findall(r'\d+(?:\.\d+)?', values_string)]
if function_name == "mean":
result = np.mean(values)
elif function_name == "median":
result = np.median(values)
elif function_name == "mode":
result = sp.stats.mode(values)
elif function_name == "variance":
result = np.var(values)
elif function_name == "stddev":
result = np.std(values)
else:
print("Ungültige Statistikfunktion")
return None
print(f"Das Ergebnis der {function_name}-Funktion ist:", result)
return None
# Wenn es eine Binäroperation ist, gib die Zahlen und den Operator zurück
elif match.group(19):
num1 = int(match.group(19), 2)
op = match.group(20)
num2 = int(match.group(21), 2)
return num1, op, num2
# Wenn es eine Speicherfunktion ist, speichere den Variablenwert
elif match.group(22):
var_name = match.group(23)
var_value = float(match.group(24))
c.execute("INSERT OR REPLACE INTO variables (name, value) VALUES (?, ?)", (var_name, var_value))
conn.commit()
return None
# Wenn es eine Ladenfunktion ist, lade den Variablenwert und gib ihn zurück
elif match.group(25):
var_name = match.group(26)
c.execute("SELECT value FROM variables WHERE name = ?", (var_name,))
result = c.fetchone()
if result:
print(f"{var_name} = {result[0]}")
else:
print(f"{var_name} ist keine definierte Variable")
return None
else:
# Andernfalls gib None zurück
return None
while True:
input_string = input("Gib eine Rechenaufgabe ein: ")
parsed_input = parse_input(input_string)
if not parsed_input:
continue
# Wenn die Eingabe eine Binäroperation ist, berechne das Ergebnis
if isinstance(parsed_input, tuple) and len(parsed_input) == 3 and isinstance(parsed_input[0], int) and isinstance(parsed_input[1], str) and isinstance(parsed_input[2], int):
num1, op, num2 = parsed_input
if op == '+':
result = num1 + num2
elif op == '-':
result = num1 - num2
elif op == '*':
result = num1 * num2
elif op == '/':
result = num1 / num2
elif op == '&':
result = num1 & num2
elif op == '|':
result = num1 | num2
else:
print("Ungültiger Operator")
continue
print("Das Ergebnis ist:", bin(result))
continue
# Evaluiere die Funktion, wenn die Eingabe eine Funktion ist
if isinstance(parsed_input, str):
try:
result = eval(parsed_input)
print("Das Ergebnis ist:", result)
except:
print("Ungültige Eingabe")
continue
# Wenn die Eingabe eine Berechnung ist, führe sie aus
if isinstance(parsed_input, tuple) and len(parsed_input) == 3 and isinstance(parsed_input[0], float) and isinstance(parsed_input[1], str) and isinstance(parsed_input[2], float):
num1, op, num2 = parsed_input
if op == '+':
result = num1 + num2
elif op == '-':
result = num1 - num2
elif op == '*':
result = num1 * num2
elif op == '/':
result = num1 / num2
else:
print("Ungültiger Operator")
continue
print("Das Ergebnis ist:", result)
continue
# Wenn die Eingabe keine gültige Anweisung ist, gib eine Fehlermeldung aus
print("Ungültige Eingabe")