Seite 2 von 2

Verfasst: Mittwoch 14. März 2007, 17:05
von Drake
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 ..

Verfasst: Mittwoch 14. März 2007, 17:15
von Masaru
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.

Verfasst: Mittwoch 14. März 2007, 17:20
von Drake

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.

Verfasst: Mittwoch 14. März 2007, 17:25
von Masaru
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.

Verfasst: Mittwoch 14. März 2007, 17:31
von Drake
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?

Verfasst: Mittwoch 14. März 2007, 17:33
von Masaru
*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.

Verfasst: Donnerstag 15. März 2007, 07:51
von sape
EDIT: Ups, habe die zweite Seite nicht gesehen! -- Frage wurde ja schon beantwortet.