@irina_leifijtijhiodu

Создание словаря с помощью цикла в 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
  • Вопрос задан
  • 11584 просмотра
Решения вопроса 1
@slikkness
new_dict = {}
for z in range(1, 21):
    new_dict[z] = z ** 2
print(new_dict)
Ответ написан
Комментировать
Пригласить эксперта
Ответы на вопрос 5
@Drill
the_dict = {x:x*x for x in range(1,21)}
Ответ написан
@FlashBoy
У тебя очень сложное построение кода друг мой, вот так было бы удобнее:
dict = []
for a in range(21):
    dict.append(f'{a}:{a**2}')
print(dict)
Ответ написан
shurshur
@shurshur
Сисадмин, просто сисадмин...
new_dict = dict(zip(range(1,21),[x*x for x in range(1,21)]))
Ответ написан
Комментировать
@vsenafokse
Лучше всего тебе поможет разобраться визуализатор python. Там код выполняется пошагово и ты видешь на каком шаге твоя программа работает не правильно.
Вот ссылка клик

Вкратце, в цикле for у тебя 20 итераций. И внутри цикла каждую итерацию у тебя перезаписывается новый словарь new_dict. Поэтому на выходе ты получаешь словарь с двумя ключами с последний итерации.
Нужно создание словаря вынести перед циклом for
Ответ написан
Комментировать
Stierlitz007
@Stierlitz007
Хоть и годом спустя, но в реальности все решалось методом удаления лишнего)
new_dict = {}
for z in range(20):
y = z + 1
new_dict.update({y : y**2})
print(new_dict)

P.S. А вообще конечно лучше использовать генератор словарей.
Ответ написан
Комментировать
Ваш ответ на вопрос

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

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