我有一个if
块语句,用于检查我已分配给变量movieTitle
的字符串是否包含预定义字典中键值对的值
我的代码是:
import mechanize
from bs4 import BeautifulSoup
leaveOut = {
'a':'cat',
'b':'dog',
'c':'werewolf',
'd':'vampire',
'e':'nightmare'
}
br = mechanize.Browser()
r = br.open("http://<a_website_containing_a_list_of_movie_titles/")
html = r.read()
soup = BeautifulSoup(html)
table = soup.find_all('table')[0]
for row in table.find_all('tr'):
# Find all table data
for data in row.find_all('td'):
code_handling_the_assignment_of_movie_title_to_var_movieTitle
if any(movieTitle.find(leaveOut[c]) < 1 for c in 'abcde'):
do_this_set_of_instructions
else:
pass
我的想法是我可以使用movieTitle
方法测试字符串.find()
的任何字典值(预定义),如果找到该值,将返回索引整数值大于(或至少)等于1.因此,如果条件的结果是&lt; 1(通常在没有时为-1),我可以继续执行程序的其余部分,否则不执行其余的程序击>
但是,当我使用Aptana调试功能时,我可以看到我 if
块上的断点从未被占用,好像Aptana正在跳过它。这是为什么?
编辑:
为了清晰起见,已包含更多代码。审查了我使用@kqr建议的代码的建议。但是,尽管leaveOut dict中包含字符串值,但我的实际程序仍显示movieTitle。为什么呢?
答案 0 :(得分:3)
你可以像Skyhawk上尉所说的那样做,或者你可以用以下内容替换你的整个if
条件:
if any(movieTitle.find(leaveOut[c]) < 1
for c in 'abcdefghijklm'):
关于你的第二个问题,你确定不是指
if not any(movieTitle.find(leaveOut[c]) < 1
for c in 'abcdefghijklm'):
答案 1 :(得分:1)
我相信你应该使用'或'。看来你正在使用二进制文件或(字符)。
例如:
if ((movieTitle.find(leaveOut['a']) < 1) or
(movieTitle.find(leaveOut['b']) < 1) or
(movieTitle.find(leaveOut['c']) < 1) or ....
答案 2 :(得分:0)
你能确切地确认你想要在这里实现什么吗?如果movieTitle中没有leaveOut
字典中的任何值,您是否尝试执行一组指令?如果是这样的话:
if [x for x in leaveOut.values() if x not in movieTitle]:
会更简洁。此外,如果你打算使用上面的公式,那么比较器必须是0
而不是1
,否则第一个字符的匹配将触发指令集。