Подсветка цифр в массиве

126
19 января 2019, 11:00

У меня имеется массив чисел от 0 до 100 с повторениями. Длина массива N>100, например. Необходимо в зависимости от значения цифры изменить ее цвет.

Какие существуют изящные способы решения этой задачи без привязки к ЯП ну или с привязкой к Python?

Пусть value - это значение элемента в массиве.

Можно написать что-то типа:

def func(value):
    if value>0 and value<=10:
        color='blue'
    if value>10 and value<=20:
        color='green'
    ...
    if value>90 and value<=100:
        color='yellow'
    return color

Но такое решение кажется мне не верным и долгим.

Answer 1

Общие решение (т. к. константы LIMITS и COLORS возможно приспособить):

LIMITS = (10, 20, 30, 40, 50, 60, 70, 80, 90, 100)
COLORS = "blue green red white orange black magenta purple brown yellow".split()

def func(val):
    for limit, color in zip(LIMITS, COLORS):
        if val <= limit:
            return color
    else:
        raise ValueError

Или то-же самое с использованием словаря:

COLORS = {10: "blue",  20: "green",   30: "red",    40: "white",  50: "orange",
          60: "black", 70: "magenta", 80: "purple", 90: "brown", 100: "yellow"}

def func(val):
    for limit in COLORS:
        if val <= limit:
            return COLORS[limit]
    else:
        raise ValueError

Или - опять то-же самое - с использованием модуля enum (Питон 3.4+):

from enum import IntEnum

class Color(IntEnum):
    blue    =  10
    green   =  20
    red     =  30
    white   =  40
    orange  =  50
    black   =  60
    magenta =  70
    purple  =  80
    brown   =  90
    yellow  = 100

def func(val):
    for color, limit in Color.__members__.items():
        if val <= limit:
            return color
    else:
        raise ValueError
READ ALSO
Как передать данные между классами в Java [закрыт]

Как передать данные между классами в Java [закрыт]

Пробую писать программу на Java и столкнулся со следующей проблемой: у меня есть массив данных, который я генерирую в классе1, его нужно передать...

146
Выстроить блок в линию с переносом

Выстроить блок в линию с переносом

Как сделать, чтобы все дочерние элементы block были бы в одну строку, а если они не помещаются по ширине, то переносились бы на следующую, но не каким-то...

156
Порядок выполнения needle

Порядок выполнения needle

Помогите пожалуйста с порядком выполненияНе могу понять, как сделать порядок выполнения

159
Выход из try-catch

Выход из try-catch

Использую axios для отправки запросов во vuejs 2 в laravel 5

172