OOP in Python?

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.
Benutzeravatar
Drake
User
Beiträge: 71
Registriert: Mittwoch 14. März 2007, 15:48
Wohnort: Bremen
Kontaktdaten:

Viele Wege führen nach Rom -- so auch dieser:
Da hast du Recht, dieser Weg führt nach Rom! Doch dieser nicht:

Code: Alles auswählen

import sys
sys.exit(0)
Denn das Programm wird nicht geschlossen sonder es taucht folgende Fehlermeldung auf:

Code: Alles auswählen

Traceback (most recent call last):
  File "C:\Python25\Eigene\exit.py", line 10, in <module>
    sys.exit(0)
SystemExit: 0
EDIT: Hab grad den Beitrag vior mir gelesen .. Wie soll ich das Programm denn sonst beenden?

Code: Alles auswählen

        if stop == "STOPIT":   
        else:
            "Programm wird weitergeführt!"
Dabei meckert er rum ..
Benutzeravatar
Masaru
User
Beiträge: 425
Registriert: Mittwoch 4. August 2004, 22:17

Drake hat geschrieben:... Da hast du Recht, dieser Weg führt nach Rom! Doch dieser nicht:

Code: Alles auswählen

import sys
sys.exit(0)
sys.exit schleudert eigentlich nichts anderes als die Exception "SystemExit" hinnaus. Einige Umgebungen catchen leider auch diese mit ... könnte mir vorstellen, dass Du Dein Script nicht einfach als Python-Script aus der CMD aufrufst, oder?
Drake hat geschrieben:

Code: Alles auswählen

        if stop == "STOPIT":   
        else:
            "Programm wird weitergeführt!"
Dabei meckert er rum ..
Klar .. if-else erfordert jeweils mindestens eine Zeile und dann um 4 Zeichen dadrunter eingerückt irgend etwas ... und sei es das Statement pass:

Code: Alles auswählen

if stop == "STOPIT":
    pass
else:
    "Programm wird weitergeführt"
In Deinem falle aber wäre ein "break" als Folge des IF-Blockes die gewünschte Wahl.
Benutzeravatar
Drake
User
Beiträge: 71
Registriert: Mittwoch 14. März 2007, 15:48
Wohnort: Bremen
Kontaktdaten:

Code: Alles auswählen

import sys
i = 0
print "Zum schließen bitte exit eingeben!"
exit = ""

while i < 1:
    stop = raw_input().upper()
    while stop == "STOPIT":
        if stop == "STOPIT":
            break
        else:
            "Programm wird weitergeführt!"

2 Probleme:

1.) Bei Eingabe von stopit wird das Programm weitergeführt

2.) Bei Eingabe von irgendwas anderem wird nich "Programm wird weitergeführt" ausgegeben.
Benutzeravatar
Masaru
User
Beiträge: 425
Registriert: Mittwoch 4. August 2004, 22:17

Lies einmal am besten Dir Deine Schleifen- und Bedingungskonstrukte "laut" vor ...
  • - ersetze die Wörter "While" mit "solange"
    - "if" mit "wenn"
    - Boolsche Ausdrücke wie "i < 0" mit "i ist kleiner als 0"
... und dann geh nochmal durch Deinen Code durch.

Du wirst sehen, dass Du zum einen an einigen Stelle eine unglücklich gewählte Programmlogik verwendest, und an anderen es überhaupt keinen Sinn macht.

Gerold hat Dir zwei funktionierende Beispiele geliefert, welche im Vergleich mit Deinen gut Aufschluss über den Aufbau und die Funktion geben sollten.

Vielleicht als Information: mit einem break kannst Du immer nur aus dem aktuellen Schleifen-Kontrukt ausbrechen, in dem es eingegliedert ist (nicht aber evntuellen dort drum liegenden).

EDIT:
Wenn Du also zwei geschachtelte Schleifen (wie in Deinem Falle) hast, und brichts aus der "inneren" aus, so bleibt die "äussere" dennoch weiterhin bestehen.
Benutzeravatar
Drake
User
Beiträge: 71
Registriert: Mittwoch 14. März 2007, 15:48
Wohnort: Bremen
Kontaktdaten:

Das habe ich mal gemacht und komme auf folgendes Ergebnis:

Code: Alles auswählen

import sys
i = 0
print "Zum schließen bitte exit eingeben!"
exit = ""

while i < 1:
    stop = raw_input().upper()
    if stop == "STOPIT":
        pass
    else:
        print "Programm wird weitergeführt!"


Pseudocode:

Code: Alles auswählen

solange i kleiner is als 1
eingabeaufforderung erstellen
wenn stop den wert "stopit" enthält
"Beende"
sonst
schreibe "Programm wir weitergeführt!"
Funzt alles ausser das beenden ...

EDIT: pass durch break ersetzt .. Wenn ich STOPIT eingebe geht es, bei stopit allerdings nicht .. Wie kann ich case-sensetive aussschalten?
Zuletzt geändert von Drake am Mittwoch 14. März 2007, 17:34, insgesamt 1-mal geändert.
Benutzeravatar
Masaru
User
Beiträge: 425
Registriert: Mittwoch 4. August 2004, 22:17

*hustet*

Code: Alles auswählen

...
    if stop == "STOPIT":
        i = 1    # <--- Abbruchbedingung für die äussere Schleife
        # pass   # <--- kann nun weggelassen werden
...
oder

Code: Alles auswählen

...
    if stop == "STOPIT":
        break    # <--- aus der aktuellen Schleife 'while i < 1' ausbrechen
        # pass   # <--- kann nun weggelassen werden
...
EDIT:
und was Deine Eingabe "STOPIT" vs. "stopit" angeht ... wenn Dir die case-sensitive Schreibweise egal ist, dann lower() oder upper() einfach sowohl den Eingabe, wie auch den Vergleichswert, bevor Du den tatsächlichen Vergleich durchführst.
sape
User
Beiträge: 1157
Registriert: Sonntag 3. September 2006, 12:52

EDIT: Ups, habe die zweite Seite nicht gesehen! -- Frage wurde ja schon beantwortet.
Antworten