<?xml version="1.0" encoding="utf-8"?> 
<rss version="2.0"
  xmlns:itunes="http://www.itunes.com/dtds/podcast-1.0.dtd"
  xmlns:atom="http://www.w3.org/2005/Atom">

<channel>

<title>Блог Константина Фарактинова: заметки с тегом программирование</title>
<link>http://faraktinov.ru/notes/tags/programmirovanie/</link>
<description>Пишу про всякое. Немного дизайна, немного программирования, а так в основном мысли.</description>
<author>Константин Фарактинов</author>
<language>ru</language>
<generator>E2 (v3877; Aegea)</generator>

<itunes:owner>
<itunes:name>Константин Фарактинов</itunes:name>
<itunes:email></itunes:email>
</itunes:owner>
<itunes:subtitle>Пишу про всякое. Немного дизайна, немного программирования, а так в основном мысли.</itunes:subtitle>
<itunes:image href="" />
<itunes:explicit></itunes:explicit>

<item>
<title>Перевод римских и арабских чисел в Python</title>
<guid isPermaLink="false">49</guid>
<link>http://faraktinov.ru/notes/all/convert-roman-arabic-numbers-python/</link>
<pubDate>Sun, 05 Feb 2023 12:46:14 +0000</pubDate>
<author>Константин Фарактинов</author>
<comments>http://faraktinov.ru/notes/all/convert-roman-arabic-numbers-python/</comments>
<description>
&lt;p&gt;Изучаю тут Питон. Решил зафиксировать для истории решение одной задачи с Хекслета.&lt;/p&gt;
&lt;p&gt;Во-первых, оно нравится мне больше учительского (потому что рекурсия же). Во-вторых, у испытания самый низкий процент завершений, который я пока видел (хотя сейчас начало второго модуля, так что видел не много). В-третьих, интересно будет вернуться сюда через год и покекать над собой из прошлого. Ну, и, наконец, моё решение может пригодиться кому-то ещё, хотя бы в качестве антипримера.&lt;/p&gt;
&lt;pre class="e2-text-code"&gt;&lt;code class=""&gt;NUMERALS = {
    'M': 1000,
    'CM': 900,
    'D': 500,
    'CD': 400,
    'C': 100,
    'XC': 90,
    'L': 50,
    'XL': 40,
    'X': 10,
    'IX': 9,
    'V': 5,
    'IV': 4,
    'I': 1,
}


def descending(pair):
    return -pair[1]


def to_roman(arabic_num):
    roman_num = ''
    for roman, digit in sorted(NUMERALS.items(), key=descending):
        add = arabic_num // digit
        roman_num += roman * add
        arabic_num = arabic_num % digit
    return roman_num


def get_digit(roman, digit, symbol, arabic):
    if symbol == roman[:len(symbol)]:
        return get_digit(roman[len(symbol):], digit, symbol, arabic + digit)
    return roman, arabic


def to_arabic(roman_num):
    number = roman_num
    arabic_num = 0

    for symbol, digit in sorted(NUMERALS.items(), key=descending):
        number, arabic_num = get_digit(number, digit, symbol, arabic_num)
    if to_roman(arabic_num) == roman_num:
        return arabic_num
    return False&lt;/code&gt;&lt;/pre&gt;</description>
</item>


</channel>
</rss>