Warning: file_get_contents(/data/phpspider/zhask/data//catemap/9/silverlight/4.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
Python-字符串中的单词影响结果_Python_Python 3.x - Fatal编程技术网

Python-字符串中的单词影响结果

Python-字符串中的单词影响结果,python,python-3.x,Python,Python 3.x,我是python新手,我正在尝试开发一个电话故障排除程序,询问用户他们的设备有什么问题,如果我的程序检测到单词“wet”或“water”,它会给出一个结果。另一个例子是“屏幕破裂”。我有一个问题,如果我输入“我的屏幕破裂”。我的代码没有检测到它。感谢您的帮助 我的代码片段: print(60 * '-') print('Could you describe what is wrong with your device?') print(60 * '-') time.sleep(1) user_p

我是python新手,我正在尝试开发一个电话故障排除程序,询问用户他们的设备有什么问题,如果我的程序检测到单词“wet”或“water”,它会给出一个结果。另一个例子是“屏幕破裂”。我有一个问题,如果我输入“我的屏幕破裂”。我的代码没有检测到它。感谢您的帮助

我的代码片段:

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')  

userproblem
是整个用户的输入。您正在检查它是否属于具有这些关键字的元组。因此,如果输入是
“我的手机是湿的”
,则该字符串不属于
(“水”、“水损害”、“雨”、“厕所”、“水池”、“海”、“海洋”、“河”)
,因为它不等于这些单词中的任何一个。如果,则在第二个
中出现相同问题

正确的解决方法是询问输入中是否包含这些单词中的任何一个,而事实恰恰相反。你会有这样的想法:

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

您需要改变您的方法,以下是一个示例:

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

您正在尝试将
我的屏幕被破解
与元组中的每个项匹配。。。试着将输入分开,并分别匹配单词。我也想到了这种方法,但它不是故障保护。“我在斯旺西丢失了我的设备”将打印
水损害变量
。事实证明,这些单词只能匹配用户输入的整个单词,仅仅包含在输入中是不够的。这很容易修复。只需将userproblem中的
if item
更改为userproblem.split(“”)
中的
if item。感谢您的回复,它帮助我了解了所有的工作原理!!很高兴为您提供帮助:)很抱歉再次打扰您,但如果我输入“我的屏幕已破裂”,我如何防止我的程序将屏幕变量打印两次@Lucasnadalutti在每次
打印后添加
中断
。您的程序将离开循环,这保证不会有任何内容被多次打印。@lucasnadalutti我必须补充一点,您的方法是不公平的。您只回答了部分问题,并开始添加一些代码,以最终获得投票和解决方案标记。在你回答之前,我的答案是正确的,但你才是得分的人。如果这就是系统的工作方式,我很不高兴。