Python If语句之后不执行For循环

Python If语句之后不执行For循环,python,if-statement,for-loop,coordinates,jython,Python,If Statement,For Loop,Coordinates,Jython,我想在jython画一张脸 我使用的是If-not-Elif语句,所以每种颜色都会被覆盖,我会一层一层地构建一张脸 def face(): pic=makeEmptyPicture(400,400) for x in range (400): for y in range (400): px = getPixel(pic,x,y) setColor(px, makeColor(43, 170, 214)) #face if ((

我想在jython画一张脸

我使用的是If-not-Elif语句,所以每种颜色都会被覆盖,我会一层一层地构建一张脸

def face():
  pic=makeEmptyPicture(400,400)

  for x in range (400):
    for y in range (400):
      px = getPixel(pic,x,y)
      setColor(px, makeColor(43, 170, 214))
      #face
      if (( pow((x-200),2)+pow((y-200),2))<pow(200,2)):
        setColor(px, makeColor (255, 214, 153))
      #eyes
      if( ((pow((x-100),2)+pow((y-160),2))<pow(50,2)) or ((pow((x-290),2)+pow((y-145),2))<pow(60,2)) ):
        setColor(px,makeColor(255,255,255))
      #iris
      if( ((pow((x-100),2)+pow((y-163),2))<pow(20,2)) or ((pow((x-295),2)+pow((y-135),2))<pow(22,2)) ):
        setColor(px,makeColor(54, 123, 220))
      #pupil
      if( ((pow((x-100),2)+pow((y-165),2))<pow(10,2)) or ((pow((x-295),2)+pow((y-137),2))<pow(11,2)) ):
        setColor(px,makeColor(0,0,0))
      #nose
      if( ((pow((x-209),2)+pow((y-245),2))<pow(13,2)) or ((pow((x-191),2)+pow((y-250),2))<pow(12,2)) ):
        setColor(px,makeColor(255, 198, 114))
      #mouth
      for y in range (337,311):
        x = (y-337)*(247-181)/(311-337) +181
        setColor(px,makeColor(254, 114, 115))

  return (pic)

我做错了什么?

您需要将-1作为第三个参数传递给
range

演示:

>>> range(10, 5)
[]
>>> range(10, 5, -1)
[10, 9, 8, 7, 6]
for y in range (337, 311, -1):            #311 is not inclusive
     x = (y-337)*(247-181)/(311-337) +181
     setColor(px,makeColor(254, 114, 115))
代码:

>>> range(10, 5)
[]
>>> range(10, 5, -1)
[10, 9, 8, 7, 6]
for y in range (337, 311, -1):            #311 is not inclusive
     x = (y-337)*(247-181)/(311-337) +181
     setColor(px,makeColor(254, 114, 115))

如果要向后运行某个范围,则需要提供
-1
步骤

例如:

pax> python
Python 2.7.3 (default, Jan  2 2013, 16:53:07) 
[GCC 4.7.2] on linux2
Type "help", "copyright", "credits" or "license" for more information.
>>> print range (50,40)
[]
>>> print range (50,40,-1)
[50, 49, 48, 47, 46, 45, 44, 43, 42, 41]
>>> 
如果没有负阶跃,范围将永远不会开始,因为已经传递了结束值

因此,在您的特定情况下,您需要:

for y in range (337,311,-1):
   x = (y-337)*(247-181)/(311-337) +181
   setColor(px,makeColor(254, 114, 115))
然而,你这样做的方式也不是。。。我称之为效率典范——这是我所能做到的最圆滑的:——)

你正在为你处理的160000像素中的每一个绘制整个嘴巴。你可能想考虑一些不太原始的绘图函数,比如线和圆,沿着下面的线:

  • 画一个蓝色的大正方形
  • 在脸上画一个粉红色的大圆圈
  • 画两个外眼的白色圆圈
  • 为内眼画两个蓝色圆圈
  • 为虹膜画两个黑色圆圈
  • 在鼻子上画两个橘黄色的圆圈
  • 在嘴上画一条紫色的线

我想这会比根据一系列规则单独设置每个像素更有效率。

一个程序员和一个艺术家!嘿,斯基皮,很高兴你找到了另一个问题的解决方案,干杯!好的,我也很高兴见到你。希望你天气好,干杯:)斯塔克交换区非常有趣。我不知道有这样的地方存在(我不经常出去,但当我出去的时候,我会让它有价值。)。现在,你已经“挑出了我的大脑/好奇心”;-)我相信你们/每个人都会听到我(咧嘴一笑)的消息,当然,这是一个好消息。我们已经进入夏季,所以我们是下一个!哦,好吧,至少今年,我不必再劈柴/堆柴了,也不必铲雪了,至少。。。不管怎么说,都不是前些年的4-6英尺。