2016-11-24 9 views
2

私はPythonの初心者です。私は電話機のトラブルシューティングプログラムを開発しようとしています。ユーザーがデバイスに何が間違っているのかを尋ね、プログラムが 'wet'や 'water'それは結果とともに返答する。もう一つの例は '画面が割れている'ことです。私は「My screen is cracked」と入力すると問題が発生します。私のコードはそれを検出しません。どんな助けにも感謝!Python - 文字列内の単語が結果に影響を及ぼす

私のコードのスニペット:

print(60 * '-') 
print('Could you describe what is wrong with your device?') 
print(60 * '-') 
time.sleep(1) 
user_problem = input('') 

if user_problem in ('water', 'waterdamage', 'rain', 'toilet', 'pool', 'sea',  'ocean', 'river',): 
    print('WATERDAMAGE VARAIBLE') 

elif user_problem in ('screen', 'cracked', 'shattered', 'smashed',): 
    print('SCREEN VARIABLE') 
+0

あなたのタプルの各項目に「私の画面がクラックされました」と一致させようとしています...入力を分割して個々に一致させてみてください。 – MooingRawr

答えて

2

userproblemは、あなたの全ユーザーの入力です。これらのキーワードを持つタプルに属しているかどうかを確認しています。したがって、入力が"My phone is wet"の場合、この文字列は('water', 'waterdamage', 'rain', 'toilet', 'pool', 'sea', 'ocean', 'river',)に属しません。これはこれらの単語のいずれとも等しくないためです。 2番目の同じ問題。if

正しい解決策は、のいずれかのが入力に含まれているかどうかを尋ねることです。これは全く反対です。

userproblem_words = userproblem.split(' ') 

water_related_words = ('water', 'waterdamage', 'rain', 'toilet', 'pool', 'sea', 'ocean', 'river') 
if (any([(word in water_related_words) for word in userproblem_words])): 
    print('WATERDAMAGE VARIABLE') 

break_related_words = ('screen', 'cracked', 'shattered', 'smashed') 
elif (any([word in userproblem for word in break_related_words])): 
    print('SCREEN VARIABLE') 

それとも、あなたはこの場合はリスト内包の可読性を好きではない場合、あなたはプレーンforを使用することができます:あなたは、のようなものを持っているでしょう

water_related_words = ('water', 'waterdamage', 'rain', 'toilet', 'pool', 'sea', 'ocean', 'river') 
break_related_words = ('screen', 'cracked', 'shattered', 'smashed') 

for word in userproblem.split(' '): 
    if word in water_related_words: 
     print('WATERDAMAGE VARIABLE') 
     break 

    elif word in break_related_words: 
     print('SCREEN VARIABLE') 
     break 
+0

お返事ありがとうございました。それがすべての仕組みを理解するのに役立ちました! –

+0

喜んで助けてください:) – lucasnadalutti

+0

もう一度迷惑をかけて申し訳ありませんが、「私の画面にひびが入っています」と入力すると、私のプログラムがスクリーンバリアブルを2回印刷するのを防ぐことができますか? @lucasnadalutti –

0

あなたはあなたのアプローチを変更する必要があり、

print (60 * '-') 
print ('Could you describe what is wrong with your device?') 
print (60 * '-') 
time.sleep(1) 
userproblem = input('') 

water = ['water', 'waterdamage', 'rain', 'toilet', 'pool', 'sea',  'ocean', 'river'] 
screen = ['screen', 'cracked', 'shattered', 'smashed'] 
for item in water: 
    if item in userproblem.split(' '): 
     print('WATERDAMAGE VARIABLE') 
     break 
for item in screen: 
    if item in userproblem.split(' '): 
     print('SCREEN VARIABLE') 
     break 
+0

私はこのアプローチも考えましたが、フェールセーフではありません。 「Swan ** sea **で私のデバイスを紛失しました」は「水面変動」を表示します。これらの言葉は、ユーザーの入力から単語全体にしか一致しないことがわかります。単純に入力に含まれているだけでは不十分です。 – lucasnadalutti

+0

これは簡単に修正できます。 userproblem.split( '') '内のif if項目にuserproblemの項目があれば'を変更するだけです。 – zipa

関連する問題