将任意进制数字转换为十进制的Python代码出错,代码有什么问题?
import math
def baseencode(number, base):
##Converting a number of any base to base10
if number == 0:
return '0'
for i in range(0,len(number)):
if number[i]!= [A-Z]:
num = num + number[i]*pow(i,base)
else :
num = num + (9 + ord(number[i])) *pow(i,base)
return num
a = baseencode('20',5)
print a
我遇到的错误是:
Traceback (most recent call last):
File "doubtrob.py", line 19, in <module>
a = baseencode('20',5)
File "doubtrob.py", line 13, in baseencode
if number[i]!= [A-Z]:
NameError: global name 'A' is not defined
7 个回答
4
这个问题的更全面的解决方案可能是这样的:
import string
# Possible digits from the lowest to the highest
DIGITS = '%s%s' % (string.digits, string.lowercase)
def baseencode(num, base):
result = 0
positive = True
# If a number is negative let's remove the minus sign
if num[0] == '-':
positive = False
num = num[1:]
for i, n in enumerate(num[::-1]):
# Since 0xff == 0xFF
n = n.lower()
result += DIGITS.index(n) * base ** i
if not positive:
result = -1 * result
return result
基本上,在把一个数字转换成十进制的时候,最简单的方法是从最后一位开始,先把它乘以底数的当前位数(也就是DIGITS.index(n) * base ** i)。
顺便说一下,我理解这是一个Python的练习,但如果不是的话,Python里有一个内置的函数可以做到这一点 - int:
int(x[, base]) -> 整数
7
你把Python搞混了,可能是和Perl或者其他什么语言搞混了...
if not ('A' <= number[i] <= 'Z'):
17
难道你不需要用 int(x, base)
吗?
int('20',5) # returns the integer 10