Python-字符串中的单词影响结果
我是python新手,我正在尝试开发一个电话故障排除程序,询问用户他们的设备有什么问题,如果我的程序检测到单词“wet”或“water”,它会给出一个结果。另一个例子是“屏幕破裂”。我有一个问题,如果我输入“我的屏幕破裂”。我的代码没有检测到它。感谢您的帮助 我的代码片段: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
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我必须补充一点,您的方法是不公平的。您只回答了部分问题,并开始添加一些代码,以最终获得投票和解决方案标记。在你回答之前,我的答案是正确的,但你才是得分的人。如果这就是系统的工作方式,我很不高兴。