0

我做了一个简单的程序:

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 有几个段落。这里没什么特别的。其逻辑基本上是,如果我搜索一个词,即使存在搜索词之一,程序也会返回一个字符串。尽管文本具有“搜索词”,但甚至没有一次返回字符串。

4

2 回答 2

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.
于 2013-07-01T16:31:41.940 回答
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
于 2013-07-01T16:36:57.017 回答