Словарь для цикла для скоринга слова - PullRequest
1 голос
/ 31 октября 2019

Я создаю программу для игры в скрэббл. Для части, которая оценивает слово, он использует словарь со значениями буквы Эрудит:

letter_val = {" ": 0, "a": "1", "b": 3, "c": 3, "d": 2, "e": 1, "f": 4, "g": 2, "h": 4, "i": 1, "j": 8, "k": 5, "l": 1, "m": 3, "n": 1, "o": 1, "p": 3, "q": 10, "r": 1, "s": 1, "t": 1, "u": 1, "v": 4, "w": 4, "x": 8, "y": 4, "z": 10}

Он принимает слово в качестве ввода и проходит по нему со словарем, присваивая сумму значению. Я пробовал что-то вроде:

value = sum(letter_val[i.lower() for i in word])

или просто:

value = letter_val[i.lower() for i in word

Должен ли я сделать целое для цикла или есть что-то, что я пропускаю в том, как яя делаю это?

1 Ответ

1 голос
/ 31 октября 2019

Когда вы перебираете строку / список в строке, он возвращает массив.

>>> x = "many"
>>> y = [i for i in x]
>>> y
['m', 'a', 'n', 'y']

При поиске значения в словаре это делается так же, как доступ к списку на основе индекса.

>>> a = {"x": 1, "y": 2, "z": 3}
>>> b = a["x"]
>>> b
1

В вашем случае вы объединяете оба вышеперечисленных. Итак, во-первых, составьте список из баллов, эквивалентных буквам в слове

>>> letter_val = {" ": 0, "a": 1, "b": 3, "c": 3, "d": 2, "e": 1, "f": 4, "g": 2, "h": 4, "i": 1, "j": 8, "k": 5, "l": 1, "m": 3, "n": 1, "o": 1, "p": 3, "q": 10, "r": 1, "s": 1, "t": 1, "u": 1, "v": 4, "w": 4, "x": 8, "y": 4, "z": 10}
>>> word = "abc"
>>> scores = [letter_val[i] for i in word]
>>> scores
[1, 3, 3]

Затем найдите сумму значений списка

>>> value = sum(scores)
>>> value
7
Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...