Знаки препинания должны быть удалены?Или вы делаете это, чтобы вы могли сопоставить ключи словаря?Если у вас все в порядке с пунктуацией, то это можно решить в несколько строк:
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()]
- это пример того, что называется «списком».Это очень полезная функция Python, которая позволяет нам создавать весь список в одну строку.Тот, который я только что перечислил, будет проходить через каждую букву в «слове» и, если он алфавитный, будет возвращать значение из «альфа-ключа».Например, если слово было:
"hello"
, оно вернуло бы список:
[5, 7, 2, 2, 1]
Если бы слово было:
"w4h&t"
, понимание списка игнорировалось бы«4» и «&» и возвращаем список:
[2, 5, 7]
Чтобы превратить их в одно значение, мы заключаем в понимание функцию sum
.Таким образом, окончательное значение 17 для слова "привет" и 14 для "w4h & t".