Регулярное выражение для проверки римских чисел (на Python)
Многим в детстве нравились приключенческие игры с головоломками и загадками. Найти решение было личным вызовом, а его поиски напоминали охоту за сокровищами. И когда, наконец, загадка была разгадана, ощущения были потрясающими!
Повсеместно записывать число «четыре» как «IV» стали только в XIX веке, до этого наиболее часто употреблялась запись «IIII».Регулярные выражения могут помочь ощутить тот же детский восторг. (Регулярные выражения на английском языке — regular expressions, сокращенно — regex, — прим. перев.). Их использование открывает множество возможностей. К тому же, когда читаешь регулярное выражение и понимаешь, что оно означает, — это как расшифровать египетский иероглиф, как внезапно обнаружить, что знаешь чужой язык!
На Codewars есть задачка: нужно написать функцию для конвертации римских чисел в арабские. Мы не будем разбирать решение этой задачи целиком. Вместо этого сосредоточимся на одном этапе: проверке, ввел ли пользователь валидное римское число.
Как формируются римские числа
Римские числа записываются римскими цифрами, которые вы видите в табличке:
Тысячи | Сотни | Десятки | Единицы | |
---|---|---|---|---|
1 | M | C | X | I |
2 | MM | CC | XX | II |
3 | MMM | CCC | XXX | III |
4 | CD | LX | IV | |
5 | D | L | V | |
6 | DC | LX | VI | |
7 | DCC | LXX | VII | |
8 | DCCC | LXXX | VIII | |
9 | CM | XC | IX |
Кажется, цифры для обозначения тысяч заканчиваются на [MMM], а значит, самое большое число, которое можно написать римскими цифрами, это 3999 ([MMMCMXCIX]). Для целей этой статьи и решения нашей задачи будем считать, что римские числа укладываются в диапазон от 1 до 3999. (На самом деле есть и большие числа, подробнее об этом можно почитать в Википедии, — прим. перев.).
Что нужно понимать, так это важность порядка в расположении римских цифр. Если вы поставите их не в том порядке, вы напишете неправильное или вообще нечитаемое число. Как было показано в таблице выше, число начинается с тысяч [M] 1000, затем идут сотни [D/C] 500/100, затем десятки [L/X] 50/10 и, наконец, единицы [V/I] 5/1.
Но это еще далеко не все! Цифры могут повторяться не больше трех раз подряд (например, 300 = CCC), а потом заменяются комбинацией двух цифр (400 = CD, а не CCCC). Дальше вы можете продолжать использовать C, но уже перед M, как в числе 900 (CM).
Не так-то все просто, верно?
Ладно, давайте повторим наши условия
- Римские числа — это числа в диапазоне от [I] 1 до [MMMCMXCIX] 3999
- Цифры в числе располагаются в строго определенном порядке: [M] 1000 / [D] 500 / [C] 100 / [L] 50 / [X] 10 / [V] 5 / [I] 1
- Любая отдельная цифра не может повторяться больше трех раз подряд, на четвертый раз используется уже пара цифр
- Пары цифр бывают следующие: [CM] 900 / [CD] 400 / [XC] 90 / [XL] 40 / [IX] 9 / [IV] 4
Вы замечаете, как начинает вырисовываться регулярное выражение?
Давайте переведем это в код
Мы будем использовать один очень полезный при написании регулярных выражений тег, — VERBOSE или re. ]
(CM|CD|D?C{0,3})?
= Одна пара [CM] или одна пара [CD], или [D], за которой идет от 0 до 3 символов [C]. Каждый элемент является опциональным [?], так же, как и весь блок [()?](XC|XL|L?X{0,3})?
= Одна пара [XC] или одна пара [XL] или [L], за которой идет от 0 до 3 символов [X]. Каждый элемент является опциональным [?], так же, как и весь блок [()?](IX|IV|V?I{0,3})?$
= Одна пара [IX] или одна пара [IV] или [V], за которой идет от 0 до 3 символов [I]. Каждый элемент является опциональным [?], так же, как и весь блок [()?], стоящий в конце строки [$]Протестируем наш код
Используем fstring для вызова функции и сравнения строки с паттерном:
num_valid = 'MMDCCLXXIII' num_invalid = 'CCCMMVIIVV' print(f"{num_valid} - это {'не ' if not is_roman_number(num_valid) else ''}римское число") print(f"{num_invalid} - это {'не ' if not is_roman_number(num_invalid) else ''}римское число") # Вывод: # MMDCCLXXIII - это римское число # CCCMMVIIVV - это не римское число
Не так уж и плохо! А теперь посмотрите на это и попробуйте сказать, что это не самая прекрасная вещь, которую вы видели в жизни!
^M{0,3}(CM|CD|D?C{0,3})?(XC|XL|L?X{0,3})?(IX|IV|V?I{0,3})?$'
Английский для программистов
Наш телеграм канал с тестами по английскому языку для программистов. Английский это часть карьеры программиста. Поэтому полезно заняться им уже сейчас
Подробнее
×
римские цифры — Информатика, информационные технологии
Скорее всего вы видели римские цифры, даже если вы в них не разбираетесь. Вы могли видеть их на копирайтах старых фильмов и ТВ-шоу («Copyright MCMXLVI» вместо «Copyright 1946»), или на стенах в библиотеках университетов («учреждено MDCCCLXXXVIII» вместо « учреждено 1888»). Вы могли видеть их в структуре библиографических ссылок. Эта система отображения цифр относится к древней Римской империи (отсюда и название).
В римских цифрах семь символов, которые повторяются в различных комбинациях для отображения цифр.
- I = 1
- V = 5
- X = 10
- L = 50
- C = 100
- D = 500
- M = 1000
Нижеследующие правила позволяют конструировать римские цифры:
- Иногда символы складываются. I это 1, II это 2, и III это 3. VI это 6 (посимвольно, «5 и 1»), VII это 7, и VIII это 8.
- Десятичные символы (I, X, C, и M) могут быть повторены до 3 раз. Для образования 4 вам необходимо отнять от следующего высшего символа пятёрки. Нельзя писать 4 как IIII; вместо этого, она записывается как IV («на 1 меньше 5»). 40 записывается как XL («на 10 меньше 50»), 41 как XLI, 42 как XLII, 43 как XLIII, и 44 как XLIV («на 10 меньше 50, и на 1 меньше 5»).
- Иногда символы… обратны сложению. Разместив определённые символы до других, вы вычитаете их от конечного значения. Например 9, вам необходимо отнять от следующего высшего символа десять: 8 это VIII, но 9 это IX («на 1 меньше 10»), не VIIII (так как символ I не может быть повторён 4 раза). 90 это XC, 900 это CM.
- Пятёрки не могут повторяться. 10 всегда отображается как X, никогда как VV. 100 всегда C, никогда LL.
- Римские цифры читаются слева направо, поэтому положение символа имеет большое значение. DC это 600; CD это совершенно другая цифра (400, «на 100 меньше 500»). в начале, это означает что патерн должен совпасть с полной строкой, без других символов до и после символов М.
- ? Сущность модуля re это функция search(), которая использует патерн регулярного выражения (pattern) и строку (‘M’) и ищет совпадения в соответствии регулярному выражению. Если совпадение обнаружено, search() возвращает объект который имеет различные методы описания совпадения; если совпадения не обнаружено, search() возвращает None, в Python значение нуля (null). Всё о чём мы заботимся в данный момент, совпадёт ли патерн, это можно сказать глянув на значение возвращаемое функцией search(). ‘M’ совпадает с этим регулярным выражением, так как первое опциональное M совпадает, а второе опциональное М и третье игнорируется.
- ? ‘MM’ совпадает так как первое и второе опциональное М совпадает а третье игнорируется
- ? ‘MMM’ совпадает полностью, так как все три символа М совпадают
- ? ‘MMMM’ не совпадает. Все три М совпадают, но регулярное выражение настаивает на конце строки, (так как требует символ $), а строка ещё не кончилась (из за четвёртого М). Поэтому search() возвращает None.
- ? Занимательно то, что пустая строка также совпадает с регулярным выражением, так как все символы М опциональны.
Проверка на сотни
? делает патерн необязательным
Расположение сотен более сложное чем тысяч, так как существует несколько взаимно исключающих путей записи и зависит от значения.
- 100 = C
- 200 = CC
- 300 = CCC
- 400 = CD
- 500 = D
- 600 = DC
- 700 = DCC
- 800 = DCCC
- 900 = CM
Таким образом есть четыре возможных патерна:
- CM
- CD
- От ноль до трёх символов C (ноль если месть сотен пусто)
- D, от последующх нулей до трёх символов C
Два последних патерна комбинированные:
- опциональное D, за ним от нуля до трёх символов C
Этот пример показывает как проверить позицию сотни в римском числе. ), потом тысячи (M?M?M?). Следом идёт новая часть в скобках, которая описывает три взаимоисключающих патерна разделённых вертикальной линией: CM, CD и D?C?C?C? (который является опциональным D и следующими за ним от нулей до трёх опциональных символов C). Парсер регулярного выражения проверяет каждый из этих патерновв последовательности от левого к правому, выбирая первый подходящий и игнорируя последующие.
- ? ‘MCM’ совпадает так как первый M совпадает, второй и третий символ M игнорируется, символы CM совпадают (и CD и D?C?C?C? патерны после этого не анализируются). MCM это римское представление числа 1900.
- ? ‘MD’ совпадает так как первый M совпадает, второй и третий символ M игнорируется, и патерн D?C?C?C? Совпадает с D (три символа C опциональны и игнорируются). MD это римское представление числа 1500.
- ? ‘MMMCCC’ совпадает так как первый M совпадает, и патерн D?C?C?C? сопадает с CCC (символ D опциональный и игнорируются). MMMCCC i это римское представление числа 3300.
- ? ‘MCMC’ не совпадает. Первый символ M совпадает, второй и третий символ M игнорируется, также совпадает CM, но патерн $ не совпадает так как вы ещё не в конце строки (вы ещё имеете не совпадающий символ C). Символ C не совпадает как часть патерна D?C?C?C?, так как исключающий патерн CM уже совпал.
- ? Занимательно то, что пустая строка всё ещё совпадает с регулярным выражением, так как все символы М опциональны и игнорируются и пустая строка совпадает с патерном D?C?C?C? где все символы опциональны и игнорируются.
Опаньки! Вы заметили как быстро регулярные выражения становятся отвратительными? И пока что мы обработали только позиции тысяч и сотен в римском представлении чисел. Но если последуете далее, вы обнаружите что десятки и единицы описать будет легче, так как они имеют такой же патерн. Тем временем давайте рассмотрим другой путь описать этот патерн.
?
Использование синтаксиса {n, m}
модификатор {1,4} совпадает с 1 до 4 вхождением патерна
В предыдущей секции мы имели дело с патерном где одинаковый символ может повториться до трёх раз. M{0,3}$’ ?
re.search(pattern, ‘M’) ?
UNIQae610d7ca506639d-nowiki-00000049-QINU
re.search(pattern, ‘MM’) ?
re.search(pattern, ‘MMM’) ?
re.search(pattern, ‘MMMM’) ?
- ? Этот патерн говорит: «Совпасть с началом строки, потом с от нуля до трёх символов М находящимися где угодно, потом с концом строки». Символы 0 и 3 могут быть любыми цифрами, если вам необходимо совпадение с 1 и более символами М, необходимо записать М{1,3}.
- ? Тут патерн совпадает с началом строки, потом с одним из возможных трёх символов М, потом с концом строки.
- ? Тут патерн совпадает с началом строки, потом с двумя из возможных трёх символов М, потом с концом строки.
- ? Тут патерн совпадает с началом строки, потом с тремя из возможных трёх символов М, потом с концом строки.
- ? Тут патерн совпадает с началом строки, потом с двумя из возможных трёх символов М, но не совпадает с концом строки.
Регулярное выражение позволяет до трёх символов М до конца строки, но у вас четыре, и патерн возвращает None.
Статьи к прочтению:
- Учебно-методические материалы по дисциплине. «аппаратное обеспечение компьютера»
- Учебно-методическое и информационное обеспечение дисциплины
примеры записи римских цифр
Похожие статьи:
Учебный пример: обработка телефонных номеров
\d совпадает с любыми цифрами (0–9). \D совпадает со всем кроме цифр До сих пор вы были сконцентрированы на полных патернах. Совпадает патерн или не…
Учебный пример: адрес улицы
Эта серия примеров основана на реальных проблемах, которые появились в моей работе несколько лет назад, когда мне пришлось обработать и стандартизировать…
400 римскими цифрами — Как написать 400 римскими цифрами?
LearnPracticeDownload
400 римскими цифрами — CD. Чтобы преобразовать 400 в римские цифры, запишем 400 в развернутом виде, т. е. 400 = (500 — 100) после чего заменив преобразованные числа соответствующими им римскими цифрами, получим 400 = (D — C) = CD. В этой статье мы объясним, как правильно преобразовать число 400 в римские цифры.
- 400 = КД
1. | Как написать 400 римскими цифрами? |
2. | Основные правила |
3. | Номера, относящиеся к 400 |
4. | Часто задаваемые вопросы о 400 римскими цифрами |
Как написать 400 римскими цифрами?
Римские цифры для 400 можно получить, используя метод, описанный ниже:
В этом методе мы разбиваем 400 на наименее расширяемую форму, пишем соответствующую им латинскую букву и добавляем/вычитаем их, то есть 400 = (500 — 100) = (D — C) = CD.
Поэтому значение 400 римскими цифрами равно CD.
☛ Также проверьте: Калькулятор римских цифр
Основные правила интерпретации римских цифр
- Когда буква большего размера предшествует букве меньшего размера, буквы добавляются. Например: CL, C > L, поэтому CL = C + L = 100 + 50 = 150.
- Когда буква меньшего размера предшествует букве большего размера, буквы вычитаются. Например: XL, X < L, поэтому XL = L - X = 50 - 10 = 40,
- Когда буква повторяется несколько раз, они добавляются. Например: CC = C + C = 100 + 100 = 200
- Одну и ту же букву нельзя использовать более трех раз подряд.
Римские цифры могут показаться отличными от цифр, но они похожи. Например, 400 римскими цифрами эквивалентно CD. Римские цифры для чисел, относящихся к 400, приведены ниже:
- CD = 400
- CDI = 400 + 1 = 401
- CDII = 400 + 2 = 402
- CDIII = 400 + 3 = 403
- CDIV = 400 + 4 = 404
- CDV = 400 + 5 = 405
- CDVI = 400 + 6 = 406
- CDVII = 400 + 7 = 407
- CDVIII = 400 + 8 = 408
- CDIX = 400 + 9 = 409
400 римскими цифрами Примеры
Пример 1: Какой остаток при делении CD на XII?
Решение:
XII = 12 и CD = 400 в цифрах.
При делении 400 на 12 в остатке остается 4.
Теперь 4 = IV
Следовательно, когда CD делится на XII, в остатке остается IV.Пример 2: Найдите значение (10 — 21) + 400 римскими цифрами.
Решение:
Решение (10 — 21) + 400 = -11 + 400 = 389. Теперь запишем ответ, то есть 389= 300 + 80 + 9 = ССС + LXXX + IX = CCCLXXXIX.
Пример 3. Найдите разницу между 433 и 400 римскими цифрами.
Решение:
Решение данной задачи, 433 — 400 = 33
Для определения значения 433 — 400 римскими цифрами выразим 33 в развернутом виде, т. е. 33 = 30 + 3 = XXX + III = XXXIII.Пример 4: найти значение 1741 — 400.
Решение:Решение данной задачи, 1741 — 400 = 1341
Для определения значения 1741 — 400 римскими цифрами выразим 1341 в развернутом виде, т.е. 1341 = 1000 + 300 + 40 + 1 = M + CCC + XL + I = MCCCXLI.
перейти к слайдуперейти к слайдуперейти к слайдуперейти к слайду
Готовы увидеть мир глазами математика?
Математика лежит в основе всего, что мы делаем. Наслаждайтесь решением реальных математических задач на живых уроках и станьте экспертом во всем.
Запишитесь на бесплатный пробный урок
Часто задаваемые вопросы о цифре 400 римскими цифрами
Что означает цифра 400 римскими цифрами?
Чтобы записать 400 римскими цифрами, сначала выразим 400 в развернутом виде. 400 = (500 — 100) = (D — C) = CD. Следовательно, 400 в римских числах выражается как CD.
Каково значение (9 — 103) + 400 в римских цифрах?
Решение (9 — 103) + 400 = -94 + 400 = 306. Чтобы выразить, (9 — 103) + 400 римскими цифрами, запишем ответ, то есть 306 в развернутом виде. 306 = 100 + 100 + 100 + 5 + 1 = С + С + С + V + I = CCCVI
Что нужно добавить к 124, чтобы получить 400? Запишите ответ римскими цифрами.
400 римскими цифрами — это CD, тогда как 124 — это CXXIV. 400 — 124 = 276. Следовательно, чтобы получить 400, к 124 нужно прибавить 276. Теперь, чтобы перевести 276 в римские числа, выразим его в развернутом виде, то есть 276 = 100 + 100 + 50 + 10 + 10. + 5 + 1 = С + С + L + X + X + V + I = CCLXXVI.
Как написать число 400 римскими цифрами?
Чтобы преобразовать 400 в римские цифры, преобразование включает разбиение чисел на основе разрядности (единицы, десятки, сотни, тысячи).
- Сотни = 400 = CD
- Номер = CD
Почему число 400 римскими цифрами записывается как компакт-диск?
Мы знаем, что римскими цифрами мы пишем 400 как CD. Поэтому 400 римскими цифрами записывается как 400 = CD.
☛ Статьи по теме:
- 750 римскими цифрами — DCCL
- 130 римскими цифрами — CXXX
- 1985 римскими цифрами — MCMLXXXV
- 1959 римскими цифрами — MCMLIX
- 401 римскими цифрами — CDI
- 18 римскими цифрами — XVIII
- 25 римскими цифрами — XXV
Рабочие листы по математике и
наглядный учебный план
Римские цифры от 1 до 400
Римские цифры от 1 до 400 — это список чисел от 1 до 400, представленных в соответствующем переводе римскими цифрами. Римские цифры от 1 до 400 помогут учащимся легко выучить числа для перевода римских цифр. В этой статье мы упростили все правила написания римских цифр от 1 до 400.
Таблица с римскими цифрами от 1 до 400
Таблица с римскими цифрами от 1 до 400 предназначена для помощи учащимся в расстановке приоритетов и планировании пересмотра.
1. | Римские цифры от 1 до 400 |
2. | Скачать PDF |
3. | Как писать римскими цифрами? |
4. | Часто задаваемые вопросы |
Римские цифры от 1 до 400
Римские цифры от 1 до 400 могут помочь понять преобразование чисел в римские цифры до 400. Список римских цифр от 1 до 400 приведен в таблице ниже.
Список римских цифр от 1 до 400
1: я | 2: II | 3: III | 4: IV | 5: В |
6: ВИ | 7: VII | 8: VIII | 9:IX | 10:Х |
11: XI | 12:XII | 13: XIII | 14: XIV | 15:XV |
16: XVI | 17: XVII | 18: XVIII | 19: XIX | 20:ХХ |
21: ХХI | 22: XXII | 23: XXIII | 24: XXIV | 25: ХХV |
30: ХХХ | 35: XXXV | 40: XL | 45: XLV | 50: Л |
130: CXXX | 135: CXXXV | 140: CXL | 145: CXLV | 150: класс |
155: CLV | 160: CLX | 165: CLXV | 170: CLXX | 175: CLXXV |
180: КЛХХХ | 185: CLXXXV | 190: СХС | 195: CXCV | 200: СС |
205: CCV | 210: CCX | 215: CCXV | 220: CCXX | 225: CCXXV |
230: CCXXX | 235: CCXXXV | 240: CCXL | 245: CCXLV | 250: CCL |
255: CCLV | 260: CCLX | 265: CCLXV | 270: CCLXX | 275: CCLXXV |
280: CCLXXX | 285: CCLXXXV | 290: CCXC | 295: CCXCV | 300: ССС |
310: СССХ | 320: СССХХ | 330: CCCXXX | 340: CCCXL | 350: CCCL |
360: CCCLX | 370: CCCLXX | 380: CCCLXXX | 390: СССХС | 400: компакт-диск |
☛ Скачать римские цифры от 1 до 400 Таблица
Мы предоставили печатный справочный лист с указанной выше информацией в удобном для печати формате. Студентам рекомендуется практиковать римские цифры от 1 до 400 для простых математических вычислений.
Как написать римские цифры от 1 до 400?
Римские цифры от 1 до 400 можно получить, используя любой из двух приведенных ниже методов:
- Метод 1: В этом методе мы разбиваем 323 на наименее расширяемую форму, пишем соответствующую им римскую букву и добавляем/вычитаем их, т. е. 323 = 100 + 100 + 100 + 10 + 10 + 1 + 1 + 1 = С + С + С + Х + Х + I + I + I = CCCXXIII
- Метод 2: В этом методе мы рассматриваем группы чисел для сложения, такие как: 323 = 300 + 20 + 3 = CCC + XX + III = CCCXXIII
Для записи римских цифр от 1 до 400 можно использовать любой из двух указанных выше способов.
☛ Также проверьте: Калькулятор римских цифр
Правила написания римских цифр от 1 до 400
Соблюдение определенных правил при написании римских чисел от 1 до 400.
Эти правила подробно объясняются здесь.- Когда буква большего размера предшествует букве меньшего размера, буквы добавляются. Например: MI, M > I, поэтому MI = M + I = 1000 + 1 = 1001.
- Когда буква меньшего размера предшествует букве большего размера, буквы вычитаются. Например: CM, C < M, поэтому CM = M - C = 1000 - 100 = 900.
- Когда буква повторяется несколько раз, они добавляются. Например: ХХХ = Х + Х + Х = 10 + 10 + 10 = 30
- Одну и ту же букву нельзя использовать более трех раз подряд. V, L и D не могут повторяться, они появляются только один раз.
Часто задаваемые вопросы о римских цифрах от 1 до 400
Что означают римские цифры от 1 до 400?
Римские цифры от 1 до 400 — это таблица, которая представляет числа от 1 до 400 римскими цифрами. Он состоит из записи чисел от 1 до 400, использовавшейся римлянами в древние времена.
Сколько квадратных чисел находится между римскими цифрами от 1 до 400?
Идеальный квадрат между римскими цифрами от 1 до 400: 1, 4, 9, 16, 25, 36, 49, 64, 81, 100, 121, 144, 169, 196, 225, 256, 289, 324, 361, 400. Это означает, что между римскими числами от 1 до 400 имеется 20 = XX совершенных квадратных чисел.
Сколько простых чисел-близнецов находится между римскими цифрами от 1 до 400?
Простые числа-близнецы — это простые числа, абсолютная разность которых равна 2. Пары простых чисел-близнецов от 1 до 400: (3, 5), (5, 7), (11, 13), (17, 19), (29) , 31), (41, 43), (59, 61), (71, 73), (101, 103), (107, 109), (137, 139), (149, 151), (179, 181) ), (191, 193), (197, 199), (227, 229), (239, 241), (269, 271), (281, 283), (311, 313), (347, 349). Следовательно, между римскими цифрами от 1 до 400 находится 21 простое число-близнец.
Каково значение XXXIX + (CCCLVI — CXXXV) + CCXLVII?
Используя римские цифры от 1 до 400, XXXIX = 39, CCCLVI = 356, CXXXV = 135, CCXLVII = 247. Преобразуя данную задачу в числа, мы имеем XXXIX + (CCCLVI — CXXXV) + CCXLVII = 39 + (356 — 135) + 247 = 507 = DVII
Как писать римские цифры от 1 до 400?
Чтобы записать число от 1 до 400 римскими цифрами, преобразование включает в себя разбиение чисел на основе разрядности (единицы, десятки, сотни, тысячи).