2013-06-13 34 views
0

我试图做一个小的程序,读取文件中只有一个单一的数字,然后程序打印出它是否是十进制,十六进制或八进制数字,然后显示数字本身。以下是我为允许的数字所制定的规则:搞清楚如果一个数字是十进制,十六进制或八进制python

整数可以用十进制,二进制,八进制或十六进制形式明确指定。所有这些形式都可以从一个可选符号开始,可以是“+”或“ - ”,它与整数的其余部分之间没有分隔字符。

十进制整数可以是单个零或一个以非零十进制数字开头的一个或多个十进制数字的序列。十进制数字是0,1,2,3,4,5,6,7,8和9.

八进制数以零开始,后面跟着一个零或一个非空序列以非零八进制数字开头的八进制数字。八进制数字是0,1,2,3,4,5,6或7中的一个。

十六进制数字以零开头,后跟大写或小写“x”,并且可以是单个零或一个非零十六进制数字和一个零个或多个十六进制数字序列。十六进制数字包括十进制数字和字母a,b,c,d,e和f及其大写版本。

注意这个描述需要多长时间和混淆才能确保它是明确的。在任何表示中都不允许使用“前导零”,例如,0x007是错误的十六进制数,007既是八进制数又是错误的十进制数。

我想我只是遇到了麻烦,如何让程序找出它是什么样的数字。

+0

对于这样的任务,您应该使用测试驱动开发。换句话说,您可以为规范的每个角落定义一个测试,然后调整您的代码以正确处理该情况。请注意,您还可以划分任务,因为找出使用哪种表示形式意味着能够首先检测到任何表示形式,即是/否函数,告诉您每个基准文本是否包含具有该基准的数字。 –

回答

2

以此为起点,你可以尝试使用int() function与参数让它计算出的转换:

>>> int('-0xFF', 0) 
-255 
>>> int('077', 0) 
63 
>>> int('125', 0) 
125 

这就是说,一个regular expression是区分你确切的你最好的选择规格。例如,这里是一个十六进制识别器:

>>> import re 
>>> is_hex = re.compile(
     r'^[+\-]?'      # optional sign 
      '0'       # start with a zero 
      '[xX]'      # upper or lower case "x" 
      '(0|'       # single zero or 
      '([1-9A-Fa-f][0-9A-Fa-f]*))$' # a non-zero hexadecimal digit and a 
             # sequence of zero or more hexadecimal digits 
).match 

>>> bool(is_hex('-0x0')) 
True 
>>> bool(is_hex('-0x03')) 
False 
>>> bool(is_hex('-0x30A')) 
True 
>>> bool(is_hex('0x007')) 
False 
相关问题