我在程序中尝试做的是让程序打开一个包含许多不同单词的文件。
接收用户输入并检查文件中的任何单词是否在用户输入中。
文件 redflags.txt :
happy
angry
ball
jump
不同行上的每个单词。
例如,如果用户输入为"Hey I am a ball"
,则会打印红色标记。
如果用户输入为"Hey this is a sphere"
,则它将打印noflag。
Redflags = open("redflags.txt")
data = Redflags.read()
text_post = raw_input("Enter text you wish to analyse")
words = text_post.split() and text_post.lower()
if data in words:
print("redflag")
else:
print("noflag")
答案 0 :(得分:1)
这应该可以做到!集合通常比列表比较的查找快得多。集合可以告诉你这种情况下的交集(重叠的单词),差异等。我们使用包含单词列表的文件,删除换行符,小写,我们有第一个列表。第二个列表是根据用户输入创建的,并按间距分割。现在我们可以执行我们的集合交集以查看是否存在任何常用单词。
# read in the words and create list of words with each word on newline
# replace newline chars and lowercase
words = [word.replace('\n', '').lower() for word in open('filepath_to_word_list.txt', 'r').readlines()]
# collect user input and lowercase and split into list
user_input = raw_input('Please enter your words').lower().split()
# use set intersection to find if common words exist and print redflag
if set(words).intersection(set(user_input)):
print('redflag')
else:
print('noflag')
答案 1 :(得分:1)
with open('redflags.txt', 'r') as f:
# See this post: https://stackoverflow.com/a/20756176/1141389
file_words = f.read().splitlines()
# get the user's words, lower case them all, then split
user_words = raw_input('Please enter your words').lower().split()
# use sets to find if any user_words are in file_words
if set(file_words).intersection(set(user_words)):
print('redflag')
else:
print('noredflag')
答案 2 :(得分:0)
我建议您使用列表推导
看一下你想要的代码(我将在下面解释):
Redflags = open("redflags.txt")
data = Redflags.readlines()
data = [d.strip() for d in data]
text_post = input("Enter text you wish to analyse:")
text_post = text_post.split()
fin_list = [i for i in data if i in text_post]
if (fin_list):
print("RedFlag")
else:
print("NoFlag")
输出1:
Enter text you wish to analyse:i am sad
NoFlag
输出2:
Enter text you wish to analyse:i am angry
RedFlag
首先打开文件并使用readlines()
读取它们,这会给出文件
>>> data = Redflags.readlines()
['happy\n', 'angry \n', 'ball \n', 'jump\n']
查看所有不需要的空格,换行符(\ n)使用strip()
删除它们!但你不能strip()
列表。因此,从列表中取出单个项目,然后应用strip()
。这可以使用列表推导来有效地完成。
data = [d.strip() for d in data]
你为什么使用raw_input()
在Python3中使用 input()
。
获取并分割input
文字后。
fin_list = [i for i in data if i in text_post]
我正在创建一个项目列表,其中i
列表中的data
(每个项目)在text_pos
列表中也。所以这样我就得到了两个列表中的常用项目。
>>> fin_list
['angry'] #if my input is "i am angry"
注意:在python中,空列表被视为false
,
>>> bool([])
False
有价值的人被视为 True ,
>>> bool(['some','values'])
True
这样,如果list非空,则执行if。 含义仅当在两个列表中找到某些常用项时,才会打印“RedFlag”。你得到了你想要的东西。