예제 #1
0
def main():
    config = std.load_config()
    prec_1 = config["Nachkommastellen 1"]
    prec_2 = config["Nachkommastellen 2"]
    prec_3 = config["Nachkommastellen 3"]
    prec_parser = config["Nachkommastellen Parser"]
    prec_int = config["Nachkommastellen Intern"]

    zwi_far, zwi_zwi_far, end_far, abs_far, men_far, err_far, ein_far = std.get_color(
        value=False)
    err = cla.Input()

    while err.error:
        cprint(
            "Willkommen bei dem Analytischen Geometrie-Rechner von Mattis Seebeck.\n",
            men_far.en)
        cprint("Welche Funktionalität möchtest du benutzen?", men_far.en)
        cprint("Zur Auswahl steht:\n", men_far.en)
        cprint("0: Standardeinsetellungen ändern", men_far.en)
        cprint("1: Standard Operationen ohne Rechenweg", men_far.en)
        cprint("2: Standard Operationen mit  Rechenweg", men_far.en)
        cprint("3: Lineare Algebra ohne Rechenweg", men_far.en)
        cprint("4: Lineare Algebra mit  Rechenweg", men_far.en)

        func = std.user_input(err, max_amount=4, min_amount=0)

    err.error = True
    darst = None
    if func == 0:
        while True:
            err.error = True
            while err.error:
                cprint("Veränderbare Einstellungen:\n", men_far.en)
                cprint("0: Standards wiederherstellen", men_far.en)
                cprint("1: Farben verändern", men_far.en)
                cprint("2: Anzahl der Nachkommastellen verändern", men_far.en)
                cprint("3: Variablen verändern", men_far.en)
                cprint("4: Diverses", men_far.en)
                cprint("5: Rechen- und Lösungswege", men_far.en)

                einst = std.user_input(err, max_amount=5, min_amount=0)

            err.error = True
            standards = False

            if einst == 0:
                standards = True
                std.save_config_standard()

            elif einst == 1:
                while err.error:
                    for i, (color, item) in enumerate(zip(
                            std.get_color(value=False),
                            std.format_prec(
                                std.get_iter("config_farben_darst"),
                                string=True,
                                ausrichtung="links",
                                dotted=True,
                                dotted_len=2)),
                                                      start=1):
                        cprint(f"{i}: {item}", men_far.en, end="")
                        cprint(color.de, color.en)
                        print()

                    einst = std.user_input(err, max_amount=7)

                err.error = True
                while err.error:
                    cprint("Welche Farbe möchtest du wählen?\n")
                    std.display_farben()

                    far, darst = std.user_input(err, string=True, farben=True)

                neu_far = cla.Farbe(far, darst)

                for i, item in enumerate(std.get_iter("config_farben"),
                                         start=1):
                    if einst == i:
                        std.save_config(item, neu_far.de)
                        break

            elif einst == 2:
                while err.error:
                    for i, (prec, item) in enumerate(zip(
                            std.get_prec(),
                            std.format_prec(std.get_iter("config_prec_darst"),
                                            string=True,
                                            ausrichtung="links",
                                            dotted=True,
                                            dotted_len=4)),
                                                     start=1):
                        cprint(f"{i}: {item}{prec}", men_far.en)
                        print()

                    einst = std.user_input(err, max_amount=5)

                err.error = True
                while err.error:
                    if einst == 5:
                        cprint(
                            "Mit wie vielen Nachkommastellen soll gerechnet werden?",
                            men_far.en)

                    else:
                        cprint(
                            "Wie viele Nachkommastellen sollen angezeigt werden? Maximal 15",
                            men_far.en)

                    prec = std.user_input(err, max_amount=15)

                for i, item in enumerate(std.get_iter("config_prec")):
                    if einst == i:
                        std.save_config(item, prec)
                        break

            elif einst == 3:
                while err.error:
                    for i, (conf, item) in enumerate(zip(
                            std.get_iter("config_buchst"),
                            std.format_prec(
                                std.get_iter("config_buchst_darst"),
                                string=True,
                                ausrichtung="links",
                                dotted=True,
                                dotted_len=4)),
                                                     start=1):
                        pass
                    for i, (conf, item) in enumerate(zip(
                            std.get_iter("config_buchst"),
                            std.format_prec(
                                std.get_iter("config_buchst_darst"),
                                string=True,
                                ausrichtung="links",
                                dotted=True,
                                dotted_len=4)),
                                                     start=1):
                        if isinstance(config[conf], list):
                            cprint(f"    {' ' * len(item)}{config[conf][0]}",
                                   men_far.en)
                            cprint(f"{i:<2}: {item}{config[conf][1]}",
                                   men_far.en)
                            print()

                        else:
                            cprint(f"{i:<2}: {item}{config[conf]}", men_far.en)
                            print()

                    einst = std.user_input(err, max_amount=19)

                err.error = True
                pfeil = False
                while err.error:
                    cprint(
                        'Tipp: Wenn du "pfeil" in die Eingabe schreibst, wird der Buchstabe mit pfeil angezeigt\n',
                        men_far.en)
                    cprint("Was für ein Buchstabe soll zugewiesen werden?")

                    buchst = std.user_input(err, string=True)
                    if buchst == "pfeil":
                        pfeil = True
                        err.error = True

                buchst = std.format_prec(buchst,
                                         ausrichtung="links",
                                         string=True,
                                         pfeil=pfeil)

                for i, item in enumerate(std.get_iter("config_buchst"),
                                         start=1):
                    if einst == i:
                        std.save_config(item, buchst)
                        break

            elif einst == 4:
                while err.error:
                    for i, (conf, item) in enumerate(zip(
                            std.get_iter("config_divers"),
                            std.format_prec(
                                std.get_iter("config_divers_darst"),
                                string=True,
                                ausrichtung="links",
                                dotted=True,
                                dotted_len=4)),
                                                     start=1):
                        if isinstance(config[conf], bool):
                            if config[conf]:
                                conf = "Ja"
                            else:
                                conf = "Nein"
                        else:
                            conf = config[conf]
                        cprint(f"{i}: {item}{conf}", men_far.en)
                        print()

                    einst = std.user_input(err, max_amount=i)

                err.error = True
                while err.error:
                    cprint("Ja oder Nein?", men_far.en)

                    wert = std.user_input(err, string=True, ja=True, nein=True)

                if einst == 1:
                    std.save_config("Bruch", wert)

                elif einst == 2:
                    std.save_config("Komma", wert)

                elif einst == 3:
                    std.save_config("Gauss Pretty", wert)

                elif einst == 4:
                    std.save_config("Gauss Fast", wert)

            elif einst == 5:
                while err.error:
                    for i, (conf, item) in enumerate(zip(
                            std.get_iter("config_lösung"),
                            std.format_prec(
                                std.get_iter("config_lösung_darst"),
                                string=True,
                                ausrichtung="links",
                                dotted=True,
                                dotted_len=4)),
                                                     start=1):
                        if isinstance(config[conf], bool):
                            if config[conf]:
                                conf = "Ja"
                            else:
                                conf = "Nein"
                        else:
                            conf = config[conf]
                        cprint(f"{f' {i}' if i < 10 else i}: {item}{conf}",
                               men_far.en)
                        print()

                    einst = std.user_input(err, max_amount=i)

                err.error = True

                if 1 <= einst <= 10:
                    while err.error:
                        cprint(
                            f"Soll ein {std.get_iter('config_lösung_darst')[einst - 1]} angezeigt werden?",
                            men_far.en)

                        wert = std.user_input(err,
                                              ja=True,
                                              nein=True,
                                              string=True)

                elif 11 <= einst <= 13:
                    while err.error:
                        cprint(
                            f"Welcher {std.get_iter('config_lösung_darst')[einst - 1]} soll gewählt werden?\n",
                            men_far.en)
                        cprint("1: Lineares Gleichungsystem", men_far.en)
                        cprint("2: Einsetzen in die Koordinatenform",
                               men_far.en)
                        if einst > 11:
                            cprint("3: Passend")

                        wert = std.user_input(
                            err,
                            max_amount=3 if einst > 11 else 2,
                            erlaubte_werte=["lgs", "koor", "passend"])

                    if wert == 1:
                        wert = "lgs"
                    elif wert == 2:
                        wert = "koor"
                    elif wert == 3:
                        wert = "passend"

                elif 14 <= einst <= 19:
                    lsg = []
                    if einst in [14, 16]:
                        lsg = ["hilf", "geo"]
                    else:
                        lsg = ["hnf", "lfp"]
                    while err.error:
                        cprint(
                            f"Welcher {std.get_iter('config_lösung_darst')[einst - 1]} soll gewählt werden?\n",
                            men_far.en)
                        for i, item in enumerate(lsg, start=1):
                            if item == "lfp":
                                cprint(f"{i}: Lotfußpunkt", men_far.en)
                            elif item == "hnf":
                                cprint(f"{i}: Hessesche Normalenform",
                                       men_far.en)
                            elif item == "hilf":
                                cprint(f"{i}: Hilfsebene", men_far.en)
                            elif item == "geo":
                                cprint(f"{i}: Geometrischer Ansatz",
                                       men_far.en)

                        wert = std.user_input(err,
                                              max_amount=i,
                                              erlaubte_werte=lsg)

                    wert = lsg[wert - 1]

                for i, item in enumerate(std.get_iter("config_lösung"),
                                         start=1):
                    if einst == i:
                        std.save_config(item, wert)
                        break

            config = std.load_config()
            prec_1 = config["Nachkommastellen 1"]
            prec_2 = config["Nachkommastellen 2"]
            prec_3 = config["Nachkommastellen 3"]
            prec_parser = config["Nachkommastellen Parser"]
            prec_int = config["Nachkommastellen Intern"]

            zwi_far, zwi_zwi_far, end_far, abs_far, men_far, err_far, ein_far = std.get_color(
                value=False)
            std.cls()

            if standards:
                cprint("Standards erfolgreich wiederhergestellt!", men_far.en)
            else:
                cprint("Einstellung erfolgreich verändert!", men_far.en)

            cprint("\nMöchtest du noch etwas verändern?", men_far.en)
            err.error = True
            back = std.user_input(err,
                                  string=True,
                                  ja=True,
                                  nein=True,
                                  random=True,
                                  erlaubte_werte="")
            if back == "r":
                if random.randint(0, 1):
                    return

            elif not back:
                return

    elif func in [1, 2]:
        if func == 1:
            rweg = "Ohne"
            rechenweg = False
        else:
            rweg = "Mit"
            rechenweg = "force"

        while err.error:
            cprint(
                f"Welche Operation möchtest du benutzen ({rweg} Rechenweg)?\n",
                men_far.en)
            cprint("1:  Vektor aus zwei Punkten berechnen", men_far.en)
            cprint("2:  Gerade aus zwei Punkten berechnen", men_far.en)
            cprint("3:  Ebene aus drei Punkten berechnen", men_far.en)
            cprint("4:  Betrag eines Vektors berechnen", men_far.en)
            cprint("5:  Normalenvektor berechnen", men_far.en)
            cprint("6:  Normaleneinheitsvektor berechnen", men_far.en)
            cprint("7:  Skalarprodukt berechnen", men_far.en)
            cprint("8:  Lineare Abhängigkeit testen", men_far.en)
            cprint("9:  Punktprobe von Punkt und Gerade", men_far.en)
            cprint("10: Punktprobe von Punkt Ebene", men_far.en)
            cprint("11: Schnittpunkt zweier Geraden berechnen", men_far.en)
            cprint("12: Schnittpunkt von Gerade und Ebene berechnen",
                   men_far.en)
            cprint("13: Schnittgerade zweier Ebenen berechnen", men_far.en)
            cprint("14: Schnittwinkel zweier Geraden berechnen", men_far.en)
            cprint("15: Schnittwinkel von Gerade und Ebene berechnen",
                   men_far.en)
            cprint("16: Schnittwinkel zweier Ebenen berechnen", men_far.en)
            cprint("17: Umrechnung zwischen Ebenengleichungen", men_far.en)
            cprint("18: Sind die eingegebenen Ebenen gleich?", men_far.en)
            cprint("19: Abstand zwischen Punkt und Gerade berechnen",
                   men_far.en)
            cprint("20: Abstand zwischen zwei Geraden berechnen", men_far.en)
            cprint("21: Abstand zwischen Punkt und Ebene berechnen",
                   men_far.en)
            cprint("22: Abstand zwischen Gerade und Ebene berechnen",
                   men_far.en)
            cprint("23: Abstand zwischen Ebene und Ebene berechnen",
                   men_far.en)
            operation = std.user_input(err, max_amount=23)

        if operation in [1, 2]:
            P = std.parser("punkt")
            Q = std.parser("punkt", buchst="Q", weitere=P)
            parsed = [P, Q]

        elif operation == 3:
            P = std.parser("punkt")
            Q = std.parser("punkt", buchst="Q", weitere=P)
            T = std.parser("punkt", buchst="T", weitere=(P, Q))
            parsed = [P, Q, T]

        elif operation == 4:
            parsed = [std.parser("vektor")]

        elif operation in [5, 6, 7]:
            u = std.parser("vektor", buchst="u")
            v = std.parser("vektor", weitere=u)
            parsed = [u, v]

        elif operation == 8:
            parsed = std.parser("linear abhängig")

        elif operation in [9, 19]:
            P = std.parser("punkt")
            g = std.parser("gerade", weitere=P)
            parsed = [P, g]

        elif operation in [10, 21]:
            darst = std.input_darst_ebene()
            P = std.parser("punkt")
            E = std.parser("ebene", darst=darst, weitere=P)
            parsed = [P, E]

        elif operation in [11, 14, 20]:
            g = std.parser("gerade")
            h = std.parser("gerade", buchst="h", weitere=g, param="s")
            parsed = [g, h]

        elif operation in [12, 15, 22]:
            darst = std.input_darst_ebene()
            g = std.parser("gerade")
            E = std.parser("ebene", darst=darst, weitere=g)
            parsed = [g, E]

        elif operation in [13, 16, 18, 23]:
            darst = std.input_darst_ebene(erste=True, zweite=True)
            E = std.parser("ebene", darst=darst[0])
            F = std.parser("ebene",
                           darst=darst[1],
                           buchst="F",
                           weitere=E,
                           param=["u", "v"])
            parsed = [E, F]

        elif operation == 17:
            darst = std.input_umrechnen(von=True, nach=True)
            E = std.parser("ebene", darst=darst[0])
            parsed = [E]

        stdop.standardoperationen(parsed, operation, rechenweg, darst)

    elif func in [3, 4]:
        if func == 3:
            Rweg = "Ohne"
            rechenweg = False

        else:
            Rweg = "Mit"
            rechenweg = "force"

        while err.error:
            cprint(
                f"Welche Operation möchtest du benutzen ({Rweg} Rechenweg)?\n",
                men_far.en)
            for i, item in enumerate(std.get_iter("operation_lagl_darst"),
                                     start=1):
                cprint(f"{i}: {item}", men_far.en)

            operation = std.user_input(err, max_amount=i)

        A, B = None, None
        if operation == 1:
            darst = std.input_nxm_mat(num="erste"), std.input_nxm_mat(
                num="zweite")
            A = std.parser("matrix", darst[0], True)
            std.cls()
            B = std.parser("matrix", darst[1], True, buchst="B", weitere=A)

        elif operation == 2:
            darst = std.input_nxm_mat()
            cprint(f"Die Matrix hat eine {darst[0]} × {darst[1]} Dimension",
                   men_far.en)
            A = std.parser("matrix", darst, True, param=True)

        s = time.time()
        stdop.standardoperationen_lagl([A, B], operation, rechenweg, darst)

    return True
예제 #2
0
            B = std.parser("matrix", darst[1], True, buchst="B", weitere=A)

        elif operation == 2:
            darst = std.input_nxm_mat()
            cprint(f"Die Matrix hat eine {darst[0]} × {darst[1]} Dimension",
                   men_far.en)
            A = std.parser("matrix", darst, True, param=True)

        s = time.time()
        stdop.standardoperationen_lagl([A, B], operation, rechenweg, darst)

    return True


if __name__ == "__main__":
    std.cls()
    menu_far = std.get_color("men")

    y = True

    error = cla.Input()
    while y:
        x = main()
        if x:
            cprint("\n", menu_far)
            cprint("Nochmal?", menu_far)
            error.error = True
            y = std.user_input(error,
                               string=True,
                               ja=True,
                               nein=True,