说我们有10x10像素(作为坐标),我们想绘制数据。 在使用10x10之前,我开始使用3x3。该项目的要点是说我们有坐标(1,2),我们从这一点开始。我想将坐标设置为字典。然后我用了两个循环。我的代码在下面
我收到错误keyerror:0
文件“ /home/caglar/temp.py”,第6行,在 如果dict [i]!= j:
KeyError:0
dict={1:3,2:1,3:1}
xarr=[]
yarr=[]
for i in range(0,3):
for j in range(0,3):
if dict[i]!=j:
xarr.append("") and yarr.append("")
j+=1
else:
xarr[i].append("*") and yarr[j].append("*")
i+=1
print(xarr)
答案 0 :(得分:0)
您的字典dict={1:3,2:1,3:1}
具有键1
,2
,3
。但是,您使用dict[i] != j
访问它。 i in range(0,3)
的意思是“循环遍历一系列i
值,这些值从0开始到在之前 3结束。因此它将通过0
,1
,2
。这意味着,当它尝试访问字典中的键0
时,找不到它,因此引发KeyError,表明它找不到0
。
与您的问题无关,您那里还有一些不太奇怪的代码行:
for i in range(0,3)
遍历i
的值,因此您不必每次都执行i += 1
。在您的代码i += 1
和j += 1
中实际上什么也没做。and
是布尔运算符。它评估两边的布尔语句,并告诉您两者是否为真。几乎所有内容都可以解释为布尔值语句,因此不会引发错误。但是,当您执行xarr.append("") and yarr.append("")
时,是在告诉它评估每个附加项,将它们解释为布尔值,然后返回xarr.append("") and yarr.append(")
的布尔值。为了简单地做这两个事情,您可以将每个表达式放在自己的行上:xarr.append("")
yarr.append("")
xarr.append("")
将一个空字符串附加到xarr
数组中。如果您从xarr = []
开始,然后再进行xarr.append("")
,则最终会得到[""]
。如果再次执行此操作,则会得到["", ""]
,依此类推。当您执行xarr[i].append("*")
时,是说“访问xarr
中的第i个项目,然后将"*"
附加到该项目中”。但是,由于xarr
中的项目不是数组,因此您无法追加到它们,因此会出错。