Python 3.2 Programm Beenden/Neuer Durchlauf

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.
Antworten
Lemiewings
User
Beiträge: 9
Registriert: Samstag 24. September 2011, 17:00

Hallo,
Habe mich extra hier angemeldet da ich ein wenig Hilfe bezüglich im Titel genanntem Problem brauche.

Es sieht momentan so aus, das der Benutzer nacheinander 2 eingaben macht und am Ende gibt es ein Ergebnis.
Jetzt möchte ich das man danach durch die Eingabe von "Ende" das Programm sauber beendet und es bei der Eingabe von "Neu" nochmal Durchläuft.

In einem Anderem Forum wurde ich jetzt schon auf die Idee gebracht, das man das ganze Programm in eine while schleife steckt. Allerdings bin ich mit nicht sicher wie ich das umsetzen soll. Vielleicht hat hier ja noch jemand eine andere Idee.

Ich bedanke mich schon mal im Voraus für eure Hilfe.
BlackJack

@Lemiewings: Wo genau liegt denn das Problem mit der ``while``-Schleife?
Lemiewings
User
Beiträge: 9
Registriert: Samstag 24. September 2011, 17:00

Ich habe gerade ein Brett vor dem Kopf und weiß einfach nicht wie ich das umsetzen soll.
Idee ist:

Code: Alles auswählen

wiederholen = 1
while wiederholen == 1:
    # Das Programm
    print("'Ende' eingeben um zu beenden, oder 'Neu' für einen neuen Durchlauf.")
    # Hier würde ich dann die Variable "wiederholen" durch eingabe von "Ende" auf 0 ändern und sagen sagen das bei "wiederholen == 0" das Programm beendet werden soll. Nur komm ich nicht drauf wie ich das am besten anstelle.
Wie man sieht ein ganz simples Problem, aber ich komme dank oben genanntem Brett leider nicht darauf wie man es löst...
Benutzeravatar
cofi
Python-Forum Veteran
Beiträge: 4432
Registriert: Sonntag 30. März 2008, 04:16
Wohnort: RGFybXN0YWR0

Stichwort: `input`.

Aber besser:

Code: Alles auswählen

wiederholen = True
while widerholen:
    ...
Lemiewings
User
Beiträge: 9
Registriert: Samstag 24. September 2011, 17:00

Das ich den input befehl benutzen muss weiß ich. Ich weiß allerdings nicht wie, bin schon die ganze zeit am herumexperimentieren aber komme nicht auf die Lösung.

Und ich hab noch ein zweites problem.

Code: Alles auswählen

# Funktioniert:
wiederholen = 1
while wiederholen == 1:

wiederholen = "true"
while wiederholen == "true":

# Funktioniert nicht:
wiederholen = true
while wiederholen == true:
Bei letzterem bekomme ich die fehlermeldung:
Traceback (most recent call last):
File "D:\Python32\programm.py", line 5, in <module>
wiederholen = true
NameError: name 'true' is not defined

Ist das normal? Oder was mache ich da falsch?
Benutzeravatar
cofi
Python-Forum Veteran
Beiträge: 4432
Registriert: Sonntag 30. März 2008, 04:16
Wohnort: RGFybXN0YWR0

Vergleich nochmal deinen und meinen Post und achte vielleicht auch auf die Farben.
Lemiewings
User
Beiträge: 9
Registriert: Samstag 24. September 2011, 17:00

Ah ok habs verstanden. True und False sind in Python feste werte, wohingegen "True" und "False" Variablen sind.
Aber warum müssen den Variablen aus Buchstaben in Anführungsstriche gesetzt werden und Zahlen nicht?

Jetzt bleibt nur noch meine Schleifen Problem :-).
BlackJack

@Lemiewings: "True" und "False" (mit Anführungsstrichen) sind keine Variablen sondern literale Zeichenketten. Ohne die Anführungsstriche sind es dagegen Namen. Diese beiden Namen sind ein wenig spezieller als viele andere Namen, da man sie nicht an andere Werte binden kann, damit niemand Wahr und Falsch umdefinieren kann. (In älteren Python-Versionen ging das mal, da waren es ganz normale Namen.)
Benutzeravatar
cofi
Python-Forum Veteran
Beiträge: 4432
Registriert: Sonntag 30. März 2008, 04:16
Wohnort: RGFybXN0YWR0

Nein, du ziehst die falschen Schluesse.

Boolsche Werte gibt es in Python als `True` und `False`, `"True"` und `"False"` sind nichts anderes als normale Zeichenketten:

Code: Alles auswählen

In [3]: bool(True), bool(False), bool("False"), bool("True")
Out[3]: (True, False, True, True)
Alle vier Werte sind keine Variablen. Bei `false = False` ist `false` eine Variable, in Python Jargon ein Name, und das laesst auch `false = True` zu.

Edit: Zu spaet. :(
Benutzeravatar
jbs
User
Beiträge: 953
Registriert: Mittwoch 24. Juni 2009, 13:13
Wohnort: Postdam

True schreibt sich groß. True ist nur ein Name für eine Instanz der Klasse bool. Wenn du lustig bist, kannst du den Namen True an ein anderes Objekt binden.

"True" und "False" sind Zeichenketten. Zeichenketten sind dann wahr, wenn sie nicht leer sind. Also sind sowohl "True" als auch "False", hingegen nicht "".

Edit: noch mehr zu spät
[url=http://wiki.python-forum.de/PEP%208%20%28%C3%9Cbersetzung%29]PEP 8[/url] - Quak!
[url=http://tutorial.pocoo.org/index.html]Tutorial in Deutsch[/url]
Lemiewings
User
Beiträge: 9
Registriert: Samstag 24. September 2011, 17:00

Ok wieder was gelernt. Vielen Dank dafür.

Edit: Jetzt stellt sich mir aber immer noch die Frage, wie man durch eine Benutzereingabe den wert der Variable "wiederholen = True" zu "wiederholen = False" verändert.
Habe schon eine ganz weile gegoogelt und herumprobiert, aber ich scheine an den falschen stellen zu suchen.
Lemiewings
User
Beiträge: 9
Registriert: Samstag 24. September 2011, 17:00

Ich weiß Doppelposts sind verpönt, aber meine eigentliche Frage wurde leider noch nicht beantwortet und der Thread scheint sonst keine Beachtung mehr zu bekommen.

Wie muss ich es anstellen das durch eine Benutzereingabe eine Variable geändert wird?
Also z.B. durch Eingabe von "Ende" die Variable "wiederholen = True" zu "wiederholen = False" geändert wird.
Das ich den input() Befehl dazu brauche weiß ich, aber ich weiß nicht wie ich das damit anstelle.
Habe schon viel herumprobiert und gegoogelt aber ich komme einfach nicht auf die Lösung.
Wäre wirklich nett wenn ihr mir da nochmal auf die Sprünge helfen könntet.
Benutzeravatar
snafu
User
Beiträge: 6908
Registriert: Donnerstag 21. Februar 2008, 17:31
Wohnort: Gelsenkirchen

BlackJack hat geschrieben:@Lemiewings: "True" und "False" (mit Anführungsstrichen) sind keine Variablen sondern literale Zeichenketten. Ohne die Anführungsstriche sind es dagegen Namen. Diese beiden Namen sind ein wenig spezieller als viele andere Namen, da man sie nicht an andere Werte binden kann, damit niemand Wahr und Falsch umdefinieren kann. (In älteren Python-Versionen ging das mal, da waren es ganz normale Namen.)

Code: Alles auswählen

Python 2.7.1+ (r271:86832, Apr 11 2011, 18:05:24) 
[GCC 4.5.2] on linux2
Type "help", "copyright", "credits" or "license" for more information.
>>> False = 'spam'
>>> 'ham' == False
False
>>> 'spam' == False
True
Oder meintest du was anderes?
Lemiewings
User
Beiträge: 9
Registriert: Samstag 24. September 2011, 17:00

Code: Alles auswählen

wiederholen = True
while wiederholen == True:
    
    # Das Programm
   
    print("'Ende' eingeben um zu beenden, oder 'Neu' für einen neuen Durchlauf.")
    # Hier möchte ich dann "wiederholen = True" zu "wiederholen = False" ändern in dem man "Ende" eingibt.
Das ich dafür input() brauche weiß ich. Aber wie bekomme ich das genau hin?
Benutzeravatar
cofi
Python-Forum Veteran
Beiträge: 4432
Registriert: Sonntag 30. März 2008, 04:16
Wohnort: RGFybXN0YWR0

Code: Alles auswählen

repeat = True
while repeat:
    answer = input('"End" to abort: ')
    repeat = answer != 'End'
Lemiewings
User
Beiträge: 9
Registriert: Samstag 24. September 2011, 17:00

Ok das Funktioniert schon mal :D. Das würde ich gerne noch so erweitern, das alle Varianten von Ende Akzeptiert werden (Ende, ende, eNde...ect.) und das ganze mit dem exit() befehl verbinden.
Außerdem würde ich es gerne so machen, das das Programm nur von vorn anfängt wenn man "Neu" eingibt.
Bis hierhin fiel mir eigtl. alles ziemlich leicht, aber komischerweise fühle ich momentan so als hätt ich ein Brett vorn Kopf genagelt und komme von alleine auf keine Lösung mehr :K .
deets

Sie dier mal an, was "fooBarBaz".lower() macht.
Benutzeravatar
cofi
Python-Forum Veteran
Beiträge: 4432
Registriert: Sonntag 30. März 2008, 04:16
Wohnort: RGFybXN0YWR0

Lemiewings hat geschrieben:Außerdem würde ich es gerne so machen, das das Programm nur von vorn anfängt wenn man "Neu" eingibt.
Also das Programm soll abbrechen, wenn es `ende' liest, aber auch wenn es nicht `neu' liest? Warum beides? Das ist genau das Dual, warum kann ein Input, der nicht `ende' ist, nicht einfach das gleiche Verhalten wie `neu' hervorrufen?

Anyways: Wenn du auf 2 Dinge testen willst nutze `and` bzw `or`.
Lemiewings
User
Beiträge: 9
Registriert: Samstag 24. September 2011, 17:00

Nein ich hatte mir das so gedacht das nachdem das Ergebnis des Programms angezeigt wurde, eine Benutzereingabe abgewartet wird.
Dort soll dann bei Eingabe von "Ende" das Programm Abbrechen/Ausschalten, bei Eingabe von "Neu" soll sich die Schleife wiederholen und am Ende wieder auf Benutzereingabe warten.
Antworten