Создание словаря с помощью цикла в python, в чем ошибка?
Добрый день!
Мне нужно создать словарь при помощи цикла или функции чтобы в этом словаре были ключи из чисел от 1 до 20, а значения должны быть квадратами ключей.
Мой код:
for z in range(1, 21):
new_dict = {z : z**2 }
y = z + 1
new_dict.update({y : y**2})
if z == 21:
break
new_dict
На выходе получается:
{20: 400, 21: 441}
Не понимаю почему z не приравнивается поочередно числам от 1 до 20 и не добавляются новые значения в цикл, почему при значении z = 21 цикл не прекратился
Вроде все должно быть так:
{1: 1, 2: 4, 3: 9, 4: 16 ... } и т д до 20: 400
У тебя вообще нет понятия о коде...
1. Никогда не используй зарезервированные слова в качестве имен пременных. ( dict )
2. На выходе у тебя список, а не словарь.
3. Элементы списка - строки, а не числа.
4. Это печально...
Drill, 1. Кроме тестовых вариантов *
2. А автор я так понимаю не разумный? Не может сам подставить нужные скобки?
3. Что мешает перевести посредством str()?
4. Твой ответ в 1 строку более непонятен и неудобен в написании.
FlashBoy,
1. в любом варианте
2, 3. Зачем тогда писать ответ, в котором все даже близко не подходит к теме вопроса?
3. Что тебе помешало это сделать? Раз уж ты пишешь ответ, на который, возможно, кто-то будет ориентироваться, почему не написать сразу правильно?
4.
Твой ответ в 1 строку более непонятен и неудобен в написании.
Для людей, далеких от пайтона - возможно.
Это стандартный dict comprehension. Почитай уже документацию, что-ли. PEP 274 -- Dict Comprehensions
Лучше всего тебе поможет разобраться визуализатор python. Там код выполняется пошагово и ты видешь на каком шаге твоя программа работает не правильно.
Вот ссылка клик
Вкратце, в цикле for у тебя 20 итераций. И внутри цикла каждую итерацию у тебя перезаписывается новый словарь new_dict. Поэтому на выходе ты получаешь словарь с двумя ключами с последний итерации.
Нужно создание словаря вынести перед циклом for
Хоть и годом спустя, но в реальности все решалось методом удаления лишнего)
new_dict = {}
for z in range(20):
y = z + 1
new_dict.update({y : y**2})
print(new_dict)
P.S. А вообще конечно лучше использовать генератор словарей.