остаток при делении равен одному
есть задача:
На колесе рулетки карманы пронумерованы от 0 до 36. Ниже приведены цвета карманов:
- карман 0 зеленый;
- для карманов с 1 по 10 карманы с нечетным номером имеют красный цвет, карманы с четным номером – черный;
- для карманов с 19 по 28 карманы с нечетным номером имеют красный цвет, карманы с четным номером – черный;
- для карманов с 29 по 36 карманы с нечетным номером имеют черный цвет, карманы с четным номером – красный.
Напишите программу, которая считывает номер кармана и показывает, является ли этот карман зеленым, красным или черным. Программа должна вывести сообщение об ошибке, если пользователь вводит число, которое лежит вне диапазона от 0 до 36.
Написал следующим образом:
a = int(input())
if a == 0:
print("зеленый")
elif (1 <= a <= 10) and a % 2 == 1:
print("красный")
elif (1 <= a <= 10) and a % 2 == 0:
print("черный")
elif (11 <= a <= 19) and a % 2 == 1:
print("черный")
elif (11 <= a <= 19) and a % 2 == 0:
print("красный")
elif (19 <= a <= 28) and a % 2 == 1:
print("красный")
elif (19 <= a <= 28) and a % 2 == 0:
print("черный")
elif (29 <= a <= 36) and a % 2 == 1:
print("черный")
elif (29 <= a <= 36) and a % 2 == 0:
print("красный")
else:
print("ошибка ввода")
при вводе 19 выводится "черный", но должно выводится "красный". т.к. 19 остаток при на 2 = 1.
где может быть ошибка?
Ответы (3 шт):
Условия неполные, не описан промежуток от 11 до 18.
А в коде 19 подпадает под условие
elif (11 <= a <= 19) and a % 2 == 1:
print("черный")
elif (11 <= a <= 19) and a % 2 == 1:
print("черный")
elif (11 <= a <= 19) and a % 2 == 0:
print("красный")
elif (19 <= a <= 28) and a % 2 == 1:
print("красный")
elif (19 <= a <= 28) and a % 2 == 0:
у вас проходит первая проверка вместо второй
так что надо или так:
elif (11 <= a < 19) and a % 2 == 1:
print("черный")
elif (11 <= a < 19) and a % 2 == 0:
print("красный")
elif (19 <= a < 29) and a % 2 == 1:
print("красный")
elif (19 <= a < 29) and a % 2 == 0:
или так:
elif (11 <= a <= 18) and a % 2 == 1:
print("черный")
elif (11 <= a <= 18) and a % 2 == 0:
print("красный")
elif (19 <= a <= 28) and a % 2 == 1:
print("красный")
elif (19 <= a <= 28) and a % 2 == 0:
Если затраты памяти не считать критичными, то можно примерно так сделать. Смысла множество проверок делать особого нет.
from enum import Enum
class Color(Enum):
RED = 1
BLACK = 2
GREEN = 3
red = Color.RED
black = Color.BLACK
green = Color.GREEN
rulet = [green]+[red,black]*5+[black]+[red,black]*4+[black]+[red,black]*4+[black,red]*4
dictcol = {Color.RED:'красный',Color.BLACK:'черный',Color.GREEN:"зеленый"}
i = int(input())
if(i<0 or i>36):
print("Ошибка - недопустимый ввод")
else:
print(dictcol[rulet[i]])