После того как значения выбраны, необходимо произвести проверку, и если среди значений есть ‘blank’, то есть “пустой” цвет, переопределять остальные значения цветов на ‘blank’.
import random
#Данные
colors_one = [('brown', 1), ('black', 1), ('green',1),
('blue', 0), ('gray', 0), ('blank', 1)]
colors_two = [('white', 0), ('black', 2), ('gray', 3),
('green', 1), ('yellow', 0), ('red', 1),
('blank', 0)]
class define_color:
#Выбирает два случайных цвета из массива, сравнивает их
#индексы и присваивает переменной main_color тот
#признак у которого индекс выше.
def __init__(self, seq):
#Описываем переменные
self.sequence = seq
self.choice_one = random.choice(self.sequence)
self.choice_two = random.choice(self.sequence)
self.main_color = 'N/A'
#Сравниваем
if self.choice_one[1] > self.choice_two[1]:
self.main_color = self.choice_one[0]
if self.choice_one[1] < self.choice_two[1]:
self.main_color = self.choice_two[0]
if self.choice_one[1] == self.choice_two[1]:
self.main_color = self.choice_one[0]
#Создаем несколько экземпляров класса для тестирования
color_one = define_color(colors_one)
color_two = define_color(colors_two)
#Поскольку некоторые значения хранятся не как атрибут класса
#а как обычные переменные, создаем обычные переменные
color_three = "N/A"
color_four = "blank"
#Выводим отладочную информацию
#До переопределния
print("Unchanged values")
print("color one", color_one.main_color)
print("color two", color_two.main_color)
print("color three", color_three)
print("color four", color_four)
#Начинаем проверку на вхождение "blank"
#Создаем массив куда помещаем значения переменных и атрибутов класса
color_list = [color_one.main_color, color_two.main_color,
color_three, color_four]
#Cчетчик для цикла
col_counter = len(color_list) - 1
#Перебираем значения хранящиеся в массиве и если видим хоть один пустой цвет
#переопределяем остальные цвета на пустой (blank).
if "blank" in color_list:
while col_counter != 0:
color_list[col_counter] = "blank"
col_counter = col_counter - 1
#Просто разделитель
print('-----------------------------------')
#Выводим отладочную информацию
#После переопределния
print("Changed values")
print("color one", color_one.main_color)
print("color two", color_two.main_color)
print("color three", color_three)
print("color four", color_four)
Насколько я понимаю, проблема в том, что в массиве color_list хранятся копии переменных, а не сами переменные хранящиеся в color_one.main_color, color_four и т.д. Соответственно, цикл присваивает значения blank именно этим копиям, что само собой, никак не влияет на исходные значения переменных, хранящихся в color_one.main_color, color_two.main_color и т.д. Верна ли моя догадка? Возможно ли, сделать так, что бы значения присваивались не копиям, а самим переменным?
Очень полезна была бы функция, которая позволяет получить порядковый номер элемента массива, по его значению. Вроде бы раньше в питоне, что то такое было?
Я не придумал ничего лучше, кроме как обращаться к переменным напрямую.
if "blank" in color_list:
color_one.main_color = 'blank'
color_two.main_color = 'blank'
color_three = 'blank'
color_four = 'blank'