2016-11-17 1 views
0

Das ist mein Code und das Problem, das ich habe, ist, dass es keine Sequenzierung von den IF-Anweisungen zur ELIF gibt. Grundsätzlich funktioniert es ohne den "oder" -Teil, aber nicht, wenn Sie den oder hinzufügen. Dies ist anders als bei der anderen Frage, da es Strings verwendet, während die andere Frage Ganzzahlen verwendet.Meine IF geht nicht weiter zu ELIF, auch wenn sie nicht zufrieden ist

import time 
print "Welcome to the Troubleshooting Program" 
time.sleep(0.2) 
query=raw_input("What is your query? ") 
querystr=str(query) 
if "screen" or "Screen" in querystr: 
    in_file=open("Screen.txt", "r") 
    screen_answer=in_file.read() 
    print "We have identified the keyword Screen, here are your possible solutions:" 
    time.sleep(0.5) 
    print screen_answer 

elif "wet" or "Wet" or "water" or "Water" in querystr: 
    in_file2=open("Wet.txt", "r") 
    screen_answer=in_file.read() 
    print "We have identified that the device has been in contact with water, here are your possible solutions:" 
    time.sleep(0.5) 
    print screen_answer 

elif "Bath" or "bath" or "sink" or "Sink" or "toilet" or "Toilet" in querystr: 
    in_file3=open("Wet.txt", "r") 
    screen_answer=in_file.read() 
    print "We have identified that the device has been in contact with water, here are your possible solutions:" 
    time.sleep(0.5) 
    print screen_answer 

elif "battery" or "Batttery" or "charge" in querystr: 
    in_file=open("Battery.txt", "r") 
    screen_answer=in_file.read() 
    print "We have identified that there is an issue with the devices battery, here are your possible solutions:" 
    time.sleep(0.5) 
    print screen_answer 

elif "speaker" or "Speaker" or "Sound" or "sound" in querystr: 
    in_file=open("Speaker.txt", "r") 
    screen_answer=in_file.read() 
    print "We have identified that there is an issue with the devices speakers, here are your possible solutions:" 
    time.sleep(0.5) 
    print screen_answer 

elif "port" or "Port" in querystr: 
    in_file=open("Port.txt", "r") 
    screen_answer=in_file.read() 
    print "We have identified that there is an issue with the devices ports, here are your possible solutions:" 
    time.sleep(0.5) 
    print screen_answer 

else: 
    repeat=raw_input("Do you have another query? Y/N") 
    if repeat =="Y" or "y": 
     queryloop() 
    else: 
     print "Thank you!" 

Vielen Dank für Ihre Zeit.

+2

„screen“ als wahr ausgewertet wird, so Die erste Bedingung ist immer erfüllt. Sie wollen '" Bildschirm "in querystr oder" Bildschirm "in querystr'. Oder "Bildschirm" in querystr.lower() '. –

+1

Vielen Dank, das hat meinen Code behoben. –

+0

Zwischen jedem OR ist eine Bedingung. Eine Bedingung muss zu wahr oder falsch ausgewertet werden, aber alles, was Sie haben, ist eine Zeichenfolge, die immer als wahr ausgewertet wird, nur weil Python so funktioniert. Sieht aus wie Sie versuchen, zu überprüfen, ob etwas an eine andere Sache gleich ist, in dem Fall, dass Sie Sache == „eine andere Sache“ verwenden sollten Oder Sie könnten nur durch alle Ihre OPs und verwenden eine Funktion, die zurückgibt geben ein boolescher Wert. Das würde ich tun. Die Funktion kann eine Liste von Zeichenfolgen nehmen und jede davon durchlaufen und prüfen, ob sie sich in der Abfrage befinden. –

Antwort

0

Ausgabe hier:

Ihr Zustand:

if "screen" or "Screen" in querystr: 

wird immer True weil:

"screen" or "Screen" in querystr 

immer "screen" zurückkehren und Ihre if wird es als True behandeln.

Wie geht das?

Wenn Sie überprüfen möchten, ob einige Wörter in querystr sind oder nicht. Sie können tun es:

if any(word in querystr for word in ["screen", "Screen"]) 

In diesem speziellen Fall, da nur die Bedingung, den Fall zu ignorieren überprüfen möchten, ist es wie folgt geschrieben werden:

if "screen" in querystr.lower(): 
Verwandte Themen