Python读取用户输入姓名生成序号键字典时所有值相同问题排查
代码问题诊断与修复
问题原因
你代码的错误来自构建字典的双重嵌套循环逻辑冗余且错误:
外层循环遍历序号i时,内层会完整遍历所有已存储的姓名,每一轮外层循环都会反复覆盖Stu_Rec[i]的值,最终所有键对应的值都会被覆盖为最后一个输入的姓名,因此输出全是Ravana。
同时你不需要额外定义Names列表存储姓名,输入时可以直接存入字典,减少不必要的内存占用。
修复方案
最简修改版(无需单独存储姓名列表)
def details(): Stu_Rec = {} print("Enter the Id :\n") Id = int(input()) for i in range(Id): print("\nEnter the Name ") Name = input() Stu_Rec[i] = Name return Stu_Rec if __name__ == "__main__": Details = details() print(Details)
保留姓名列表的修改版
如果你后续需要用到所有姓名的列表,只需把原来的双重循环替换为单层循环即可:
def details(): Stu_Rec = {} Names = list() print("Enter the Id :\n") Id = int(input()) for i in range(0,Id): print("\nEnter the Name ") Name = input() Names.append(Name) # 替换原双重循环 for i in range(Id): Stu_Rec[i] = Names[i] return Stu_Rec if __name__ == "__main__": Details = details() print(Details)
以上两种修改方式运行后,都可以得到你期望的{0: 'Rama', 1: 'Sita', 2: 'Ravana'}输出结果。
内容的提问来源于stack exchange,提问作者SUBARAM RAM
相关产品推荐
相关产品推荐

