Seite 1 von 1

Hilfe gesucht beim aller ersten Script

Verfasst: Freitag 4. Januar 2019, 14:55
von Simba
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

Re: Hilfe gesucht beim aller ersten Script

Verfasst: Freitag 4. Januar 2019, 15:34
von kbr
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.

Re: Hilfe gesucht beim aller ersten Script

Verfasst: Freitag 4. Januar 2019, 15:48
von Simba
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
        

        

Re: Hilfe gesucht beim aller ersten Script

Verfasst: Freitag 4. Januar 2019, 15:51
von __deets__
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.

Re: Hilfe gesucht beim aller ersten Script

Verfasst: Freitag 4. Januar 2019, 15:54
von /me
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 ")

Re: Hilfe gesucht beim aller ersten Script

Verfasst: Freitag 4. Januar 2019, 15:59
von __blackjack__
@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