如何以数学方式修改字典中的值对?二维坐标元组修改疑问
搞懂你的坐标修改问题!
为啥你的坐标是元组?
你看哦,你代码里写的d[i]=(random.randrange(-250,251),random.randrange(-250,251)),用**圆括号()**把两个整数包起来了——在Python里,这种用圆括号(甚至有时候不用括号,直接a=1,2)包裹的多个元素就是元组。虽然randrange返回的是整数,但把它们凑成(x,y)的形式后,就变成了不可变的元组类型啦。
元组最关键的特点就是不能改里面的元素,所以你尝试d[0][0] = ...这种操作,本质是想修改元组里的第一个值,Python肯定不允许。你说的“追加操作”其实是误解——要是你写d[0] = d[0] + (10,),那确实会把两个元组拼起来,但你写的d[0][0]=d[0][0]+[10]其实直接会报错,因为整数和列表根本不能相加。
怎么用数学方式修改字典里的坐标?
因为元组不能直接改,所以我们得换个思路,要么生成新的元组替换原来的,要么一开始就用可变的列表存坐标,给你两种实用方法:
方法1:生成新元组替换
取出原坐标的x和y,计算后重新拼成新元组,再赋值给字典对应的键就行:
import random d={} num_points=8 def find_rand_points(num_points): for i in range(num_points): d[i]=(random.randrange(-250,251),random.randrange(-250,251)) find_rand_points(num_points) # 给第一个点的x坐标加10 old_x, old_y = d[0] d[0] = (old_x + 10, old_y) # 要是想同时改x和y,就写d[0] = (old_x + 10, old_y - 5)
方法2:改用列表存坐标
如果你需要经常修改坐标,不如一开始就用列表(方括号[])来存,列表是可变的,能直接改元素:
import random d={} num_points=8 def find_rand_points(num_points): for i in range(num_points): # 用方括号生成列表,代替原来的圆括号 d[i]=[random.randrange(-250,251),random.randrange(-250,251)] find_rand_points(num_points) # 直接给第一个点的x坐标加10 d[0][0] += 10 # 修改y坐标也一样方便 d[0][1] -= 5
顺便提下你代码里的小问题
你写的d[0][0]=d[0][0]+[10]有两个坑:
- 元组的元素本来就不能被重新赋值,这是元组的特性;
d[0][0]是整数,[10]是列表,整数和列表没法直接相加,会触发TypeError哦。
内容的提问来源于stack exchange,提问作者fakedane
相关产品推荐
相关产品推荐

