-3

我是编程新手,刚刚开始学习 Python。我想创建一个小程序,它可以简单地检测您是否在条目中输入了“坏词”。

name = input ('Please enter your name. ')
badword=['foo', 'bar']
if name in badword:
    print ('No.')
else:
    print ('Yes')

这种方式不起作用,因为它正在获取输入的全部内容并在列表中搜索该条目。如果我尝试对我们:

if badword in name:

然后我得到一个错误。我可以调用列表的每一部分,但这是很多代码,特别是如果你输入不同类型的坏词,而且我知道我可以用更少的代码做一些事情,这会变得很长。这里有点迷路,谷歌搜索已经干涸。

4

3 回答 3

5

您需要遍历badword列表以测试每个单词

for word in badword:
    if word in name:
        print('No.')
        break
else:
    print('Yes.')

else子句是语句的一部分for;它在循环未被语句中断时执行break,因此在这种情况下,如果没有badword匹配的值。

这可以通过any()函数和生成器表达式来缩短:

if any(word in name for word in badword):
    print('No.')
else:
    print('Yes.')
于 2013-07-23T08:47:20.563 回答
1

您的第二次尝试:if badword in name几乎是正确的。您需要检查 badword 中的每个项目 - 如下所示:

if any( [ word for word in badword if word in name ] ):
    print( 'No' )
    break
else:
    print( 'Yes' )

any如果任何条件匹配,则返回 true。中间的位[]是列表推导,它返回一个新列表。例如:

print( [ word for word in badword ] )

最后一个if word in name是将项目添加到该新列表的条件,因此只有符合条件的项目才会True出现在新列表中。

于 2013-07-23T08:51:26.853 回答
0
inputs = [" some BAD sentense ", "some right sentense"]
bad_words_list = ["bad", "wrong"]

def check(enter):
    """Check for word in bad words list. Note, check process not key sensitive.

    Return True if sentense contains bad word."""
    sentense = enter.lower().split()
    for word in bad_words_list:
        if word.lower() in sentense:
            return False
    return True

print "Is sentense bad? " + str(check(inputs[0]))
print "Is sentense bad? " + str(check(inputs[1]))

测试它:

$ python test.py
Is sentense bad: False
Is sentense bad: True
于 2013-07-23T09:05:13.267 回答