schaut euch mein skript an

Stellt hier eure Projekte vor.
Internetseiten, Skripte, und alles andere bzgl. Python.
Antworten
print ('python')
User
Beiträge: 14
Registriert: Mittwoch 18. Mai 2011, 13:40

es ist eine Berechnung für Rechtecke
(fals es euch zu simpel erscheint ich bin ein Anfänger und wollte nur mal was posten)

Code: Alles auswählen

laenge = int(raw_input('Geben Sie eine ganze Zahl ein: '))
breite = int(raw_input('Geben Sie eine ganze Zahl ein: '))
flaeche = laenge * breite
print ('Die Flaeche ist'),; print (flaeche)
print ('Der Umfang ist'),; print (2 * (laenge + breite))
if laenge == breite:
    print ('Quadrat: Ja')
elif laenge != breite:
    print ('Quadrat: Nein')

else:
        print ('FERTIG')
Benutzeravatar
/me
User
Beiträge: 3555
Registriert: Donnerstag 25. Juni 2009, 14:40
Wohnort: Bonn

print ('python') hat geschrieben:

Code: Alles auswählen

if laenge == breite:
    print ('Quadrat: Ja')
elif laenge != breite:
    print ('Quadrat: Nein')

else:
        print ('FERTIG')
Es gibt einige Punkte anzumerken. Ich beschränke mich aus zeitlichen Gründen jetzt auf eine einzige Frage. Was glaubst du, unter welchen Bedingungen das Programm einmal FERTIG ausgibt?
Benutzeravatar
Hyperion
Moderator
Beiträge: 7478
Registriert: Freitag 4. August 2006, 14:56
Wohnort: Hamburg
Kontaktdaten:

Ich hätte es eher ins "Snippet"-Forum gepostet. Das ist genau für solche (kleinen) Schnipsel gedacht :-)

Welche Python-Version benutzt Du? Auf der einen Seite verwendest Du `print` als Funktion, auf der anderen Seite nutzt Du `raw_input`, welches afair unter Python3 gar nicht mehr existiert!

Nun zum Script:

- zwischen Funktionsname und Klammer gehört kein Leerzeichen:

Code: Alles auswählen

print("foo")
- Wieso nutzt Du keine String-Formatierungsmethoden, um die Fläche oder die Länge auszugeben? Bei Python3 kannst Du ja sogar beliebig viele Parameter beliebigen Typs angeben:

Code: Alles auswählen

>>> print("Die Fläche ist", 5)
Die Fläche ist 5
- Man sollte pro Zeile nur einen Python-Ausdruck schreiben und diese nicht per ";" trennen. Das ist imho nur bei Code-Golf sinnvoll und akzeptiert

- Die Einrückung ist Dir wohl bei `else`-Zweig ein wenig kaputt gegangen!

- Wozu überhaupt das `else`? "Fertig" wird das Programm doch auch so?

- Generell bevorzugen viele eher englische Namen für Bezeichner.

- Anstelle zwei mal ziemlich gleichen Code zu schreiben, könntest Du auch folgendermaßen vorgehen:

Code: Alles auswählen

if laenge == breite:
    ist_quadrat = "Ja"
else:
    ist_quadrat = "Nein"
print("Quadrat:", ist_quadrat)
- Noch geschickter kann man das über ein Mapping zwischen dem booleschen Werten (`True` und `False`) und den deutschen Ausdrücken lösen:

Code: Alles auswählen

if laenge == breite:
    ist_quadrat = True
else:
    ist_quadrat = False
print("Quadrat:", {True: "Ja", False: "Nein"}[ist_quadrat])
Dazu brauchst Du die Grundlagen über Dictionaries :-)
Obiger Code ist allerdings viel zu aufgebläht, da ein Vergleich wie `laenge == breite` ja bereits einen Wahrheitswert liefert. Daher können wir den Vergleich direkt zur Auswahl des passenden Wortes nutzen:

Code: Alles auswählen

print("Quadrat:", {True: "Ja", False: "Nein"}[laenge == breite])
Damit sparen wir uns das `if-else`-Konstrukt.

Generell wäre imho der nächste Punkt aber, dass Du für die Flächenberechnung eine Funktion schreibst und diese anstelle der direkten Berechnung aufrufst. Analog kannst Du dann auch eine Funktion zur Überprüfung auf ein Quadrat schreiben.

Insgesamt solltest Du Dir folgendes Template als Basis für Deine Scripte angewöhnen:

Code: Alles auswählen

#!/usr/bin/env python
# coding: utf-8

def main():
    # hier kommt dann Dein Code rein
    pass

if __name__ == "__main__":
    main()
encoding_kapiert = all(verstehen(lesen(info)) for info in (Leonidas Folien, Blog, Folien & Text inkl. Python3, utf-8 everywhere))
assert encoding_kapiert
print ('python')
User
Beiträge: 14
Registriert: Mittwoch 18. Mai 2011, 13:40

Danke für eure konstruktive kritik aber ich bin nun mal ein anfänger und muss das alles noch lernen ich war für den Anfang froh, überhaupt etwas hingekriegt zu haben (ich benutze 2.7)
Benutzeravatar
Hyperion
Moderator
Beiträge: 7478
Registriert: Freitag 4. August 2006, 14:56
Wohnort: Hamburg
Kontaktdaten:

print ('python') hat geschrieben:Danke für eure konstruktive kritik aber ich bin nun mal ein anfänger und muss das alles noch lernen ich war für den Anfang froh, überhaupt etwas hingekriegt zu haben (ich benutze 2.7)
Ist ja auch nicht schlimm ;-) Soll ja lehrreich sein.

Wenn Du Python 2.x verwendest, dann ist `print` ein Statement. Vergiss also die runden Klammern dahinter! Woher hast Du das denn?
encoding_kapiert = all(verstehen(lesen(info)) for info in (Leonidas Folien, Blog, Folien & Text inkl. Python3, utf-8 everywhere))
assert encoding_kapiert
print ('python')
User
Beiträge: 14
Registriert: Mittwoch 18. Mai 2011, 13:40

ich habe es ohne Klammern ausprobiert aber dann geht es nicht
außer dem habe ich wegen dir jetzt 3.2 installiert. :lol: :lol:

ich habe aber noch eine frage was benutzt man jetzt statt raw_input??
BlackJack

@print ('python'): Wenn es nur mit Klammern funktioniert, dann dürfte es aber wegen dem `raw_input()` nicht funktionieren. Denn wenn das vorhanden ist, dann ist ``print`` ein Schlüsselwort und braucht keine Klammern.
EyDu
User
Beiträge: 4881
Registriert: Donnerstag 20. Juli 2006, 23:06
Wohnort: Berlin

Doch, bei Python 2.7 funktioniert es ohne Klammern. Wahrscheinlich hast du es bereits mit deiner 3er Version getestet. Statt `raw_input` kannst du bei 3.2 einfach `input` verwenden.
Das Leben ist wie ein Tennisball.
Benutzeravatar
Hyperion
Moderator
Beiträge: 7478
Registriert: Freitag 4. August 2006, 14:56
Wohnort: Hamburg
Kontaktdaten:

print ('python') hat geschrieben:ich habe es ohne Klammern ausprobiert aber dann geht es nicht
Bitte gewöhne Dir mehr Präzision an: "geht es nicht" nützt wenig; eine exakte Fehlermeldung wäre angebracht. Unter Python 2.7 geht ein print ohne Klammern zu 100%!
print ('python') hat geschrieben: außer dem habe ich wegen dir jetzt 3.2 installiert. :lol: :lol:
Wieso wegen mir?

Zudem bleibt die Frage, welches Tutorial Du benutzt? Denn danach sollte sich Deine Python-Version richten. Speziell als Anfänger sollte man sich solche Sprünge hin und her nicht erlauben, sondern mit einer Major-Version lernen.
encoding_kapiert = all(verstehen(lesen(info)) for info in (Leonidas Folien, Blog, Folien & Text inkl. Python3, utf-8 everywhere))
assert encoding_kapiert
Antworten