如何在python中定义多个文本时使用“in”条件

wqnecbli  于 2021-06-23  发布在  Mysql
关注(0)|答案(3)|浏览(344)

我想从我的情况得到正确的结果,这是我的情况
这是我的数据库

这是我的密码:
我的定义文本


# define

country = ('america','indonesia', 'england', 'france')
city = ('new york', 'jakarta', 'london', 'paris')

c1="Country"
c2="City"
c3="<blank>"

和条件(“文本”在这里是从select数据库传递的,ofc使用looping-for)

if str(text) in str(country) :
        stat=c1
    elif str(text) in str(city) :
        stat=c2
    else :
        stat=c3

我得到了错误的结果,就像这样

有什么办法可以让这个代码正常工作吗?当使用“in”时只包含一个文本时,它就工作了,但这种情况定义了这么多文本条件。

e3bfsja2

e3bfsja21#

如果我没看错你的话,你需要。

text = "i was born in paris"
country = ('america','indonesia', 'england', 'france')
city = ('new york', 'jakarta', 'london', 'paris')

def check(text):
    for i in country:
        if i in text.lower():
            return "Country"
    for i in city:
        if i in text.lower():
            return "City"
    return "<blank>"

print(check(text))
print(check("I dnt like vacation in america"))

输出:

City
Country
bxgwgixi

bxgwgixi2#

你最好用字典。我假设文本是一个列表:

dict1 = {
    "countries" : ['america','indonesia', 'england', 'france'],
    "city" : ['new york', 'jakarta', 'london', 'paris']
}

for x in text:
    for y in dict1['countries']:
        if y in x:
            print 'country: ' + x
    for z in dict1['city']:
        if z in x:
            print 'city: ' + x
balp4ylt

balp4ylt3#

首先,检查你在测试什么。

>>> country = ('america','indonesia', 'england', 'france')
>>> city = ('new york', 'jakarta', 'london', 'paris')
>>>
>>> c1="Country"
>>> c2="City"
>>> c3="<blank>"

与您的设置相同。所以,你在测试子串的存在。

>>> str(country)
"('america', 'indonesia', 'england', 'france')"

看看能不能找到一个国家。

>>> 'america' in str(country)
True

对!不幸的是,一个简单的字符串测试,比如上面的一个,除了涉及不必要的列表到字符串的转换之外,还发现了一些不需要的东西。

>>> "ca', 'in" in str(country)
True

这个 in 如果右边的字符串包含左边的子字符串,则字符串测试为true。这个 in 但是,列表的test是不同的,当被测试的列表包含左侧的值作为元素时,test为true。

>>> 'america' in country
True

很好!已经摆脱了“奇怪的其他比赛”的错误?

>>> "ca', 'in" in country
False

看来是这样。但是,使用列表包含测试需要检查输入字符串中的每个单词,而不是整个字符串。

>>> "I don't like to vacation in america" in country
False

上面的步骤与您现在所做的类似,只是测试列表元素,而不是将列表作为字符串。此表达式生成输入中的单词列表。

>>> [word for word in "I don't like to vacation in america".split()]
['I', "don't", 'like', 'to', 'vacation', 'in', 'america']

请注意,在分割输入时,您可能必须比我更小心。在上面的例子中, "america, steve" 什么时候分手 ['america,', 'steve'] 两个词都不匹配。
这个 any 函数在表达式序列上迭代,返回 True 在序列的第一个真成员处(和 False 如果没有找到这样的元素)(这里我使用一个生成器表达式而不是一个列表,但是生成了相同的iterable序列)。

>>> any(word in country for word in "I don't like to vacation in america".split())
True

对于额外的标记(这是留给读者的练习),您可以编写一个函数,该函数包含两个参数、一个句子和一个可能匹配的列表,如果列表中存在该句子中的任何单词,则返回true。然后可以使用两个不同的函数调用来处理国家和城市。
你可以通过使用集合而不是列表来提高速度,但是原理是一样的。

相关问题