Python中随机坐标移动逻辑的嵌套If语句与For循环简化咨询
嵌套If语句简化方案
核心思路
通过坐标-偏移映射表替换多分支判断逻辑,将坐标对应的约束参数和业务逻辑解耦,后续新增坐标仅需补充映射规则,无需修改判断分支,代码可维护性大幅提升。
注:原有代码存在逻辑错误:
random_xy_start == perimeter_list[3:7]无法正确判断坐标是否属于该切片范围,需使用in关键字判断,该问题在优化方案中已自动规避。
实现代码
import random # 预定义顶部坐标列表 global_top_coords = [ [5, 190], [97, 190], [188, 190], [279, 190], [370, 190], [462, 190], [553, 190], [644, 190], [750, 190] ] perimeter_list = global_top_coords # 坐标偏移映射表定义:key为坐标转成的元组(列表为可变类型不可做字典key),value为对应可选x偏移、y偏移 coord_offset_map = {} # 公共y偏移提前定义复用,避免重复声明 COMMON_Y_OFFSET = (75, 100, 125) # 批量为同规则坐标配置偏移参数 # 索引0、1的顶部左侧坐标规则 for coord in perimeter_list[0:2]: coord_offset_map[tuple(coord)] = ( (75, 100, 125, 150), COMMON_Y_OFFSET ) # 索引2到6的顶部中间坐标规则 for coord in perimeter_list[2:7]: coord_offset_map[tuple(coord)] = ( (-150, -125, -100, -75, 75, 100, 125, 150), COMMON_Y_OFFSET ) # 索引7的顶部次右侧坐标规则 coord_offset_map[tuple(perimeter_list[7])] = ( (-150, -125, -100, -75, 75), COMMON_Y_OFFSET ) # 索引8的顶部最右侧坐标规则 coord_offset_map[tuple(perimeter_list[8])] = ( (-150, -125, -100, -75), COMMON_Y_OFFSET ) # 业务逻辑实现 random_xy_start = random.choice(perimeter_list) x_optional, y_optional = coord_offset_map[tuple(random_xy_start)] xy_rel = (random.choice(x_optional), random.choice(y_optional))
扩展说明
后续新增左侧、右侧、底部等边界坐标时,仅需两步操作即可完成配置:
- 将新坐标加入
perimeter_list - 按照坐标所属的规则分组,批量在
coord_offset_map中添加对应偏移参数即可,无需新增任何判断分支
内容的提问来源于stack exchange,提问作者Jared McCallister
相关产品推荐
相关产品推荐

