For循环和append方法合用

本文介绍了在开发中如何结合使用for循环和append方法来动态创建布局。重点讨论了如何通过for循环和append方法的组合,处理复杂的布局问题,特别是解决中间横纵交错的元素追加。通过示例代码展示了如何通过外层循环和内层循环来实现预期的布局效果,强调了布局设计在使用append方法前的重要性。

摘要生成于 C知道 ,由 DeepSeek-R1 满血版支持, 前往体验 >

开发工具与关键技术: Vs、For循环和append方法合用
作者:木有窝的鸟~小通
撰写时间:2019年7月15日

针对append追加元素来说,一般运用于设置布局,而更多的是append的运用也比较广泛,对于一些简单的div布局,它可能仅限于元素的父元素后边的追加其他子元素(元素的父布局后边的追加其他子布局),而这种单独的使用方式也比较单一。Append()方法呢,它可以运用循环体中,其实它还可以的在里面嵌套子循环,其原因它本身可能就是一种可以不停的追加元素的,再加上for循环之后可能效果又不一样。
首先,使用Append()方法得对自个的布局进行思考,很多时候布局影响一切,它能按原先的布局下指定操作你想要的次数,关键如果其中的布局错乱导致后边的追加造成布局零散,形成不必的错误。
我的见解就是首要针对布局下手,一个好的开头必须一个好的布局。我们对DIV可都是非常熟悉的一种元素,那么可以通过这种元素写append的产生的布局效果。Div中其实呢可以说是一种容器,通过div可以各种各样的布局,当然写布局还可以用其他的元素来塑造,写法也是多种多样。下面就是用div写出来的样式:
在这里插入图片描述
上面的布局其实可分为3种,一种是竖的,其余两种其实是横的。按正常分析,用append方法来写,其实竖的追加是比较容易写。而横的话,那可能是第一横最上边的也可能比较容易写的布局。而正当你写完边上的布局和最上边的布局的时候,可能这时候写中间的布局就可能会比较复杂了,通过单一的for循环又或者说通过多次的for循环效果都不一样。
中间写法用一次循环体写的代码也可能比较单一,上边下边都可能写成这样,如下显示:
在这里插入图片描述
那么对于这种样式错乱,也可能只会在一行中最后面追加元素。我们可以换一种思路想一想,中间部分横

import py5 import random import math from shapely.geometry import Polygon class Building: def __init__(self, x, y, length, width, angle): self.x = x self.y = y self.length = length self.width = width self.angle = angle self.update_polygon() def update_polygon(self): """更新建筑的几何形状(考虑旋转)""" half_l = self.length / 2 half_w = self.width / 2 corners = [ (-half_l, -half_w), (half_l, -half_w), (half_l, half_w), (-half_l, half_w) ] rotated = [] cos_a = math.cos(self.angle) sin_a = math.sin(self.angle) for x, y in corners: # 应用旋转矩阵 rx = x * cos_a - y * sin_a ry = x * sin_a + y * cos_a rotated.append((rx + self.x, ry + self.y)) self.polygon = Polygon(rotated) def draw(self): """绘制建筑""" py5.push_matrix() py5.translate(self.x, self.y) py5.rotate(self.angle) py5.fill(128) py5.rect(0, 0, self.length, self.width) py5.pop_matrix() buildings = [] def setup(): py5.size(800, 800) py5.rect_mode(py5.CENTER) generate_buildings() def generate_buildings(): """生成40个符合要求的建筑""" global buildings buildings = [] existing_points = [] while len(buildings) < 200: # 生成候选点 x = random.uniform(30, 770) y = random.uniform(30, 770) valid = True # 检查边界条件 if x < 30 or x > 770 or y < 30 or y > 770: continue # 检查与其他点的距离 for px, py in existing_points: if py5.dist(x, y, px, py) < 30: valid = False break if valid: angle = random.uniform(-py5.PI / 2, py5.PI / 2) buildings.append(Building(x, y, random.randint(20, 40), random.randint(10, 30), angle)) existing_points.append((x, y)) def draw(): py5.background(255) for b in buildings: b.draw() def mouse_clicked(): if py5.mouse_button == py5.LEFT: new_angles = [] # 计算每个建筑的新角度 for b in buildings: neighbors = [] for other in buildings: if b is other: continue # 使用Shapely计算多边形距离 if b.polygon.distance(other.polygon) <= 80: neighbors.append(other.angle) # 计算平均角度(如果没有邻居保持原角度) avg = sum(neighbors) / len(neighbors) if neighbors else b.angle new_angles.append(avg) # 更新所有建筑角度 for i, b in enumerate(buildings): b.angle = new_angles[i] b.update_polygon() py5.redraw() py5.run_sketch()在这段代码的基础上 绘制更新后的建筑时参考 tessellation = momepy.morphological_tessellation( buildings, clip=momepy.buffered_limit(buildings, buffer=50) ) 绘制更新后建筑的泰森多边形
最新发布
03-21
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值