2016-12-04 6 views
0

Я написал программу, которая извлекает случайный набор координат/цветов из списка и рисует круг в графическом окне. Я хочу, чтобы останавливал рисование кругов, как только каждый набор координат/цветов был нарисован хотя бы один раз. Я также хочу документировать, сколько раз использовалось каждое из 9 возможных наборов координат/цветов. Я инициализировал счетчик count = [0, 0, 0, 0, 0, 0, 0, 0, 0], который я хочу печатать каждый раз, когда нарисован новый круг, добавленный с количеством раз, когда каждое состояние было использовано. Советы по тому, как это сделать?Счетчик в Python

Пример вывода в оболочке:

count = [1, 0, 0, 0, 0, 0, 0, 0, 0] 
count = [2, 0, 0, 0, 0, 0, 0, 0, 0] 
count = [2, 1, 0, 0, 0, 0, 0, 0, 0] 
count = [2, 1, 0, 0, 1, 0, 0, 0, 0] 
count = [2, 1, 1, 0, 1, 0, 0, 0, 0] 
count = [2, 1, 1, 0, 1, 0, 0, 0, 1] 
count = [2, 1, 1, 0, 1, 0, 1, 0, 1] 
count = [2, 1, 1, 0, 1, 0, 1, 1, 1] 
count = [2, 1, 1, 1, 1, 0, 1, 1, 1] 
count = [2, 1, 1, 1, 1, 1, 1, 1, 1] 

Пожалуйста и спасибо заранее!

import random, turtle 

wn = turtle.Screen() 

alex = turtle.Turtle() 
alex.pensize(3) 
alex.color("black") 


def turtle_draw(): 
    '''draws a circle with given coordinates and in a 
given color, prints a counter.''' 

    color, place = random_state_finder() 
    alex.pu() 
    alex.goto(place) 
    alex.shape("circle") 
    alex.shapesize(3) 
    alex.fillcolor(color) 

    count = [0, 0, 0, 0, 0, 0, 0, 0, 0] 
    wn.ontimer(turtle_draw, 250) 

def random_state_finder(): 
    '''randomly generates a state number from 0 to 8 
and assigns the state's data to color and place.''' 

    rng = random.Random() 
    state_num = rng.randrange(0, 8) 

    L = [((-150, 150), "red"), ((0, 150), "orange"), 
       ((150, 150), "yellow"), ((-150, 0), "green"), 
       ((0, 0), "blue"), ((150, 0), "violet"), 
       ((-150, -150), "cyan"), ((0, -150), "magenta"), 
       ((-150, -150), "purple")] 

    random_state = L[state_num] 

    color = random_state[1] 
    place = random_state[0] 

    return color, place 

turtle_draw() 
+0

Для начала, необходимо обновлять 'count' каждый раз при выборе состояния; для этого его нельзя просто определить локально для 'turtle_draw'. –

ответ

0

В некотором смысле это проще, чем вы это делаете. Ключ random.shuffle() - просто смешайте список состояний, после чего один за другим переходите через перетасованный список. Усложнение Вашего count списка, который означает, что мы на самом деле сделать список индексов в список состояний и перетасовать список индексов, в результате чего список нетронутых исходные состояний:

from turtle import Turtle, Screen 
from random import shuffle 

states = [((-150, 150), "red"), ((0, 150), "orange"), \ 
    ((150, 150), "yellow"), ((-150, 0), "green"), \ 
    ((0, 0), "blue"), ((150, 0), "violet"), \ 
    ((-150, -150), "cyan"), ((0, -150), "magenta"), \ 
    ((-150, -150), "purple")] 

def turtle_draw(): 
    ''' 
    draws a circle with given coordinates 
    and in a given color, prints a counter. 
    ''' 

    index = indexes.pop() 

    place, color = states[index] 
    alex.goto(place) 
    alex.fillcolor(color) 

    counts[index] += 1 
    print(counts) 

    if indexes: 
     screen.ontimer(turtle_draw, 250) 

counts = [0 for state in states] 

indexes = [i for i, state in enumerate(states)] # could also use list(range(len(states))) 

shuffle(indexes) 

screen = Screen() 

alex = Turtle(shape="circle", visible=False) 
alex.shapesize(3) 
alex.penup() 
alex.color("white") # don't want to see alex until first state 
alex.showturtle() 

turtle_draw() 

screen.exitonclick() 

терминального выход

> python3 test.py 
[0, 0, 1, 0, 0, 0, 0, 0, 0] 
[0, 0, 1, 1, 0, 0, 0, 0, 0] 
[0, 0, 1, 1, 0, 0, 0, 1, 0] 
[1, 0, 1, 1, 0, 0, 0, 1, 0] 
[1, 0, 1, 1, 0, 0, 0, 1, 1] 
[1, 0, 1, 1, 0, 1, 0, 1, 1] 
[1, 0, 1, 1, 0, 1, 1, 1, 1] 
[1, 1, 1, 1, 0, 1, 1, 1, 1] 
[1, 1, 1, 1, 1, 1, 1, 1, 1] 
> 

 Смежные вопросы

  • Нет связанных вопросов^_^