2016-11-24 49 views
2

我是新来的python,我试图开发一个手机故障诊断程序,我问用户他们的设备有什么问题,如果我的程序检测到“湿”或“水” '它会回复一个结果。另一个例子是'屏幕被破解'。我遇到问题,如果我输入'我的屏幕被破解'。我的代码没有检测到它。任何帮助感谢!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

你试图匹配'我的屏幕cracked'到每个项目中的元组...尝试分裂输入和单独匹配的话。 – MooingRawr

回答

2

userproblem是你的整个用户的输入。你正在检查它是否属于这些关键字的元组。因此,如果输入为"My phone is wet",则该字符串不属于('water', 'waterdamage', 'rain', 'toilet', 'pool', 'sea', 'ocean', 'river',),因为它不等于这些单词中的任何一个。第二个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

对不起再次打扰你,但说我输入'我的屏幕被破解',我怎样才能防止我的程序打印两次SCREEN VARIABLE? @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

我也想到了这种方法,但它不是安全的。 “我在天鹅**海**中丢失了我的设备”将打印出“WATERDAMAGE VARIABLE”。原来,这些词只能匹配来自用户输入的整个词,仅仅被输入包含是不够的。 – lucasnadalutti

+0

这很容易解决。只要将'userproblem'中的item改成'userproblem.split('')'中的item。 – zipa