Надо создать цветовой микшер. Python
Красный, синий и желтый называются основными цветами, потому что их нельзя получить путем смешения других цветов. При смешивании двух основных цветов получается вторичный цвет:
если смешать красный и синий, то получится фиолетовый;
если смешать красный и желтый, то получится оранжевый;
если смешать синий и желтый, то получится зеленый.
Напишите программу, которая считывает названия двух основных цветов для смешивания. Если пользователь вводит что-нибудь помимо названий «красный», «синий» или «желтый», то программа должна вывести сообщение об ошибке. В противном случае программа должна вывести название вторичного цвета, который получится в результате.
Формат входных данных На вход программе подаются две строки, каждая на отдельной строке.
Формат выходных данных Программа должна вывести полученный цвет смешения либо сообщение «ошибка цвета», если введён был не цвет.
Примечание 1. Если смешать красный и красный, то получится красный и т.д.
Примечание 2. Поиграйтесь с настоящим цветовым микшером ?
Мой код:
a, b = input(), input()
if a != 'красный', a !='желтый', a !='синий':
print('ошибка цвета')
elif b != 'красный', b !='желтый', b !='синий':
print('ошибка цвета')
elif a == 'красный' and b == 'синий' or b == 'красный' and a == 'синий':
print('фиолетовый')
elif a == 'красный' and b == 'желтый' or b == 'красный' and a == 'желтый':
print('оранжевый')
elif a == 'синий' and b == 'желтый' or b == 'синий' and a == 'желтый':
print('зеленый')
elif a =='красный' and b =='красный':
print('красный')
elif a =='синий' and b =='синий':
print('синий')
elif a =='желтый' and b =='желтый':
print('желтый')
Вопрос. Что не так в моем коде? Прошу дать развернутый ответ.
Ответы (4 шт):
Первые две ветви if-else никуда не годятся, т.к. условия в них почему-то разделяются запятыми, а не and.
if a != 'красный' and a !='желтый' and a !='синий':
print('ошибка цвета')
elif b != 'красный' and b !='желтый' and b !='синий':
print('ошибка цвета')
А вообще можно просто создать список этих цветов и сразу же проверять включение строки в этот список — так можно сократить код без потери читаемости:
colors = ['красный', 'синий', 'желтый']
if a not in colors or b not in colors:
print('Хотя бы одна из строк не является цветом!')
В дополнение к ответу @4500zenja:
Последние 6 строк избыточны - лучше просто:
elif a == b:
print(a)
И, полагаю, среднюю часть можно заменить на арифметически вычисляемый цвет, путем введения двух словарей, например.
Поскольку это какое-то учебное задание, ответ должен состоять в объяснении, а не в коде, который можно скопипастить. Итак, что с кодом не так. Сначала про ошибку. Наверное в первых двух условиях вы хотели поставить «and», а не запятые?
Далее, чтобы не перебирать условия с цветами, как сделано у вас, наверное можно поставить каждому цвету в соответствие двоичный разряд (например, пусть красному соответствует 1, жёлтому - 2, синему - 4, и формировать код итогового цвета через логическое ИЛИ. То есть, к примеру, если у нас жёлтый и синий цвета (всё равно в каком порядке), то код жёлтого — 2, код синего — 4, выполнив логическую операцию ИЛИ, то есть, 2 | 4, в результате мы получим 6, это будет кодом зелёного цвета.
В частности, можно сделать словарь, где поставить в соответствии цвету битовый разряд, например:
color_codes = { 'красный': 1, 'желтый': 2, 'синий': 4 }
И, для обратного преобразования, из кодов смешанных цветов в названия:
code_to_color = { 1: 'красный', 2: 'желтый', 3: 'оранжевый', 4: 'синий', 5: 'фиолетовый', 6: 'зеленый' }
Тогда код цвета мы получим, например, так:
code = color_codes[a] | color_codes[b]
И, далее, из него получим итоговый цвет:
color = code_to_color[code]
И, если у нас будет словарь color_codes описанного выше вида, то проверять переменные a и b на соответствие цвету можно по наличию соответствующего ключа в словаре, например, проверяя, выполняются ли условия вида: a in color_codes.keys() (ну или a not in color_codes.keys()).
color1 = input("Введите 1 цвет: ")
color2 = input("Введите 2 цвет: ")
if color1 != "красный" and color1 != "синий" and color1 != "желтый":
print("Используйте другой 1 цвет: красный, синий или желтый")
elif color2 != "красный" and color2 != "синий" and color2 != "желтый":
print("Используйте другой 2 цвет: красный, синий или желтый")
elif color1 == "красный" and color2 == "синий" or color2 == "красный" and color1 == "синий":
print("Получится фиолетовый")
elif color1 == "красный" and color2 == "желтый" or color2 == "красный" and color1 == "желтый":
print("Получится оранжевый")
elif color1 == "синий" and color2 == "желтый" or color2 == "синий" and color1 == "желтый":
print("Получится зеленый")
else:
print('Получится', color1)