如何取出列表中字典的值并进行比对?python
a=[{'x':2,'y':4},{'x':5,'y':6},{'x':7,'y':8},{'x':4,'y':4}]foritemina:print(a[item]['...
a = [{'x': 2, 'y': 4}, {'x': 5, 'y': 6}, {'x': 7, 'y': 8}, {'x': 4, 'y': 4}]for item in a: print(a[item]['x'])#随便写了一个例子,遍历列表中的字典元素,但是报错了,索引不能是字典类型我做了一个贪吃蛇小游戏,游戏中用列表中带字典的方式存储了每一节贪吃蛇的坐标位置,现在def了一个新函数随机画出贪吃蛇吃的食物,但是我不想画在贪吃蛇的身上。所以想要遍历出贪吃蛇的坐标位置,并和随机生成的坐标对比,如果相同就重新取值,不相同的时候输出,这里的重新取值如何做到?这是两个问题,请看清楚
展开
1个回答
展开全部
按照你的要求,遍历贪吃蛇的坐标位置,并和随机生成的坐标对比,如果相同就重新取值,不相同的时候输出的Python程序如下
import random
map_width=30
map_height=30
a = [{'x': 2, 'y': 4}, {'x': 5, 'y': 6}, {'x': 7, 'y': 8}, {'x': 4, 'y': 4}]
random_x=random.randint(3,map_width-8)
random_y=random.randint(3,map_height-8)
flag=True
for i in range(len(a)):
if random_x==a[i]['x'] and random_y==a[i]['y']:
flag==False
break
if flag==True:
print("random_x=%d,random_y=%d"%(random_x,random_y))
else:
random_x=random.randint(3,map_width-8)
random_y=random.randint(3,map_height-8)
源代码(注意源代码的缩进)
更多追问追答
追问
不好意思之前把这个事情给忘记了
你这样的二分之结构还是简单了,有漏洞,如果重新取的随机值又和字典里的坐标重复了呢,break以后应该重新判断;
追答
是的,在重新取的随机值与字典里的坐标重复时,我没有重新循环,现改进如下
import random
map_width=30
map_height=30
a = [{'x': 2, 'y': 4}, {'x': 5, 'y': 6}, {'x': 7, 'y': 8}, {'x': 4, 'y': 4}]
random_x=random.randint(3,map_width-8)
random_y=random.randint(3,map_height-8)
while True:
flag=True
for i in range(len(a)):
if random_x==a[i]['x'] and random_y==a[i]['y']:
flag==False
break
if flag==True:
print("random_x=%d,random_y=%d"%(random_x,random_y))
break
else:
random_x=random.randint(3,map_width-8)
random_y=random.randint(3,map_height-8)
源代码(注意源代码的缩进)
推荐律师服务:
若未解决您的问题,请您详细描述您的问题,通过百度律临进行免费专业咨询