关于python的w3w字典练习问题

关于python的w3w字典练习问题,python,dictionary,Python,Dictionary,这是其中一个练习中字典的基本问题。问题是: 编写一个Python脚本,生成并打印一个字典,其中包含一个(x,x*x)形式的数字(介于1和n之间) 这是我的代码: import random def dict_generate(): n = int(input("Please enter an integer:")) dic = {} for x in range(n): num = random.randrange(1,n)

这是其中一个练习中字典的基本问题。问题是: 编写一个Python脚本,生成并打印一个字典,其中包含一个(x,x*x)形式的数字(介于1和n之间)

这是我的代码:

import random
def dict_generate():
    n = int(input("Please enter an integer:"))
    dic = {}
    for x in range(n):
        num = random.randrange(1,n)
        key = num
        value = num*num
        dic[key] = value
    
    print(dic)

dict_generate()
然而,当我运行它时,它似乎跳过了几次迭代,因此最终的结果是我得到了一个字典,其中的值比我输入的数字小。例如,我输入了5,但不是5组键和值,我的输出是: {3:9,1:1,2:4}

通过python tutor运行此代码,问题似乎是没有将值插入字典。我似乎不明白为什么。如果有人能解释一下,那会很有帮助的,谢谢。 (我知道还有很多其他方法可以完成这个问题,但我正在努力理解我错在哪里。)

由于您将该键用作随机数,因此该键可能会反复出现相同的数字,因此您的词典中的键数少于5个


为什么要使用
num=random.randrange(1,n)
?如果使用随机数,很可能会发生这种情况……是的,很可能是某些键是相同的,因此修改了字典中的相同项。
 num = random.randrange(1,n)
 key = num