остаток при делении равен одному

есть задача:

На колесе рулетки карманы пронумерованы от 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 шт):

Автор решения: MBo

Условия неполные, не описан промежуток от 11 до 18.

А в коде 19 подпадает под условие

elif (11 <= a <= 19) and a % 2 == 1:
    print("черный")
→ Ссылка
Автор решения: Zhihar
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:
→ Ссылка
Автор решения: xmikex

Если затраты памяти не считать критичными, то можно примерно так сделать. Смысла множество проверок делать особого нет.

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]])
→ Ссылка