Brüche kürzen mit Klassen

Wenn du dir nicht sicher bist, in welchem der anderen Foren du die Frage stellen sollst, dann bist du hier im Forum für allgemeine Fragen sicher richtig.
Antworten
Eros
User
Beiträge: 9
Registriert: Montag 15. Februar 2021, 11:01

Moin Zusammen,

Ich habe mal eine Aufgabe bekommen, bei welcher ich Brüche (egal welche) kürzen muss. Ich habe auch die Anweisung bekommen, dass ich das Ganze in einer Klasse schreiben sollte.
Nun, das habe ich gemacht und bin dann auf 2 Fehler gestossen, bei welchen ich einfach nicht mehr weiterkomme. Deshalb richte ich mich jetzt an euch.
Bei einem der beiden Fehler wird eine Variable nicht erkannt. Diese wäre die "nenner" Variable. Ich hatte das gleiche schon bei der "zaehler" Variable, konnte dieses Problem aber lösen. Jetzt ist es anders.
Das zweite Problem ist, das kein Output erzeugt wird ausser dem Zähler und Nenner, welche ich eingeben muss am Anfang.

Ich weiss leider echt nicht weiter, hinzu kommt noch, dass ich in Klassen noch ein Neuling bin und nicht so viel Erfahrung darin habe.
Um einen Möglichen Lösungsansatz habe ich mich auf mehreren Webseiten, welche Hilfe "Anbieten" informiert. darunter z.B. w3schools.com usw.


Mein Code ist folgendermassen aufgebaut:

Code: Alles auswählen

#Project_name: Brüche Kürzen mit Klassen
#Aufgabe: Kürzen von Brüchen mit Klassen
#_______________________________
#Autor: Florin Curiger
#Erstellt am: 06.04.2021
#
#_______________________________

from fractions import Fraction as frac
import math

zaehler = int(input("Zähler ?"))
nenner = int(input("Nenner ?"))


def ggt(a, b):  # Funktion für den GGT
    while b != 0:
        c = a % b
        a, b = b, c
    return a



class Bruch:

    def __init__(self, zaehler, nenner):        #Dies ist die Initiierungs Funktion.
        self.zaehler = zaehler
        self.nenner = nenner


    def kuerzen(zaehler,nenner):            #Funktion um Brüche zu Kürzen
            ggt(zaehler, nenner)
            print("Resultat", ggt(zaehler, nenner))


    def GekuerzterBruch(zaehler, nenner):
        ggt(zaehler, nenner)
        print(ggt(zaehler, nenner))
        print("Gekürzter Bruch", str(frac(ggt(zaehler, "\n", nenner))))
        

Ich wäre sehr erfreut darüber, wenn jemand mir helfen könnte

Gruss

Eros
Sirius3
User
Beiträge: 17741
Registriert: Sonntag 21. Oktober 2012, 17:20

Ich vermute mal, dass Du Fraction nicht verwenden solltest.
Deine Einrückungen sind inkonsistent. Eingerückt wird immer mit 4 Leerzeichen pro Ebene.
Die Kommentare sind allesamt überflüssig, da sie nur das offensichtliche beschreiben.

ggt ist eine Funktion, Du machst aber mit dem Rückgabewert oft gar nichts, weshalb die Aufrufe unsinnig sind.
Jetzt zur Klasse:
Du hast keine Klasse, sondern nur Funktionen in einem Klassen-Namensraum. Methoden müssen ein self-Attribut haben und dieses auch nutzen.

Also z.B. so:

Code: Alles auswählen

class Bruch:
    def __init__(self, zaehler, nenner):
        self.zaehler = zaehler
        self.nenner = nenner

    def kuerzen(self):
        print("Resultat", ggt(self.zaehler, self.nenner))
Jetzt sollte aber `kuerzen` nichts ausgeben, sondern wahrscheinlich einen neuen gekürzten Bruch zurückgeben.

Und das entscheidende fehlt: Du gibst zwar zwei Zahlen ein, erzeugst aber nie einen Bruch.
Eros
User
Beiträge: 9
Registriert: Montag 15. Februar 2021, 11:01

Hey Sirius,

Danke für die Antwort.
Ich dachte ich mache das richtig so. Aber wie gesagt, mit Klassen bin ich wirklich ein Anfänger.

Dann sollte ich also das Modul Fractions rausnehmen?

Die Variablen zaehler und nenner ganz oben, sind die dann Richtig?
und die Funktion ggt, müsste diese dann in die Klasse rein oder nicht?

Die Funktion werde ich in dem fall mal so von dir übernehmen.

Eine Frage hätte ich noch, wie kann ich dann einen Output erzeugen, welchen den von mir eingegeben Bruch(zaehler und nenner) kürzt und mir als Bruch zurückgibt?

Vielen Dank für die Hilfe

Eros
Sirius3
User
Beiträge: 17741
Registriert: Sonntag 21. Oktober 2012, 17:20

Ich glaube halt, dass Fractions nicht verwendet werden soll, weil das ja schon alles kann, was mit Brüchen zu tun hat.

Dass Du irgendwo Zähler und Nenner eingeben willst, kann schon richtig sein, hat ja jetzt mit der Definition der Klasse nichts zu tun, sondern nur, wie Du sie in einem Programm benutzt.
ggt hat erstmal nichts in der Klasse Bruch zu suchen, weil das größte gemeinsame Vielfache nicht spezifisch für Brüche ist.
Wie man Funktionen (oder Methoden) mit Rückgabewert schreibt, solltest Du schon beherrschen, bevor Du mit Klassen anfängst (ggt gibt ja auch schon was zurück).
Antworten