我做了一个简单的程序:
Query = raw_input('Keyword: ')
QuerySplit = Query.Split()
QSL = len(QuerySplit)
l=0
string = "Search contains keyword"
for i in dem:
for k in range (l and (QSL-1)):
if QuerySplit[k] in i.text:
print string
Dem有几个段落。这里没什么特别的。
这个逻辑基本上是如果我搜索一个术语,即使存在一个搜索的术语,程序也会返回一个字符串。尽管文本中有“搜索术语”,但这甚至都没有被返回过。
答案 0 :(得分:3)
range (l and (QSL-1))
应为range(QSL)
。
l and (QSL-1)
实际上将评估为0
,因为and
条件会在第一个Falsy值处短路并返回该值。如果所有项目都是True
值,则返回最后一项。
>>> 0 and 2
0
>>> 1 and 2
2
>>> 1 and 0 and 3
0
>>> 1 and 2 and 3
3
在python中,你可以迭代列表本身,不需要索引:
for strs in QuerySplit:
if strs in i.text:
print string
range
:
>>> range(4)
[0, 1, 2, 3]
>>> range(2)
[0, 1]
range
上的帮助:
range(stop) -> list of integers
range(start, stop[, step]) -> list of integers
Return a list containing an arithmetic progression of integers.
range(i, j) returns [i, i+1, i+2, ..., j-1]; start (!) defaults to 0.
When step is given, it specifies the increment (or decrement).
For example, range(4) returns [0, 1, 2, 3]. The end point is omitted!
These are exactly the valid indices for a list of 4 elements.
答案 1 :(得分:1)
我认为使用集合交集(QuerySplit和i.text),并查看结果是否是不相交/不相交将完成这项工作。
Query = raw_input('Keyword: ')
QuerySplit = Query.Split()
QuerySplitSet = set(QuerySplit)
string = "Search contains keyword"
for i in dem:
if (not QuerySplitSet.isdisjoint(set(i.text))):
print string