Kann mir jemand das entsprechende Pythonprogramm erstellen?
Lösen einfacher linearer Gleichungen (z.B. 5x + 20 = 100), indem nach x aufgelöst wird. Die Daten sind variabel einzugeben. Daraufhin wird die Gleichung generiert und x berechnet sowie ausgegeben. Erstelle dazu das entsprechende Pythonprogramm
2 Antworten
Ich würde das so lösen...
# Programm zum Lösen von linearen Gleichungen des Typs a * x + b = c
def input_int_or_float(text):
while True:
r = input(text)
try:
return(int(r))
except ValueError:
try:
return(float(r))
except ValueError:
print("[Fehler: Das ist keine Zahl gewesen. Erneuter Eingabe-Versuch...]")
a = input_int_or_float("Faktor für x: ")
b = input_int_or_float("+- Wert: ")
c = input_int_or_float("+- Ergebnis: ")
print(20*"-")
if b >= 0:
print(f"{a} x + {b} = {c}")
else:
print(f"{a} x - {-b} = {c}")
if a == 0:
if b == c:
print("Jedes x löst die Gleichung.")
else:
print("Die Gleichung hat keine Lösung.")
else:
x = (c-b)/a
print(f"x = {x}")
nö. wenn du einen integer nimmst, dann kann man keine floats mehr eingeben. das wäre fatal für das ergebnis.
Warum sollten Integer fatal für das Ergebnis sein? Das funktioniert problemlos.
Beispiel-Durchlauf...
Faktor für x: 50
+- Wert: 14
+- Ergebnis: 17
--------------------
50 x + 14 = 17
x = 0.06
Und wenn man eine Zahl wie beispielsweise „15.2“ eingibt, die nicht als Integer, aber als Float, interpretiert werden kann, so wird diese auch als float gespeichert. Also auch kein Problem.
Ich war zuerst am Überlegen, ob ich direkt alles versuche als float zu interpretieren. Aber habe mich dann dagegen entschieden. Unter anderem deshalb, damit mein Programm mehr den abgebildeten Beispielen entspricht. Sonst hätte ich beim ersten Beispiel beispielsweise „5.0 x + 20.0 = 100.0“ statt „5 x + 20 = 100“ dastehen. Dementsprechend bin ich dazu übergegangen, ganze Zahlen als int-Typ zu belassen und nicht-ganze Zahlen als float-Typ zu behandeln.
deine while schleife läuft unendlich? sweet
Naja, nur solange, bis man etwas eingibt, was als float oder int interpretiert werden kann.
Da war ich auch zuerst am Überlegen, ob ich das nicht beispielsweise auf maximal 3 Eingabe-Versuche beschränke. Aber da das Programm sonst nichts macht, außer eine einzelne Gleichung zu lösen, habe ich das jetzt nicht als kritisch angesehen, wenn ich da keine Abfrage mache, ob der User die Eingabe abbrechen und das Programm beenden möchte. Dann muss der User das eben zur Not manuell abbrechen (oder gefälligst eine Zahl eingeben).
Ich wollte das Programm jetzt aber auch nicht einfach mit einem Fehler beenden, wenn der User etwas falsches eingibt, sondern wollte dem User die Chance geben, nochmal etwas richtiges einzugeben. Daher die Schleife.
Ich habe hier aber nirgends den Fall, dass ich in das int() einen float reinstecke!
Bei meinem Programm kann kein int(2.4) vorkommen. Was hingegen vorkommen kann, wäre ein int("2.4"). Und int("2.4") wäre dann aber keine 2, sondern würde zu einem ValueError führen. [Dieser ValueError würde dann in meinem Programm über die exception als nächstes zu einem try mit float("2.4") führen, was dann 2.4 liefert.]
ok. dann gibt es bei dir also keine dezimalzahlen? verstehe. ich habe damit kein problem.
??? Ich habe keine Ahnung was du damit meinst. Was meinst du hier mit „keine Dezimalzahlen“ bei mir?
Aber die gibt es doch bei mir. (Wenn sie denn in der Rechnung gebraucht werden.)
Hast du beispielsweise meinen Beispiel-Durchlauf gesehen, dass ich genannt habe...
Faktor für x: 50
+- Wert: 14
+- Ergebnis: 17
--------------------
50 x + 14 = 17
x = 0.06
Was ist denn da das „0.06“ bei „x = 0.06“? Ein float! Das ist ein float. dude.
dude. das ist die falsche stelle, dude. wo du suchst dude. ich spreche nicht vom ergebnis, dude.
Bei der Eingabe? Da gibt es int, wenn die Eingabe als int interpretiert werden kann. Es sind aber auch float, möglich, wenn die Eingabe nicht als int interpretiert werden kann.
Entsprechender Beispiel-Durchlauf:
Faktor für x: 2.5
+- Wert: 17
+- Ergebnis: -1.6
--------------------
2.5 x + 17 = -1.6
x = -7.44
Hier sind beispielsweise dann auch a = 2.5 und c = -1.6 in meinem Programm floats.
Oder wo meinst du sonst noch, wenn du das dann auch nicht gemeint haben solltest?
ok. ich nehme es zurück. du hast ein float in einer extra except. warum auch immer...macht trotzdem wenig sinn. besser gleich einen float zu machen. oder einen instance-check vorzuschalten. sorry. dein code ist sehr bloated.
und in der ersten except hast du einen ValueError. Warum? Du willst doch keinen Error raisen, sondern in einen float wandeln.
def loese_lineare_gleichung(a, b, c):
# Überprüfen, ob a nicht gleich Null ist (wir können nicht durch Null teilen)
if a == 0:
print("Ungültige Eingabe: 'a' darf nicht Null sein.")
return
# Berechnen von x
x = (c - b) / a
# Ausgabe der Lösung
print(f"Die Lösung der Gleichung {a}x + {b} = {c} ist:")
print("x =", x)
# Eingabe der Koeffizienten a, b und c durch den Benutzer
a = float(input("Geben Sie den Koeffizienten a ein: "))
b = float(input("Geben Sie den Koeffizienten b ein: "))
c = float(input("Geben Sie den Koeffizienten c ein: "))
# Aufruf der Funktion zum Lösen der linearen Gleichung
loese_lineare_gleichung(a, b, c)
So könnte man das Lösen…
Aber wenn du nur hier nachfragst wird das nichts! Du solltest es ja auch können.
Quelle: ChatGPT: ich kann zwar Python aber so ging schneller
kostet 250 Euro. bei mir gibt es außerdem keine lösungen, sondern nur ergebnisse.
nein. vergiss es. wenn überhaupt dann nur gegen geld. dann schreibe ich einen rpc.
Ein RPC ist aber doch was gaaaanz anderes! Aber wenn du dich damit auskennst kannst du uns doch einmal einer sachliche Nachricht schreiben warum der obige Quellcode schlecht ist.
RPC ermöglicht es einem Programm eine externe Funktion aufzurufen also als wäre sie lokal. Oder ist das falsch?
Das ist nicht ganz richtig. Wofür steht überhaupt die Abkürzung RPC?
nö. wenn du einen integer nimmst, dann kann man keine floats mehr eingeben. das wäre fatal für das ergebnis.
deine while schleife läuft unendlich? sweet