使用list元素作为addRectFilled的颜色

时间:2014-08-05 00:48:19

标签: jython jes

以下代码是在JES中创建的,它使用JES内置函数:makeEmptyPicture(),requestInteger(),addRectFilled。否则代码是自包含的。 它返回错误"最后输入不是颜色"。
c [n]似乎是个问题。 有人可以解释一下原因吗?

barChart=makeEmptyPicture(500,500)
bars=[0]

c = ["red","orange","yellow","green","blue","magenta","black","gray"]

nbars=requestInteger("How many bars")
for n in range(nbars):
  bars.append(requestInteger("Enter Bar Value"))

for n in range(len(bars)):
  addRectFilled(barChart ,(30+n*30) , 500-bars[n] , 20 , bars[n] ,c[n])

show(barChart)

试过一个变种:

addRectFilled(barChart ,(30+n*30) , 500-bars[n] , 20 , bars[n] ,c[2])

引发相同的错误

干杯

保罗格林伍德

2 个答案:

答案 0 :(得分:0)

我认为问题在于c[n]用于从名为c的数组中选择颜色,但有时n的值太大。那么,你正在使用c[n]作为函数的输入

addRectFilled(barChart ,(30+n*30) , 500-bars[n] , 20 , bars[n] ,c[n])

但如果n太大,那么最后一个输入值将为null。您可能需要考虑模数之类的东西,以便循环显示颜色。

数组中的颜色值也是字符串而不是颜色。您可以通过删除引号将它们变成颜色。

答案 1 :(得分:0)

从颜色[]列表中删除了引号 使用模数循环颜色

barChart = makeEmptyPicture(500,500)
bars=[]
colors = [red,orange,yellow,green,blue,magenta,black,gray]

nbars=requestInteger("How many bars")
for n in range(nbars):
  bars.append(requestInteger("Enter Bar Value " +str(n+1)))

for n in range(len(bars)):
  barColor = colors[(n)%8]
  addRectFilled(barChart ,(10+n*30) , 500-bars[n] , 20 , bars[n] ,barColor)
show(barChart)