I
I
irina_leifijtijhiodu2021-07-14 23:39:59
Python
irina_leifijtijhiodu, 2021-07-14 23:39:59

Creating a dictionary with a loop in python, what's wrong?

Good afternoon!

I need to create a dictionary using a loop or a function so that this dictionary has keys from the numbers from 1 to 20, and the values ​​​​should be the squares of the keys.

My code:
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

On the output is:
{20: 400, 21: 441}

I don’t understand why z is not equated alternately with numbers from 1 to 20 and new values ​​​​are not added to the cycle, why the cycle did not stop when the value z = 21
It seems that everything should be like this:
{1: 1, 2:4, 3:9, 4:16 ... } etc up to 20:400

Answer the question

In order to leave comments, you need to log in

5 answer(s)
S
slikkness, 2021-07-15
@irina_leifijtijhiodu

new_dict = {}
for z in range(1, 21):
    new_dict[z] = z ** 2
print(new_dict)

D
Drill, 2021-07-15
@Drill

the_dict = {x:x*x for x in range(1,21)}

F
FlashBoy, 2021-07-15
@FlashBoy

У тебя очень сложное построение кода друг мой, вот так было бы удобнее:

dict = []
for a in range(21):
    dict.append(f'{a}:{a**2}')
print(dict)

S
shurshur, 2021-07-15
@shurshur

new_dict = dict(zip(range(1,21),[x*x for x in range(1,21)]))

V
vsenafokse, 2021-07-15
@vsenafokse

Лучше всего тебе поможет разобраться визуализатор python. Там код выполняется пошагово и ты видешь на каком шаге твоя программа работает не правильно.
Вот ссылка клик
Вкратце, в цикле for у тебя 20 итераций. И внутри цикла каждую итерацию у тебя перезаписывается новый словарь new_dict. Поэтому на выходе ты получаешь словарь с двумя ключами с последний итерации.
Нужно создание словаря вынести перед циклом for

Didn't find what you were looking for?

Ask your question

Ask a Question

731 491 924 answers to any question