Проблема с логикой визуализации данных случайных чисел - PullRequest
0 голосов
/ 14 октября 2018

, поэтому я недавно узнал о визуализации данных после просмотра классного видео Numberphile, я хотел сделать свою маленькую визуализацию данных со случайными числами.Идея состоит в том, что у меня есть список случайных целых чисел, и, основываясь на числе, я рисую другой цветной круг.Цветовой ключ объясняется в приведенном ниже коде.

Однако у меня, похоже, возникла логическая проблема с моим кодом.Код работает без ошибок, но на основании того, что я описал ранее, моя программа не работает должным образом.Во-первых, в моем списке 10 целых чисел, но в программе нарисовано только 6.Кроме того, окраска немного не в порядке.Любая помощь приветствуется, спасибо.

import pygame
pygame.init()

## COLOR KEY
 # 0 - Black
 # 1 - White
 # 2 - Red
 # 3 - Orange
 # 4 - Yellow
 # 5 - Green
 # 6 - Blue
 # 7 - Indigo
 # 8 - Violet
 # 9 - dark blue

display_width = 1000
display_height = 500
display = pygame.display.set_mode((display_width,display_height))

black = 0,0,0
white = 255,255,255
red = 255,0,0
orange = 255,165,0
yellow = 255,255,0
green = 0,255,0
blue = 0,0,255
indigo = 29,0,51
violet = 128,0,128
darkblue = 0,200,0

random_list = [9,8,5,9,4,7,5,1,9,0]
def programLoop():
    exitProgram = False
    while not exitProgram:

        for evt in pygame.event.get():
            if evt.type == pygame.QUIT:
                pygame.quit()
                quit()

        startN = 100

        display.fill(white)
        for n in random_list:
            color = black
            if random_list[n] == 0:
                color = black

            if random_list[n] == 1:
                color = white

            if random_list[n] == 2:
                color = red

            if random_list[n] == 3:
                color = orange

            if random_list[n] == 4:
                color = yellow

            if random_list[n] == 5:
                color = green

            if random_list[n] == 6:
                color = blue

            if random_list[n] == 7:
                color = indigo

            if random_list[n] == 8:
                color = violet

            if random_list[n] == 9:
                color = darkblue

            pygame.draw.circle(display,color,[n * 50 + startN,250],10)

        pygame.display.update()

programLoop()

1 Ответ

0 голосов
/ 14 октября 2018

Первым шагом для отладки программы будет печать n, color, n*50 + startN.Вы увидите, что вы перебираете индексы в random_list, а не в диапазоне, как вы ожидаете.Итак, первое число - 9, вы проверяете if random_list[9] == 0, это True, и оно устанавливает color = black и отображает его на 550.

Вы можете перебрать диапазон for n in range(len(random_list)):, чтобы решить эту проблему.


Я предлагаю поместить цвета в список или словарь и просто перебрать перечисленные random_list.Затем вы одновременно получаете номер n и индекс цвета и можете просто получить доступ к цвету следующим образом: color = colors[color_index].

Обновленный код:

darkblue = 0,0,200  # Your darkblue was green.
# Put the colors into a list.
colors = [black, white, red, orange, yellow, green, blue, indigo, violet, darkblue]
random_list = [9,8,5,9,4,7,5,1,9,0]

def programLoop():
    clock = pygame.time.Clock()  # A clock to limit the frame rate.
    exitProgram = False
    while not exitProgram:
        for evt in pygame.event.get():
            if evt.type == pygame.QUIT:
                exitProgram = True

        startN = 100

        display.fill((200, 200, 200))
        # Now enumerate the list, so that you'll get n and the color index
        # at the same time.
        for n, color_index in enumerate(random_list):
            color = colors[color_index]
            pygame.draw.circle(display, color, [n*50 + startN, 250], 10)

        pygame.display.update()
        clock.tick(60)  # Limit the frame rate to 60 FPS.

programLoop()
pygame.quit()
Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...