java - 将 for 循环从 JAVA 转换为 Python 处理的问题
问题描述
嘿,所以我试图在 python 中练习这个练习,但是代码只有在 java 中可用,代码如下:
void setup() {
size(640, 360);
dim = width/2;
background(0);
colorMode(HSB, 360, 100, 100);
noStroke();
ellipseMode(RADIUS);
frameRate(1);
}
void draw() {
background(0);
for (int x = 0; x <= width; x+=dim) {
drawGradient(x, height/2);
}
}
void drawGradient(float x, float y) {
int radius = dim/2;
float h = random(0, 360);
for (int r = radius; r > 0; --r) {
fill(h, 90, 90);
ellipse(x, y, r, r);
h = (h + 1) % 360;
}
}
我有以下python代码:
def setup():
size(800,800)
background(0)
colorMode(HSB, 360,100,100)
noStroke()
ellipseMode(RADIUS)
frameRate(1)
def draw():
background(0)
for x in range(0, width, x = x + width/2):
drawGradient(x, height/2)
def drawGradient(a,b):
radius = width/2
h = random(0,360)
for r in range(radius, 0, radius= radius - 1):
fill(h, 90,90)
ellipse(a,b,r,r)
h = (h+1) % 360
我收到以下错误
UnboundLocalError:分配前引用的局部变量“x”
解决方案
阅读有关range()
函数和for
-loops的信息。在 python 中,一个典型的 for 循环是:
for i in range(0, 10, 1)
print(i)
这个循环打印从 0 到 9 的数字。
您的代码的正确语法是:
def draw():
background(0)
for x in range(0, width+1, width/2):
drawGradient(x, height/2)
def drawGradient(a,b):
radius = width/4
h = random(0,360)
for r in range(radius, 0, -1):
# [...]
完整示例:
def setup():
global dim
size(640, 360)
dim = width/2
background(0);
colorMode(HSB, 360, 100, 100)
noStroke()
ellipseMode(RADIUS)
frameRate(1)
def draw():
background(0)
for x in range(0, width+1, width/2):
drawGradient(x, height/2)
def drawGradient(x, y):
radius = dim/2
h = random(0, 360)
for r in range(radius, 0, -1):
fill(h, 90, 90)
ellipse(x, y, r, r)
h = (h+1) % 360
推荐阅读
- amazon-web-services - 如何防止某人在 Amazon SES 中使用我的域——他们使用不同的电子邮件地址从我的域发送电子邮件
- postgresql - 使用 psql 连接到具有自定义数据库集群位置的 postgres
- python-3.x - Pygame 与 PathLib?
- lda - 使用前向和后向方法进行线性判别分析
- angular - 如何使用 ngx-socket-io 发送凭据?
- typescript - Typescript - 如何查找具有属性的数组,然后在该数组中添加一个数组
- discord - 当一个或多个值相同时按两个属性对级别数据进行排序
- python - main.py 无法从模块中读取函数
- mongodb - 可以通过本地主机访问 Mongo 的 Pod,但不能访问服务名称
- azure - 是否可以监控 Azure 集成运行时?