Как сделать так, чтобы исходный код Unicode влиял на всю строку, а не только на первый символ? - PullRequest
0 голосов
/ 12 июня 2018

Я делаю простой преобразователь римских чисел в python и использую это:

    num_values = [(1000000, 'M'+ u'\u0304'),
                  (900000, 'CM'+ u'\u0304'),
                  (100000, 'C'+ u'\u0304'),
                  (90000, 'XC'+ u'\u0304'),
                  (50000, 'L'+ u'\u0304'),
                  (40000, 'XL'+ u'\u0304'),
                  (10000, 'X'+ u'\u0304'),
                  (5000, 'V'+ u'\u0304'),
                  (1000, 'M'),
                  (900, 'CM'),
                  (500, 'D'),
                  (400, 'CD'),
                  (100, 'C'),
                  (90, 'XC'),
                  (50, 'L'),
                  (40, 'XL'),
                  (10, 'X'),
                  (9, 'IX'),
                  (5, 'V'),
                  (4, 'IV'),
                  (1, 'I')]

для представления значений, через которые проходит моя функция.Тем не менее, кажется, что Юникод влияет только на первый символ в строке.(Например, 'CM'+ u'\u0304' выглядит как CM̄ вместо C̄M̄.)

Есть ли способ исправить это, сохранив все в одном индексе?

1 Ответ

0 голосов
/ 12 июня 2018

Макрон объединения (U + 0304) объединяется с предыдущей кодовой точкой (только).Если вам нужны два символа с надстрочными знаками, вам понадобятся два комбинирующих макрона.Либо:

'C\u0304M\u0304'

или

'C' + '\u0304' + M + '\u0304'

Если вы используете Python 2 (не), вам потребуется u'\u0304' или u'C\u0304M\u0304'


Вас может заинтересовать тот факт, что Unicode имеет

                  (100_000, u'\u2188'),   # ↈ
                  (50_000, u'\u2187'),    # ↇ
                  (10_000, u'\u2182'),    # ↂ

К сожалению, нет ничего для 1_000_000, и я не знаю, насколько они исторические (это, вероятно, зависит откогда и где вы говорите).Существует также u '\ u2180' (ↀ) в качестве альтернативы 1000. (Комбинирование макрона будет работать с этим.)

...