anweisungen

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
jan.b
User
Beiträge: 195
Registriert: Mittwoch 9. August 2017, 17:12

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?
Zuletzt geändert von Anonymous am Dienstag 15. August 2017, 17:01, insgesamt 1-mal geändert.
Grund: Quelltext in Python-Codebox-Tags gesetzt.
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.
Benutzeravatar
noisefloor
User
Beiträge: 3856
Registriert: Mittwoch 17. Oktober 2007, 21:40
Wohnort: WW
Kontaktdaten:

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
jan.b
User
Beiträge: 195
Registriert: Mittwoch 9. August 2017, 17:12

das war ja nur ein kleiner auszug, kommt alles noch zum Einsatz. :P
jan.b
User
Beiträge: 195
Registriert: Mittwoch 9. August 2017, 17:12

[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.
jan.b
User
Beiträge: 195
Registriert: Mittwoch 9. August 2017, 17:12

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.
Benutzeravatar
noisefloor
User
Beiträge: 3856
Registriert: Mittwoch 17. Oktober 2007, 21:40
Wohnort: WW
Kontaktdaten:

Hallo,
interessante Idee.
Na ja, eher so der Standard für les- und wartbaren Python-Code :-)

Gruß, noisefloor
Antworten