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.

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