将八进制数转换为十进制的算法?

时间:2016-04-04 04:31:28

标签: python decimal converter octal

我有一个我希望转换为十进制的八进制数列表。以下是我到目前为止所做的课程:

class Octal:

    #Reads in the file into numberList, converting each line into an int.
    def __init__(self):
        list = []
        file = open("Number Lists/random_numbers3.txt")
        for line in file:
            list.append(int(line))
        self.numberList = list
        file.close()

    #Convert numberList to decimal
    def dec_convert(self):
        decimal = 0
        decimalList = []
        for line in self.numberList:
            temp = str(line)
            i = 0
            while i < len(temp):
                digit = int(temp[i])
                item = (digit * (8 ** (len(temp) - i)))
                decimal = decimal + item
                i += 1

            decimalList.append(decimal)
        return decimalList



    def get_list(self):
        return self.numberList

我从文件中读取数字,这很好。但我不认为我的dec_convert()函数确实有效。它只是继续运行而没有完成。

它看起来非常糟糕且难以阅读,所以我想知道是否有更简单的方法将列表中的每个八进制数转换为十进制数?

2 个答案:

答案 0 :(得分:1)

这是一个简单的解决方案,它使用内置的int()构造函数而不是dec_convert()函数。

class Octal:
    def __init__(self):
        with open("Number Lists/random_numbers3.txt") as fp:
            self.numberList = map(lambda x:int(x,8), fp)
    def get_list(self):
        return self.numberList

if __name__=="__main__":
    o = Octal()
    print(o.get_list())

答案 1 :(得分:0)

是的,你可以使用 list comprehension

def dec_convert(self):
    decimalList = [self._convert_to_dec(line) for line in self.numberList]

和:

def _convert_to_dec(self,dec) :
    n = len(temp)-1
    return sum(int(x)*(8**(n-i)) for i,x in enumerate(dec))

第一个代码片段是一个简单的列表解析,它在 numberList 中的所有元素上调用self._convert_to_dec。那里没那么神奇。

_convert_to_dec更复杂:我们首先计算数字位数并将其存储在n中。接下来,我们定义一个enumerate在字符上的生成器,并将i绑定到相应的索引。生成器将每个元素与相应的8幂和数字相乘。这是一个生成器,因此不会构造真正的列表。

通过sum运行此操作,我们获得了请求结果的总和。

或者如@TomKarzes所述,您可以将int与给定的基数一起使用(在这种情况下为8