将任意进制数字转换为十进制的Python代码出错,代码有什么问题?

3 投票
7 回答
22068 浏览
提问于 2025-04-16 11:31
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

撰写回答