@Idwln

В чем ошибка KeyError1?

Всем привет! Можете объяснить почему мне выдаётся ошибка KeyError: 1 в данном коде:
def First(l,val):
    val += dict[l]

value = 0
dict = {
    "1" : 3,
    "2" : 3,
    '3' : 5,
    '4' : 4,
    '5' : 4,
    '6' : 3,
    '7' : 5,
    '8' : 5,
    '9' : 4,
    '10' : 3,
    '11' : 6,
    '12' : 6,
    '13' : 8
}
i = 0
for x in range(1,1001):
    line = list(str(x))
    if x <= 13:
        First(x,value)
print(value)


P.s Если кто то задался вопросом что это такое вообще, то я решаю 17 задачу Эйлера, а именно: Сколько букв понадобится для записи всех чисел от 1 до 1000 (one thousand) включительно?
Возможно я использую не лучшие проверки, но в словаре я опишу все исключения при счёте на английском.

P.s(2) И если не трудно объясните пожалуйста как я могу вызвать value в функции, не передавая туда ещё 1 значение? Если значение не передаётся, то вызывается ошибка. Знаю только про global перед переменной, но толком до конца и не понял ключ ли это к решению(похожих функций будет 3, поэтому возможно global и есть решение?). Если есть другие варианты, напишите пожалуйста
  • Вопрос задан
  • 364 просмотра
Решения вопроса 1
AlexNest
@AlexNest Куратор тега Python
Работаю с Python/Django
Касательно первого вопроса намекну - внимательнее посмотрите на тип ключей в словаре и тип X с помощью которого вы пытаетесь получить значение из словаря.
Касательно второго вопроса - я не очень понимаю, зачем плодить сущности. Как минимум в текущем случае куда разумнее удалить функцию и выполнять кусок кода из нее прямо в цикле.
Ответ написан
Пригласить эксперта
Ответы на вопрос 1
Dr_Elvis
@Dr_Elvis Куратор тега Python
В гугле забанен
Во-первых: перестаньте называть переменные зарезервированными словами, такими как dict
Во-вторых: функция First ничего не возвращает, а значит она отработает(если отработает) и всё
В-третьих: line = list(str(x)) x - это число из range(1,1001), вы преобразуете его в строку, а потом в список из единственного значения. в итоге у вас в line будет что-то вроде ['123']. далее вы никак не используете эту переменную. отсюда вопрос - зачем?
В-четвертых: i = 0 нигде не используется - зачем оно?
В-пятых: First(x,value) - так как value вы объявляете в начале равным нулю, а потом нигде его не изменяете, то оно всегда будет равняться нулю. Так же тут вы запускаете функцию, но не получаете результат(что описал во втором пункте).

ну и в print(value), при условии что код выполнится до конца, всегда выведет 0
Ответ написан
Комментировать
Ваш ответ на вопрос

Войдите, чтобы написать ответ

Войти через центр авторизации
Похожие вопросы