首页 > 解决方案 > 将 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”

标签: javapythonprocessing

解决方案


阅读有关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

推荐阅读