Hilfe gesucht beim aller ersten Script

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
Benutzeravatar
Simba
User
Beiträge: 2
Registriert: Freitag 4. Januar 2019, 14:38

Hallo zusammen, ich programmiere erst seit wenigen Stunden, weshalb ich um Verständnis bei vermeintlich blöd aussehenden Fragen bitte :)
Da ich noch recht unerfahren bin, weis ich auch nicht mit welchen Suchwörtern ich bei Google gezielte antworten erhalte in dieser Nische des Internets.
Ich habe folgendes Problem:
Ich möchte, dass meine letzte codezeile: "ab zurück zu response = input" in python umgesetzt wird.
Ich habe es versucht per "return" zu machen, jedoch ohne jeglichen erfolg.
Falls jemand einen viel einfacheren Weg sieht, das gewollte umzusetzen, so freue ich mich über konstruktive Kritik an meinem Script, jedoch bitte mit Erklärung, da ich lernen möchte.

Ich wünsche allen Lesern ein frohes neues Jahr :)

Code: Alles auswählen

actual_year = 2019
age_to_old = 40
yes = ["Ja", "ja", "Yes", "yes"]
no = ["Nein", "nein", "No", "no"]

name = input("wie heißt du? :")
print("ha, du heist also " + name)

age = input("Wie alt bist du denn? :")
age = float(age)                   #float(age), da der user age per input als string eingegeben hat
if float(age) >= age_to_old:         
    print (str(age) + "? Was, schon so alt, sieht man dir garnicht an")
else:
    print(str(age) + "? Jaja, in der Jugend liegt die Kraft der Zukunft")
    

response = input("Möchtest du wissen, wann du 100 Jahre alt wirst ? : ")

hundred_birthdate = (100 - int(age)) + int(actual_year)

if response in yes or no:
    response = True

elif response != yes or no:
	response = False

while response = True:
    if response in yes:
        print(hundred_birthdate)
        
    elif response in no:
        print("Dann halt nicht du Langweiler! :P ") 
        
if response = False:
	ab zurück zu response = input
Benutzeravatar
kbr
User
Beiträge: 1508
Registriert: Mittwoch 15. Oktober 2008, 09:27

Dies ist kein lauffähiger Code. Er enthält einige Fehler, die Dir daher wohl noch verborgen geblieben sind.

Python kennt keine Sprungmarken. Du musst deswegen mit Funktionen oder zumindest mit Schleifen arbeiten. In Deinem Fall würde ich Dir empfehlen mit einer Schleife zu beginnen, die eine Eingabe des Nutzers abfragt. Gibt dieser "n" ein, soll die Schleife abbrechen.

Von da an kannst Du Dich dann schrittweise vorarbeiten. Schreibe dabei immer so wenig Code wie möglich und teste diesen dann aus.
Benutzeravatar
Simba
User
Beiträge: 2
Registriert: Freitag 4. Januar 2019, 14:38

kbr hat geschrieben: Freitag 4. Januar 2019, 15:34 Dies ist kein lauffähiger Code. Er enthält einige Fehler, die Dir daher wohl noch verborgen geblieben sind.

Python kennt keine Sprungmarken. Du musst deswegen mit Funktionen oder zumindest mit Schleifen arbeiten. In Deinem Fall würde ich Dir empfehlen mit einer Schleife zu beginnen, die eine Eingabe des Nutzers abfragt. Gibt dieser "n" ein, soll die Schleife abbrechen.

Von da an kannst Du Dich dann schrittweise vorarbeiten. Schreibe dabei immer so wenig Code wie möglich und teste diesen dann aus.
Vielen Dank für die schnelle Antwort. Mein Code funktioniert nun, jedoch stehe ich noch immer vor einem Problem:
Ich möchte, dass falls jemand weder Ja, noch Nein antwortet , sondern irgendetwas anderes, ein Text ausgegeben wird und folglich wieder zum input (response) zurückgekehrt wird

Code: Alles auswählen

actual_year = 2019
age_to_old = 40
yes = ["Ja", "ja", "Yes", "yes"]
no = ["Nein", "nein", "No", "no"]

name = input("wie heißt du? :")
print("ha, du heist also " + name)

age = input("Wie alt bist du denn? :")
age = float(age)                   #float(age), da der user age per input als string eingegeben hat
if float(age) >= age_to_old:         
    print (str(age) + "? Was, schon so alt, sieht man dir garnicht an")
else:
    print(str(age) + "? Jaja, in der Jugend liegt die Kraft der Zukunft")
    

response = input("Möchtest du wissen, wann du 100 Jahre alt wirst ? : ")

hundred_birthdate = (100 - int(age)) + int(actual_year)

while response in yes or no:
    if response in yes:
        print("Du wirst im Jahr " + str(hundred_birthdate) + " satte 100 Jahre alt!")
    if response in no:
        print("Dann halt nicht du Langweiler")
    break
        

        
__deets__
User
Beiträge: 14545
Registriert: Mittwoch 14. Oktober 2015, 14:29

Du hast diverse weitere Fehler:

- "response in yes or no" tut nicht was du glaubst was es tut. Du kannst "response in (yes, no)" benutzen. Oder "response == yes or response == no". Aber nicht dieses aus der Umgangssprache entlehnte Ding.
- eine while-Schleife mit einem break das *immer* ausgefuehrt wird, kann man sich auch gleich sparen.
- eine while-Schleife ist aber auch die Antwort auf deine Frage: um etwas dauerhaft laufen zu lassen, wenn man vorher nicht weiss, wie lange, benutzt man eine while-schleife.
Benutzeravatar
/me
User
Beiträge: 3561
Registriert: Donnerstag 25. Juni 2009, 14:40
Wohnort: Bonn

Simba hat geschrieben: Freitag 4. Januar 2019, 14:55 Ich möchte, dass meine letzte codezeile: "ab zurück zu response = input" in python umgesetzt wird.
Dafür verwendet man typischerweise eine Endlosschleife die verlassen wird, sobald die gewünschte Bedingung nicht mehr erfüllt ist.

Code: Alles auswählen

number = 1
while True:
    print('Zahl: {}'.format(number))
    yes_no = input('Zahl verdoppeln? (j, n)')
    if not yes_no.lower() == 'j':
        break
    number *= 2
Simba hat geschrieben: Freitag 4. Januar 2019, 14:55

Code: Alles auswählen

...
if response in yes or no:
    response = True
...
Das tut nicht das was du glaubst. Python interpretiert deine Bedingung wie folgt:

Code: Alles auswählen

if (response in yes) or no:
Also entweder ist response in yes oder der Wahrheitswert von no ergibt True. Schau dir mal an, wie folgende Werte ausgewertet werden:

Code: Alles auswählen

>>> bool(True)
True
>>> bool(False)
False
>>> bool(42)
True
>>> bool(0)
False
>>> bool("Monty")
True
>>> bool("")
False
>>> bool(["Nein", "nein", "No", "no"])
True
>>> bool([])
False
Funktionieren würde die Bedingung wie folgt:

Code: Alles auswählen

if response in yes or response in no:
Es ist auch keine gute Idee response erst als String zu verwenden um dann später einen Boolean-Wert daraus zu machen.

Und wie glaubst du eigentlich, dass die folgende Schleife jemals wieder verlassen werden kann wenn sie betreten wurde?

Code: Alles auswählen

while response = True:
    if response in yes:
        print(hundred_birthdate)
        
    elif response in no:
        print("Dann halt nicht du Langweiler! :P ")
Benutzeravatar
__blackjack__
User
Beiträge: 14036
Registriert: Samstag 2. Juni 2018, 10:21
Wohnort: 127.0.0.1
Kontaktdaten:

@Simba: Der Code funktioniert zufällig, denn ``response in yes or no`` macht nicht das was Du denkst was es tut. Die Schleife ich an der falschen Stelle wenn Du die *Frage* wiederholen willst. Schleifen wiederholen das was *in* der Schleife steht, nicht das was *davor* steht. Mit ``break`` abbrechen musst Du die Endlosschleife die Du hier brauchst, dann wenn eine gültige Eingabe erfolgt ist. Endlosschleife ist ``while True:`` und nicht ``while response in yes or no:``. Auch wenn das hier auch eine Endlosschleife ist, da der zweite Teile (`no`) *immer* *wahr* ist. Der Ausdruck bedeutet nicht das was Du denkst. ``or`` ist ein binärer Operator mit einem Teilausdruck links davon (``response in yes``) und einem Teilausdruck rechts davon (``no``). Und wenn einer dieser Teilsausdrücke wahr ist, dann ist der Gesamtausdruck wahr. Und `no` ist eine nicht-leere Liste und die sind im boole'schen Kontext immer wahr. Im Gegensatz zu leeren Listen, die sind unwahr.

Code: Alles auswählen

In [4]: bool([1, 2, 3])
Out[4]: True

In [5]: bool([])
Out[5]: False

In [6]: bool(False or [])
Out[6]: False

In [7]: bool(False or [1, 2, 3])
Out[7]: True
„A life is like a garden. Perfect moments can be had, but not preserved, except in memory. LLAP” — Leonard Nimoy's last tweet.
Antworten