【问题标题】:Python Code for Bin, Dec, Hex string Identifier & ConverterBin、Dec、Hex 字符串标识符和转换器的 Python 代码
【发布时间】:2015-05-19 21:07:35
【问题描述】:

我需要将数字输入作为字符串并检测它是二进制、十进制还是十六进制的 Python 代码。

另外,我想转换它为其他两种类型不使用使用 bin(),dec(),hex(),int() 命令。

【问题讨论】:

  • 这是一种学习任务吗?
  • 考虑用正则表达式做检查?对于十六进制,它将是 {0-9,A-F},对于 bin {0,1} 和对于 dec {0,9}。
  • "不使用 bin(),dec(),hex()" 那么,使用str.format 可以吗?
  • 我正在尝试使用正则表达式的样本类型检查器.. 可以吗?
  • 这是不可能的。你要输入“10”做什么?

标签: python base-conversion


【解决方案1】:
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"

是一种方式……

【讨论】:

  • 再一次,数字“10”在这里也是个问题
  • 不,它不是... 10 是十进制... b10 或 0b10 将是二进制 x10 或 0x10 将是十六进制; 010 或 O10 将是八进制
  • 他从未说过只能接受 0-9a-f ...I need a python code that understands the type of the input whether it is binary, decimal or hexadecimal
  • 所以我强迫他使用 python 解释器强迫你使用的相同约定
  • @JoranBeasley 你能帮我做转换吗?
【解决方案2】:

这将告诉您输入字符串是 bin、dec 还是 hex

注意:根据 steffano 的评论,您将不得不写更多的东西来对像 10 这样的数字进行分类 - 可以是 bin/dec/hex。只有以下函数之一应该评估为真,否则你错了。试着把这个检查。

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

【讨论】:

  • 澄清一下:我不是在谈论你的答案,我是在谈论这个问题。由于其他原因,您的答案是错误的并且非常糟糕。
  • @StefanPochmann - 您能否详细说明您认为这里可能是错误/不好的一些事情。我想努力纠正它。
  • 很抱歉,有太多不好的东西无法一一列举,但请先尝试isHexa("Ax")
  • @StefanPochmann - 是的,你是对的。如果我不能解决这个问题,我会在 1 小时内把这个答案记下来。谢谢
  • 现在修复了 isHexa("Ax"),它可以工作了。我需要为“10”添加另一个检查 - 这很棘手
猜你喜欢
  • 2020-11-10
  • 1970-01-01
  • 2016-03-15
  • 2014-09-23
  • 2016-08-28
  • 2018-05-14
  • 2011-04-27
  • 2013-04-01
  • 1970-01-01
相关资源
最近更新 更多