Доступ к словарю во время цикла? - PullRequest
0 голосов
/ 12 февраля 2019

Этот код предназначен для добавления оценки на основе букв, содержащихся в слове, указанном в качестве аргумента:

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

def scrabble_score(word):
  word = word.lower()
  n=0
  scorer=0
  while n<=len(word):
    scorer = scorer + score[word[n]]
    n+=1
  return scorer

игнорировать любые другие синтаксические ошибки, которые я мог допустить.

Ответы [ 3 ]

0 голосов
/ 12 февраля 2019

Ваш код правильный.Тем не менее, две вещи, связанные со стилем

В Python строки являются итеративными символами, поэтому

scorer = 0

for letter in word.lower():
    scorer += score[letter]

Даже лучше использовать понимание списка

scorer = sum([score[letter] for letter in word.lower()])
0 голосов
/ 12 февраля 2019

while n<=len(word): выбросит Индекс за пределы

вам нужно while n<len(word)

Рабочая копия вашей существующей функции

def scrabble_score(word):
    word = word.lower()
    n=0
    scorer=0
    while n<len(word):
        scorer += score[word[n]]
        n+=1
    return scorer

Как указали другиегораздо более понятным подходом было бы перебирать символы слова, а не индексы

def scrabble_score(word):
    word = word.lower()
    scorer=0
    for char in word:
        scorer += score[char]
    return scorer
0 голосов
/ 12 февраля 2019

Итерация непосредственно по выводу word.lower(), а не по индексам.Кроме того, вы можете использовать функцию sum для вычисления суммы всех поисков в словаре.

def scrabble_score(word):
    return sum(score[c] for c in word.lower())

Менее лаконичная версия, придерживающаяся духа вашего исходного кода, все равно будет повторяться по wordнапрямую.

def scrabble_score(word):
    scorer = 0
    for c in word.lower():
        scorer = scorer + score[c]  # or scorer += score[c]
    return scorer
Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...