2

I am relatively new to the Python language and was wondering if there was a more efficient way of declaring multiple variables. I am declaring a lot of random numbers in order to make randomly placed and color triangles.

from time import sleep
from graphics import *
from random import randint

def main():
    win = GraphWin("Wow!", 500, 500)
    win.setBackground("black")
    for i in range(1,100):
        rand = randint(0,500)
        rand1 = randint(0,500)
        rand2 = randint(0,500)
        rand3 = randint(0,500)
        rand4 = randint(0,500)
        rand5 = randint(0,500)
        randR = randint(0,255) 
        randG = randint(0,255)
        randB = randint(0,255)
        p = Polygon(Point(rand,rand1), Point(rand2,rand3), Point(rand4,rand5)).draw(win)
        p.setFill(color_rgb(randR, randG, randB))
        Circle(Point(100,100), i).draw(win).setFill('blue')
        if i > 60:
            Circle(Point(200,400), (i-50)).draw(win).setFill('red')
        if i > 30:
            Circle(Point(400,130), (i-30)).draw(win).setFill('green')
        time.sleep(.03)
    win.getMouse()
    win.close()

main()

The variables in question are all of the random number variables (rand).

I would also be interested to know how this could be done in other languages or if there is a common method that is cross-language.

Luke Floden
  • 101
  • 1
  • 7
  • See the Python tutorial: [Lists](https://docs.python.org/2/tutorial/introduction.html#lists) and [Data Structures](https://docs.python.org/2/tutorial/datastructures.html) – Peter Wood Nov 23 '16 at 00:40
  • You don't actually need all those variables - since they're used only once each, you could simply put the ``randint()`` call at each point of use. – jasonharper Nov 23 '16 at 00:51

1 Answers1

1

Use lists:

rand_nums = [randint(0, 500) for i in range(6)] # 6 random numbers
rand_rgb = [randint(0, 255) for i in range(3)] # 3 random rgb-range numbers
p = Polygon(Point(rand_nums[0], rand_nums[1]), Point(rand_nums[2], rand_nums[3]), Point(rand_nums[4], rand_nums[5])).draw(win)
...

and so on.

Uriel
  • 15,579
  • 6
  • 25
  • 46