Seite 1 von 1
Python 3.2 Programm Beenden/Neuer Durchlauf
Verfasst: Samstag 24. September 2011, 17:52
von Lemiewings
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.
Re: Python 3.2 Programm Beenden/Neuer Durchlauf
Verfasst: Samstag 24. September 2011, 18:12
von BlackJack
@Lemiewings: Wo genau liegt denn das Problem mit der ``while``-Schleife?
Re: Python 3.2 Programm Beenden/Neuer Durchlauf
Verfasst: Samstag 24. September 2011, 19:27
von Lemiewings
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...
Re: Python 3.2 Programm Beenden/Neuer Durchlauf
Verfasst: Samstag 24. September 2011, 20:08
von cofi
Stichwort: `input`.
Aber besser:
Re: Python 3.2 Programm Beenden/Neuer Durchlauf
Verfasst: Samstag 24. September 2011, 22:36
von Lemiewings
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?
Re: Python 3.2 Programm Beenden/Neuer Durchlauf
Verfasst: Samstag 24. September 2011, 22:41
von cofi
Vergleich nochmal deinen und meinen Post und achte vielleicht auch auf die Farben.
Re: Python 3.2 Programm Beenden/Neuer Durchlauf
Verfasst: Samstag 24. September 2011, 22:56
von Lemiewings
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

.
Re: Python 3.2 Programm Beenden/Neuer Durchlauf
Verfasst: Samstag 24. September 2011, 23:02
von 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.)
Re: Python 3.2 Programm Beenden/Neuer Durchlauf
Verfasst: Samstag 24. September 2011, 23:04
von cofi
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.

Re: Python 3.2 Programm Beenden/Neuer Durchlauf
Verfasst: Samstag 24. September 2011, 23:06
von jbs
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
Re: Python 3.2 Programm Beenden/Neuer Durchlauf
Verfasst: Samstag 24. September 2011, 23:13
von Lemiewings
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.
Re: Python 3.2 Programm Beenden/Neuer Durchlauf
Verfasst: Dienstag 27. September 2011, 15:18
von Lemiewings
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.
Re: Python 3.2 Programm Beenden/Neuer Durchlauf
Verfasst: Dienstag 27. September 2011, 15:33
von snafu
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?
Re: Python 3.2 Programm Beenden/Neuer Durchlauf
Verfasst: Dienstag 27. September 2011, 16:27
von Lemiewings
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?
Re: Python 3.2 Programm Beenden/Neuer Durchlauf
Verfasst: Dienstag 27. September 2011, 16:52
von cofi
Code: Alles auswählen
repeat = True
while repeat:
answer = input('"End" to abort: ')
repeat = answer != 'End'
Re: Python 3.2 Programm Beenden/Neuer Durchlauf
Verfasst: Dienstag 27. September 2011, 19:12
von Lemiewings
Ok das Funktioniert schon mal

. 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 .
Re: Python 3.2 Programm Beenden/Neuer Durchlauf
Verfasst: Dienstag 27. September 2011, 19:14
von deets
Sie dier mal an, was "fooBarBaz".lower() macht.
Re: Python 3.2 Programm Beenden/Neuer Durchlauf
Verfasst: Dienstag 27. September 2011, 19:58
von cofi
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`.
Re: Python 3.2 Programm Beenden/Neuer Durchlauf
Verfasst: Dienstag 27. September 2011, 20:49
von Lemiewings
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.