Processing代码从Java转Python时for循环运行报错问题求解
错误原因
- 核心触发报错的原因是误用Python
range()函数语法:Java的for循环支持在循环结构内直接写变量递增逻辑,但Python的range()仅接受三个位置参数range(起始值, 终止值, 步长),你在range的参数中写x = x + width/2时,变量x还未完成初始化就被引用,直接触发UnboundLocalError。 - 额外存在两处逻辑/语法问题:第二个循环的
range参数同样误用了赋值表达式,且原Java代码中用到的全局变量dim没有在Python版本的setup()中定义。
修复方案
- 提前声明全局变量
dim,在setup()中完成赋值和原Java逻辑对齐 - 修正两个for循环的
range参数为符合Python语法的格式,步长直接传入对应数值,注意Pythonrange仅接受整数参数,用整除运算//直接得到整数更便捷 - 修正
drawGradient中的半径取值,和原Java逻辑对齐为dim/2
修复后完整代码:
dim = 0 def setup(): global dim size(800, 800) dim = width // 2 background(0) colorMode(HSB, 360, 100, 100) noStroke() ellipseMode(RADIUS) frameRate(1) def draw(): global dim background(0) for x in range(0, width + 1, dim): drawGradient(x, height / 2) def drawGradient(a, b): global dim radius = dim // 2 h = random(0, 360) for r in range(radius, 0, -1): fill(h, 90, 90) ellipse(a, b, r, r) h = (h + 1) % 360
内容的提问来源于stack exchange,提问作者MATH ASKER
相关产品推荐
相关产品推荐

