2015-10-17 3 views
1

Я относительно новичок в Python, и в настоящее время я пытаюсь создать базовый конвертер (чтобы можно было ввести число в базе 10 и получить вывод этого числа в шестнадцатеричном или двоичном виде или так далее). Чтобы добавить ясность в мою программу, я пытался использовать данные юникода, в частности символы в u+208 - u+209, чтобы печатать номера индексов, чтобы пользователь знал, в какой базе находится номер, когда он печатается.Как печатать строки Unicode Variable?

Мой код до сих пор это:

import unicodedata 

cNum = int(input("Please enter your number: ")) 

oBase = int(input("Please enter the base you are converting from. ")) 

nBase = int(input("Please enter the base are you converting to. ")) 

baseSub = "u'" + "\\u" + str(2080 + nBase) + "'" 

baseSub.decode('utf-8') 

print(subBase) 

SUBBASE является строка, что я пытаюсь преобразовать в Юникод, чтобы число индексных для новой базы для печати (так что, если я ввожу 2 в базе десять, выход может быть напечатан как 1 с индексом два). То, что я делал, - это просто написать кучу операторов IF для проверки того, что nBase равно 1,2,3 и т. Д. но это очень громоздко. Обычно, чтобы печатать каждый индекс, оператор печати будет (u '\u208x') (при этом x является любым индексом, который вы хотите распечатать в форме 0-9). Вышеупомянутый код - это моя попытка создать строку юникода, которая является (u '\u208x'), причем x является nBase. Без функции декодирования назначение подбазы как «u» + «\ u» ... ... печатает литеральную строку u '\u208x'. В противном случае возникает ошибка, при которой суббаза не имеет атрибута «decode». Как я могу заставить его печатать индексный номер из unicode с переменным, не используя массу операторов IF, если есть способ вообще?

+0

К сожалению, я имел в виду 2 в базе 10 будет 10 в базе 2. – Benji

ответ

0

Это может конвертировать любое количество своих индексных кодовых:

number = 1234567890 
print(''.join(chr(0x2080+int(c)) for c in str(number))) 

Выход:

₁₂₃₄₅₆₇₈₉₀ 

Обратите внимание, что ваш вывод кодирования и шрифт должны поддерживать символы, однако.

chr преобразует число в его эквивалент Unicode и U+2080 является Unicode в элемент кода шестнадцатеричной, так что вам нужно 0x2080 не 2080.

+0

Я просто попытался что и он дал эту ошибку:. печати («» присоединиться (CHR (0x2080 + INT (с)) для С str (number))) ValueError: chr() arg не в диапазоне (256) – Benji

+0

Это код Python 3, который, как я предполагал, вы использовали на основе вызова 'print' как функции. 'unichr' - эквивалент Python 2. –

+0

Собственно, неважно. С моей стороны это была типографская ошибка. Спасибо вам за помощь! – Benji

Смежные вопросы