gpt4 book ai didi

python - 字典未正确填充

转载 作者:行者123 更新时间:2023-12-01 05:38:21 25 4
gpt4 key购买 nike

我的代码遇到了一个我无法解决的问题。

根据以下代码部分:

Generate_Game_World类中创建第二个字典(worldmap)后,总部位置存储在

self.worldmap[HQLOCATIONX,HQLOCATIONY]["Region_Type"] = "HQ"

但是,这样做后,似乎用“HQ”值填充了整个数组,如测试窗口中所示。我根本不明白为什么会发生这种情况。

import pygame
from tkinter import *

test = Tk ()
test.geometry = ("640x480")

pygame.init()

WORLDSIZE = 499
HQLOCATIONX = int(WORLDSIZE/2)
HQLOCATIONY = int(WORLDSIZE/2)

class Generate_Game_World ():

regionData = {"Region_Type" : "None",
"Region_Level" : 0}

def __init__(self, mapSize):
self.mapSize = mapSize

def main (self):
# creates 2d map
self.worldmap = {(x,y) : self.regionData for x in range(self.mapSize) for y in range (self.mapSize)}

# Sets the HQ to worldmap(249,249)
self.worldmap[HQLOCATIONX,HQLOCATIONY]["Region_Type"] = "HQ"

# checks worldmap(0,0) --> (10,10) for its Region Type
for x in range (10):
for y in range (10):
label = Label (text=self.worldmap[x,y]["Region_Type"]).grid(row = x, column=y)

class Game (object):
def main (self, screen):
gameworld = Generate_Game_World(WORLDSIZE)
gameworld.main()

while 1:

for event in pygame.event.get():
if event.type == pygame.QUIT:
return

if event.type == pygame.KEYDOWN and event.key == pygame.K_ESCAPE:
return

test.mainloop()
pygame.display.flip()

if __name__ == "__main__":
screen = pygame.display.set_mode((1024, 768))
Game().main(screen)

最佳答案

所有字典值都是对 one 类属性 regionData 的引用。

您想要创建副本:

self.worldmap = {(x,y): self.regionData.copy() for x in range(self.mapSize) for y in range (self.mapSize)}

这使用 dict.copy() method创建一个浅拷贝;这已经足够了,因为 Generate_Game_World.regionData 的值只是字符串,并且这些值是不可变的,因此可以安全地共享。

您还可以使用字典文字从头开始创建新字典;您似乎没有在其他任何地方使用 self.regionData 因此内联是可能的:

self.worldmap = {(x,y): {"Region_Type" : "None", "Region_Level" : 0} 
for x in range(self.mapSize) for y in range (self.mapSize)}

最后但并非最不重要的一点是,您是否打算使用 None 单例而不是字符串 "None"

关于python - 字典未正确填充,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/18293665/

25 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com