Flächeninhalt und Umfang von Kreisen,Rechtecke,Quadrate,Dreiecke

Du hast eine Idee für ein Projekt?
Antworten
MG2003
User
Beiträge: 1
Registriert: Mittwoch 14. Juni 2017, 12:14

Code: Alles auswählen

print("Hallo und guten Tag.")
print ("Sie sind herzlich willkommen bei dem Programm von Herrn XXX und  Herrn XXX. Dieses Programm wird Ihnen das lästige Rechnen von Flächeninhalten und Umfängen beheben. Wir haben folgende Formen im Angebot: Kreise,Rechtecke,Quadrate und Dreiecke. ")

a = str(input("Bitte geben Sie ein, welche Form  sie gerne ausgerechnet haben möchten:"))
if a == "Dreieck":
  b = str(input("Möchten sie den Umfang oder Flächeninhalt ausgerechnet haben:"))
  if b == "Umfang":
    q = int(input("Geben Sie bitte die  Kantenlänge der Grundseite ein:"))
    z = int(input("Bitte geben Sie die Kantenlänge für die erste Seite ein: "))
    w = int(input("Bitte geben Sie die Kantenlänge für die zweite Seite ein"))
    Q = q+z+w
    print("Der Umfang ist",Q,"cm groß")
  elif b == "Flächeninhalt":
     r = int(input("Geben  Sie die Höhe ein des Dreiecks:"))
     R = int(input("Geben Sie Kantenlänge  der Grundseite ein:"))
     O = (R/2)*r
     print("Der Flächeninhalt ist",O,"cm² groß.")
  else:
    print("Unzulässige Eingabe!Achten Sie auf Groß- und Kleinschreibung!")

elif a == "Rechteck":
  b = str(input("Möchten sie den Umfang oder Flächeninhalt ausgerechnet haben:"))
  if b == "Umfang":
    q = int(input("Geben Sie bitte die erste Kantenlänge ein: "))
    z = int(input("Geben Sie bitte die zweite Kantenlänge ein: "))
    Q = 2*q+2*z
    print("Der Umfang ist",Q,"cm groß")
    
  elif b == "Flächeninhalt":
     q = int(input("Geben Sie bitte die erste Kantenlänge ein: "))
     z = int(input("Geben Sie bitte die zweite Kantenlänge ein: "))
     O = q*z
     print("Der Flächeninhalt ist",O,"cm² groß.") 
  else:
    print("Unzulässige Eingabe!Achten Sie auf Groß- und Kleinschreibung!")

elif a == "Quadrat":
  b = str(input("Möchten sie den Umfang oder Flächeninhalt ausgerechnet haben:"))
  if b == "Umfang":
    q = int(input("Geben Sie bitte die erste Kantenlänge ein: "))
    Q = q+q+q+q
    print("Der Umfang ist",Q,"cm groß")
    
  elif b == "Flächeninhalt":
     q = int(input("Geben Sie bitte die erste Kantenlänge ein: "))
     O = q*q
     print("Der Flächeninhalt ist",O,"cm² groß.") 
  else:
    print("Unzulässige Eingabe!Achten Sie auf Groß- und Kleinschreibung!")
  
elif a == "Kreis":
  b = str(input("Möchten sie den Umfang oder Flächeninhalt ausgerechnet haben:"))
  if b == "Umfang":
    q = int(input("Geben sie bitte den Radius an : "))
    Q = 2*3.14159265359*q
    print("Der Umfang ist",Q,"cm groß")
    
  elif b == "Flächeninhalt":
     q = int(input("Geben Sie bitte den Radius ein: "))
     O = 3.14159265359*(q*q)
     print("Der Flächeninhalt ist",O,"cm² groß.") 
  else:
    print("Unzulässige Eingabe!Achten Sie auf Groß- und Kleinschreibung!")
     
   

else:
    print("Unzulässige Eingabe!Achten Sie auf Groß- und Kleinschreibung!")
Zuletzt geändert von Anonymous am Mittwoch 14. Juni 2017, 12:28, insgesamt 1-mal geändert.
Grund: Quelltext in Python-Codebox-Tags gesetzt.
Sirius3
User
Beiträge: 17711
Registriert: Sonntag 21. Oktober 2012, 17:20

@MG2003: `input` liefert bereits Strings, das Umwandeln mit `str` ist also überflüssig. Eingerückt wird immer mit 4 Leerzeichen pro Ebene nicht 2. Variablennamen sollten aussagekräftig sein, a, b, q, z, w, Q oder r sind das alles nicht; man darf auch mehr als einen Buchstaben verwenden. In allen Abschnitten für die verschiedenen Formen wird immer nach "Umfang oder Flächeninhalt" gefragt, das sollte man nur einmal im Code haben.
Außer beim Dreieck werden immer die selben Größen für Umfang und Flächeninhalt abgefragt, das sollte man dann auch nur einmal im Code haben.
Es gibt math.pi, das braucht mal also nicht selbst als Zahl mehrmals in den Code schreiben.

Insgesammt solltest Du anfangen, Code in Funktionen zu schreiben. Als nächsten Schritt könntest Du die Unterschiede der Formen in Datenstrukturen abstrahieren, so dass es einfacher wird, weitere hinzuzufügen. Mit str.lower kann man alles in Kleinbuchstaben umwandeln, dann kommt es nicht so sehr auf die Groß-Kleinschreibung an.
BlackJack

@MG2003: Die drei dringendsten Änderungen sind:

1. Die Einrückung sollte vier Leerzeichen pro Ebene sein und nicht irgendwas zwischen zwei und vier.

2. Namen sind wichtig. Ein Name soll dem Leser vermitteln was der Wert dahinter bedeutet. Einbuchstabige Namen tun das nur sehr selten und bei `Q` und `O` denkt ziemlich sicher niemand sofort „Ah, die stehen für Umfang und Flächeninhalt.“ Bei `umfang` und `flaecheninhalt` weiss der Leser dagegen wofür die Namen stehen.

3. Der Code hat eine sehr regelmässige Struktur mit vielen Wiederholungen. Das ist oft ein Zeichen, dass man eigentlich Daten hat, und aus denen festen Code geschrieben hat, statt die Daten in einer Datenstruktur zu speichern und dann Code ohne die ganzen Wiederholungen der mit den Daten arbeitet.

Schau Dir mal die grundlegenden Datenstrukturen von Python (mindestens Listen und Wörterbücher) und Funktionen an. Und dann überleg mal welche Daten mach benötigt um die Berechnungen zu beschreiben.

`str()` mit dem Ergebnis der `input()`-Funktion aufzurufen macht übrigens keinen Sinn, denn `input()` liefert ja bereits eine Zeichenkette als Ergebnis.

Ich würde die Benutzer auch Gleitkommazahlen eingeben lassen anstatt das auf ganze Zahlen zu beschränken, und dann auch die `format()`-Methode verwenden um die Ergebnisse in die Ausgaben hinein zu formatieren, denn da hat man über die Formatangaben Kontrolle über die Anzahl der angezeigten Nachkommastallen.

Edit: Ups, Sirius3 war schneller. :-)
Antworten