Satz des Pytagoras

mit matplotlib, NumPy, pandas, SciPy, SymPy und weiteren mathematischen Programmbibliotheken.
010010
User
Beiträge: 14
Registriert: Freitag 3. Juni 2016, 20:33

Code: Alles auswählen

## Der Satz des Pytagoras

import math

print("Bitte geben Sie für den gesuchten Wert 0 ein!")

a = eval(input("a="))
b = eval(input("b="))
c = eval(input("c="))

if c==0:
	c = math.sqrt((a*a)+(b*b))
	print(c)

if a==0:
	a = math.sqrt((c*c)-(b*b))
	print(a)

if b==0:
	b = math.sqrt((c*c)-(a*a))
	print(b)
Der Beitrag ist schon ein 3/4 Jahr alt, aber er hat mir so gut gefallen das ich meinen Code mal ebent eingegeben hab. Dort kann man alle drei Kanten des Dreiecks berechnen indem man für den gesuchten Wert einfach nur Null eingibt. Bei Python 3.5.1 ist es im Tewrminal leider so das man immer etwas eingeben muss.
Sirius3
User
Beiträge: 17737
Registriert: Sonntag 21. Oktober 2012, 17:20

@010010: »eval« sollte man nicht benutzen. Wenn Du Zahleneingaben erlaubst, kannst Du den eingegebenen String per »int« bzw. hier »float« in eine Zahl umwandeln. Das Prüfen auf einen leeren String ist auch ganz einfach. Der Fall a=0 oder b=0 läßt sich leicht zusammenfassen. Per Konvention werden immer 4 Leerzeichen pro Ebene benutzt, nicht 3.

Code: Alles auswählen

print("Bitte geben Sie für den gesuchten nichts ein!")

a = input("a=")
b = input("b=")
c = input("c=")

if not c:
    a = float(a)
    b = float(b)
    result = (a**2 + b**2) ** 0.5
elif not a or not b:
    a = float(a or b)
    c = float(c)
    result = (c**2 - a**2) ** 0.5
print("Die fehlende Seite ist {0:.3f}".format(result))
Jetzt fehlt noch etwas Fehlerbehandlung. Was passiert wenn keine Zahl eingegeben wird? Was passiert wenn c zu kurz ist? Dazu schreiben wir eine Funktion, die die Eingabe verarbeitet und prüft. Und da man am besten jeden Code in eine Funktion schreibt, auch gleich noch eine main-Funktion:

Code: Alles auswählen

def input_float_or_none(prompt):
    while True:
        result = input(prompt)
        if not result:
            return None
        try:
            return float(result)
        except ValueError:
            print("Bitte eine Zahl oder nichts eingeben!")

def main():
    print("Bitte geben Sie für den gesuchten nichts ein!")
    a = input_float_or_none("a=")
    b = input_float_or_none("b=")
    c = input_float_or_none("c=")

    if bool(a) + bool(b) + bool(c) < 2:
        print("Mehr als eine Seite ist leer!")
    elif not c:
        result = (a**2 + b**2) ** 0.5
    elif not a or not b:
        try:
            result = (c**2 - (a or b)**2) ** 0.5
        except ValueError:
            print("Seite c zu kurz!")
            return
    else:
        print("Mindestens eine Seite sollte leer bleiben!")
    print("Die fehlende Seite ist {0:.3f}".format(result))

if __name__ == '__main__':
    main()
BlackJack

Man könnte vielleicht noch prüfen das eingegebene Zahlen positiv sind. Benutzer kommen manchmal auf komische Ideen. :-)
Antworten