Код Python для Bin, Dec, Hex string Identifier & Converter

Мне нужен код Python, который принимает числовой ввод в виде строки и определяет, является ли он двоичным, десятичным или шестнадцатеричным.

Кроме того, я хочу преобразовать его в два других типа, без использования команд bin (), dec (), hex (), int ().


person aaaaaaaaaaaaaaa    schedule 19.05.2015    source источник
comment
Это что-то вроде учебной задачи?   -  person Alexey Gorozhanov    schedule 20.05.2015
comment
рассмотреть возможность проверки с помощью регулярных выражений? для шестнадцатеричного значения это будет {0-9, A-F}, для бункера {0,1} и для десятичного {0,9}.   -  person sudhishkr    schedule 20.05.2015
comment
без использования bin (), dec (), hex () Итак, используя _ 1_ в порядке?   -  person tobias_k    schedule 20.05.2015
comment
Я пытаюсь проверить тип образца с регулярным выражением .. это будет нормально?   -  person sudhishkr    schedule 20.05.2015
comment
Это невозможно. Что вы собираетесь делать с вводом 10?   -  person Stefan Pochmann    schedule 20.05.2015
comment
Хаааан !! @StefanPochmann - ты заставил меня выглядеть дураком !! : P, возможно, должна быть еще одна проверка, которая гарантирует, что только одна из isBinary () isDecimal () isHexa () оценивается как истинная   -  person sudhishkr    schedule 20.05.2015
comment
@Kutay - я отказался от подхода регулярных выражений к этому, проверьте новый ниже.   -  person sudhishkr    schedule 20.05.2015


Ответы (2)


if my_num[0:2] == "0x" or my_num[0] == "x":print "hex"
elif my_num[0:2] == "0b" or my_num[0] == "b" and all(x in "01" for x in my_num):print "bin"
elif my_num[0] in "0O": print "oct"
elif re.match("^[0-9]+$",my_num): print "dec"
else: print "I dont know i guess its just a string ... or maybe base64"

вдали ...

person Joran Beasley    schedule 19.05.2015
comment
снова число 10 здесь тоже проблема - person sudhishkr; 20.05.2015
comment
нет, это не так ... 10 - десятичное ... b10 или 0b10 будет двоичным x10 или 0x10 будет шестнадцатеричным; 010 или O10 будет восьмеричным - person Joran Beasley; 20.05.2015
comment
он никогда не говорил, что может принимать только 0-9a-f ... I need a python code that understands the type of the input whether it is binary, decimal or hexadecimal - person Joran Beasley; 20.05.2015
comment
поэтому я заставляю его использовать те же соглашения, которые интерпретатор python заставляет вас использовать - person Joran Beasley; 20.05.2015
comment
@JoranBeasley, ты тоже можешь мне помочь с преобразованием? - person aaaaaaaaaaaaaaa; 20.05.2015

Это скажет вам, является ли входная строка bin, dec или hex.

ПРИМЕЧАНИЕ. В соответствии с комментарием Стеффано вам нужно будет написать что-то еще, чтобы классифицировать число, например 10, которое может быть bin / dec / hex. Только одна из приведенных ниже функций должна иметь значение true, иначе вы ошибаетесь. Попробуйте поставить эту проверку.

import re

def isBinary(strNum):
    keyword = "^[0-1]*$"
    re.compile(keyword)
    if(re.match(keyword, strNum)) :
        return True
    else : 
        return False

def isDecimal(strNum):
    keyword = "^[0-9]*$"
    re.compile(keyword)
    if(re.match(keyword, strNum)) :
        return True
    else : 
        return False

def isHexa(strNum):
    keyword = "^[0-9a-fA-f]*$"
    re.compile(keyword)
    if(re.match(keyword, strNum)) :
        return True
    else : 
        return False
#Tests
print isHexa("AAD");
print isDecimal("11B")
print isBinary("0110a")

Результат этого:

True
False
False
person sudhishkr    schedule 19.05.2015
comment
Чтобы уточнить: я говорил не о вашем ответе, я говорил о вопросе. Ваш ответ неправильный и очень плохой по другим причинам. - person Stefan Pochmann; 20.05.2015
comment
@StefanPochmann - не могли бы вы рассказать о некоторых вещах, которые, по вашему мнению, могут быть неправильными / плохими. Я хотел бы попытаться исправить это. - person sudhishkr; 20.05.2015
comment
Извините, здесь слишком много плохого, чтобы перечислить все это, но начните с попытки isHexa("Ax"). - person Stefan Pochmann; 20.05.2015
comment
@StefanPochmann - да, вы правы. Я запишу этот ответ через 1 час, если не смогу это исправить. Спасибо - person sudhishkr; 20.05.2015
comment
Исправил isHexa (Axe), теперь работает. Мне нужно добавить еще одну проверку на 10 - это сложно - person sudhishkr; 20.05.2015
comment
@Kutay - добро пожаловать, вы тоже хотите конверсий? или это хорошо? Если вы получили то, что хотели, отметьте ответ как окончательный (это галочка станет зеленой) - person sudhishkr; 20.05.2015
comment
@Suddev, вы можете мне помочь с преобразованием? - person aaaaaaaaaaaaaaa; 20.05.2015