创建一个程序,通过使用列表中的键 returns 得分
Creating a program that returns a score by using a key on a list
我基本上是在尝试读取一个 txt 文件,删除所有不在字母表 (A-Z) 中的符号和标点符号,然后生成一个输出,列出文件中带有分数的所有单词旁边。为了获得分数,我试图将单词的每个字母与一个键进行比较。这把钥匙代表了这封信的价值。通过将给定单词的所有字母值相加,我将得到该单词的总分。
alphakey = {'a': 5, 'b': 7, 'c': 4, 'd': 3, 'e': 7, 'f': 3,
'g': 3, 'h': 5, 'i': 2, 'j': 2, 'k': 1, 'l': 2,
'm': 6, 'n': 3, 'o': 1, 'p': 2, 'q': 1, 'r': 4,
's': 3, 't': 7, 'u': 5, 'v': 5, 'w': 2, 'x': 1,
'y': 2, 'z': 9}
这是我目前所掌握的,但我完全卡住了。
with open("hunger_games.txt") as p:
text = p.read()
text = text.lower()
text = text.split()
new = []
for word in text:
if word.isalpha() == False:
new.append(word[:-1])
else:
new.append(word)
class TotalScore():
def score():
total = 0
for word in new:
for letter in word:
total += alphakey[letter]
return total
我想得到类似的东西:
you 5
by 4
cool 10
ect.. 列表中的所有单词。在此先感谢您的帮助。
我建议您使用 nltk 进行文本操作。
这是我的解决方案(你可以缩小一些代码块,我只是让它在视觉上更容易理解)。
基本上你将文本拆分成单词列表,然后我们可以使用 set() 函数删除所有重复项,然后我们遍历所有单词计算分数。我希望代码很清楚。
import nltk
alphakey = {'a': 5, 'b': 7, 'c': 4, 'd': 3, 'e': 7, 'f': 3,
'g': 3, 'h': 5, 'i': 2, 'j': 2, 'k': 1, 'l': 2,
'm': 6, 'n': 3, 'o': 1, 'p': 2, 'q': 1, 'r': 4,
's': 3, 't': 7, 'u': 5, 'v': 5, 'w': 2, 'x': 1,
'y': 2, 'z': 9}
text = """
boy girl girl boy dog Dog car cAr dog girl you by cool 123asd .asd; 12asd
"""
words = []
results = {}
sentences = nltk.sent_tokenize(text)
for sentence in sentences:
words += nltk.word_tokenize(sentence)
words = list(set([word.lower() for word in words]))
for word in words:
if word.isalpha():
total = 0
for letter in word:
total += alphakey[letter]
results[word] = total
for val in results:
print(f"{val} {results[val]}")
输出:
dog 7
you 8
by 9
boy 10
cool 8
car 13
girl 11
是否必须删除标点符号?还是您这样做是为了匹配字典的键?如果您不介意保留标点符号,那么只需几行即可解决此问题:
alphakey = {'a': 5, 'b': 7, 'c': 4, 'd': 3, 'e': 7, 'f': 3,
'g': 3, 'h': 5, 'i': 2, 'j': 2, 'k': 1, 'l': 2,
'm': 6, 'n': 3, 'o': 1, 'p': 2, 'q': 1, 'r': 4,
's': 3, 't': 7, 'u': 5, 'v': 5, 'w': 2, 'x': 1,
'y': 2, 'z': 9}
with open("hunger_games.txt") as p:
text = p.read()
text = text.lower()
words = text.split()
uniqueWords = {}
for word in words:
if not word in uniqueWords:
uniqueWords[word] = sum([alphakey[letter] for letter in word if letter.isalpha()])
print(uniqueWords)
最后一行可能需要一些解释。首发
[alphakey[letter] for letter in word if letter.isalpha()]
是一个叫做 "list comprehension" 的例子。它们是 Python 的一个非常有用的功能,可以让我们在一行中创建整个列表。我刚刚列出的那个将遍历 "word" 中的每个字母,如果它是按字母顺序排列的,它将 return 来自 "alpha key" 的值。例如,如果单词是:
"hello"
它将 return 列表:
[5, 7, 2, 2, 1]
如果单词是:
"w4h&t"
列表理解会忽略“4”和“&”以及return列表:
[2, 5, 7]
为了将这些转化为单个值,我们将理解包装在 sum
函数中。所以单词 "hello" 的最终值为 17,"w4h&t".
的最终值为 14
正如评论中指出的那样,您不需要为此设置 class 并且您的 return 未缩进,否则我认为您的 score
函数确实你需要什么来计算总分。
如果您需要每个单词的分数,您可以(再次)使用字典来存储这些:
def word_score(word):
return sum(alphakey[l] for l in word)
def text_scores(filename):
with open(filename) as p:
text = p.read()
text = re.sub(r'[^a-zA-Z ]', '', text.lower())
return {w: word_score(w) for w in text.split()}
print(text_scores("hunger_games.txt"))
如果 hunger_games.txt 包含 "you by cool",则打印:
{'you': 8, 'by': 9, 'cool': 8}
我基本上是在尝试读取一个 txt 文件,删除所有不在字母表 (A-Z) 中的符号和标点符号,然后生成一个输出,列出文件中带有分数的所有单词旁边。为了获得分数,我试图将单词的每个字母与一个键进行比较。这把钥匙代表了这封信的价值。通过将给定单词的所有字母值相加,我将得到该单词的总分。
alphakey = {'a': 5, 'b': 7, 'c': 4, 'd': 3, 'e': 7, 'f': 3,
'g': 3, 'h': 5, 'i': 2, 'j': 2, 'k': 1, 'l': 2,
'm': 6, 'n': 3, 'o': 1, 'p': 2, 'q': 1, 'r': 4,
's': 3, 't': 7, 'u': 5, 'v': 5, 'w': 2, 'x': 1,
'y': 2, 'z': 9}
这是我目前所掌握的,但我完全卡住了。
with open("hunger_games.txt") as p:
text = p.read()
text = text.lower()
text = text.split()
new = []
for word in text:
if word.isalpha() == False:
new.append(word[:-1])
else:
new.append(word)
class TotalScore():
def score():
total = 0
for word in new:
for letter in word:
total += alphakey[letter]
return total
我想得到类似的东西:
you 5
by 4
cool 10
ect.. 列表中的所有单词。在此先感谢您的帮助。
我建议您使用 nltk 进行文本操作。 这是我的解决方案(你可以缩小一些代码块,我只是让它在视觉上更容易理解)。
基本上你将文本拆分成单词列表,然后我们可以使用 set() 函数删除所有重复项,然后我们遍历所有单词计算分数。我希望代码很清楚。
import nltk
alphakey = {'a': 5, 'b': 7, 'c': 4, 'd': 3, 'e': 7, 'f': 3,
'g': 3, 'h': 5, 'i': 2, 'j': 2, 'k': 1, 'l': 2,
'm': 6, 'n': 3, 'o': 1, 'p': 2, 'q': 1, 'r': 4,
's': 3, 't': 7, 'u': 5, 'v': 5, 'w': 2, 'x': 1,
'y': 2, 'z': 9}
text = """
boy girl girl boy dog Dog car cAr dog girl you by cool 123asd .asd; 12asd
"""
words = []
results = {}
sentences = nltk.sent_tokenize(text)
for sentence in sentences:
words += nltk.word_tokenize(sentence)
words = list(set([word.lower() for word in words]))
for word in words:
if word.isalpha():
total = 0
for letter in word:
total += alphakey[letter]
results[word] = total
for val in results:
print(f"{val} {results[val]}")
输出:
dog 7
you 8
by 9
boy 10
cool 8
car 13
girl 11
是否必须删除标点符号?还是您这样做是为了匹配字典的键?如果您不介意保留标点符号,那么只需几行即可解决此问题:
alphakey = {'a': 5, 'b': 7, 'c': 4, 'd': 3, 'e': 7, 'f': 3,
'g': 3, 'h': 5, 'i': 2, 'j': 2, 'k': 1, 'l': 2,
'm': 6, 'n': 3, 'o': 1, 'p': 2, 'q': 1, 'r': 4,
's': 3, 't': 7, 'u': 5, 'v': 5, 'w': 2, 'x': 1,
'y': 2, 'z': 9}
with open("hunger_games.txt") as p:
text = p.read()
text = text.lower()
words = text.split()
uniqueWords = {}
for word in words:
if not word in uniqueWords:
uniqueWords[word] = sum([alphakey[letter] for letter in word if letter.isalpha()])
print(uniqueWords)
最后一行可能需要一些解释。首发
[alphakey[letter] for letter in word if letter.isalpha()]
是一个叫做 "list comprehension" 的例子。它们是 Python 的一个非常有用的功能,可以让我们在一行中创建整个列表。我刚刚列出的那个将遍历 "word" 中的每个字母,如果它是按字母顺序排列的,它将 return 来自 "alpha key" 的值。例如,如果单词是:
"hello"
它将 return 列表:
[5, 7, 2, 2, 1]
如果单词是:
"w4h&t"
列表理解会忽略“4”和“&”以及return列表:
[2, 5, 7]
为了将这些转化为单个值,我们将理解包装在 sum
函数中。所以单词 "hello" 的最终值为 17,"w4h&t".
正如评论中指出的那样,您不需要为此设置 class 并且您的 return 未缩进,否则我认为您的 score
函数确实你需要什么来计算总分。
如果您需要每个单词的分数,您可以(再次)使用字典来存储这些:
def word_score(word):
return sum(alphakey[l] for l in word)
def text_scores(filename):
with open(filename) as p:
text = p.read()
text = re.sub(r'[^a-zA-Z ]', '', text.lower())
return {w: word_score(w) for w in text.split()}
print(text_scores("hunger_games.txt"))
如果 hunger_games.txt 包含 "you by cool",则打印:
{'you': 8, 'by': 9, 'cool': 8}