Seite 1 von 1

anweisungen

Verfasst: Dienstag 15. August 2017, 16:51
von jan.b

Code: Alles auswählen

import sys
import tkinter
import turtle
import time
import random
import os

print(time.asctime())
print("Hier kannst du mit einem programm chatten.")
print("Erstellt am 32.07.2017.")
print("________________________________________________________")
 
begrüßungsmöglichkeiten =  ["Einen schönen guten Tag.", "Guten Tag.", "HALLO."]
print(random.choice(begrüßungsmöglichkeiten))
random.shuffle(begrüßungsmöglichkeiten)
time.sleep(0.4)
 
for x in range(1):
    eingabe = input("Eingabe: ")
    if eingabe == "hi" or "hallo" or "hallo" or "hi" or "hallöchen" or "guten tag" or "guten abend" or "guten morgen" or "guten nachmittag":
        print(random.choice(begrüßungsmöglichkeiten))
    elif eingabe == ("was kann ich machen?") or ("was kann ich machen"):
        print("du könntest mit mir schreiben...")
        time.sleep(0.3)
        print("...oder ein spiele spielen...")
        time.sleep(0.3)
        print("...oder vielleicht doch etwas praktisches wie einen wecker oder eine stoppuhr?")
        time.sleep(0.3)
    elif eingabe == ("wie spät ist es") or eingabe == ("wieviel uhr ist es") or eingabe == ("wie spät ist es?") or eingabe == ("wieviel uhr ist es?"):
        print(time.asctime())
    else:
        print("tut mir leid, aber das verstehe ich nicht")
warum wird hier immer nur die erste Anweisung ausgeführt?

Re: anweisungen

Verfasst: Dienstag 15. August 2017, 17:05
von BlackJack
@jan.b: Weil ``or`` nicht so funktioniert wie Du das vermutest. Das ist ein binärer Operator der weniger stark bindet als ``==``. ``a == b or c or d`` muss man als ``((a == b) or c) or d`` lesen, also entweder ist a == b wahr oder c ist wahr oder d ist wahr. Und eine nichtleere Zeichenkette ist als Wahrheitswert gesehen wahr, also ist die Bedingung bei dem ``if`` immer wahr.

Re: anweisungen

Verfasst: Dienstag 15. August 2017, 18:52
von noisefloor
Hallo,

anstatt `or` Kaskaden möchtest du dir vielleicht mal den `in`-Operator anschauen...

[codebox=pycon file=Unbenannt.txt]>>> known_words = ['foo', 'bar', 'spamegg', 'hello world!']
>>> 'foo' in known_words
True
>>> 'hello' in known_words
False
>>> 'hello world!' in known_words
True
>>>
[/code]

Das `for x in range(1)` ist sinnfrei. Da kannst du auch den Code direkt durchlaufen lassen, dass kommt hier auf's gleiche raus. Außerdem verwendest du das `x` im Code nirgends.

Warum importierst du die ganze Module, obwohl du sie nicht verwendest?

Gruß, noisefloor

Re: anweisungen

Verfasst: Dienstag 15. August 2017, 19:03
von jan.b
das war ja nur ein kleiner auszug, kommt alles noch zum Einsatz. :P

Re: anweisungen

Verfasst: Dienstag 15. August 2017, 19:04
von jan.b
[quote="noisefloor"]Hallo,

anstatt `or` Kaskaden möchtest du dir vielleicht mal den `in`-Operator anschauen...

[codebox=pycon file=Unbenannt.txt]>>> known_words = ['foo', 'bar', 'spamegg', 'hello world!']
>>> 'foo' in known_words
True
>>> 'hello' in known_words
False
>>> 'hello world!' in known_words
True
>>>
[/code]

interessante Idee.

Re: anweisungen

Verfasst: Dienstag 15. August 2017, 19:05
von jan.b
BlackJack hat geschrieben:@jan.b: Weil ``or`` nicht so funktioniert wie Du das vermutest. Das ist ein binärer Operator der weniger stark bindet als ``==``. ``a == b or c or d`` muss man als ``((a == b) or c) or d`` lesen, also entweder ist a == b wahr oder c ist wahr oder d ist wahr. Und eine nichtleere Zeichenkette ist als Wahrheitswert gesehen wahr, also ist die Bedingung bei dem ``if`` immer wahr.
danke.

Re: anweisungen

Verfasst: Dienstag 15. August 2017, 19:13
von noisefloor
Hallo,
interessante Idee.
Na ja, eher so der Standard für les- und wartbaren Python-Code :-)

Gruß, noisefloor