2016-04-04 63 views
-1

我有一個八進制數字的列表,我想將其轉換爲十進制。這是我迄今爲止所做的課程:將八進制數轉換爲十進制數的算法?

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()函數實際上起作用。它只是繼續運行,並沒有完成。

它看起來完全可怕和難以閱讀,所以我想知道是否有一種更簡單的方法將列表中的每個八進制數轉換爲十進制數?

+4

你不能只用'int(num_str,base)'來進行轉換嗎?例如,int(「23」,8)「返回19,這就是字符串」23「被解釋爲八進制。 –

+0

Where do你在'while'循環中增加'i' ???怪不得「它繼續運行」。 –

+0

@TomKarzes,不是從十進制轉換成八進制嗎?我需要八進制到十進制。 –

回答

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()) 
一個簡單的解決方案
+0

但不是「int(x,8)」將它轉換爲八進制?我需要它從八進制到十進制。 –

+0

不,那'int(x,8)'從八進制轉換爲'int'。試試這個實驗來看看它是如何工作的:'print(int('20',8))'。你應該看到八進制字符串「20」被轉換爲一個值爲16的int。 –

+0

我明白了,所以將(八進制)7777轉換爲(dec)4095? –

0

是的,你可以使用列表理解

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)) 

第一個代碼片段是一個簡單的列表中理解,在'自我要求self._convert_to_dec所有元素.nu​​mberList。那裏沒什麼魔法。

_convert_to_dec更復雜:我們首先計算數字的數量並將其存儲在n。接下來,我們定義一個生成器,用於對字符進行編碼並將i綁定到相應的索引。發生器將每個元素與相應的功率8和數字相乘。這是一個生成器,所以沒有構建真正的列表。

通過運行這個通過sum我們獲得所需的結果的總和。

或者爲@TomKarzes說,你可以使用int與給定基(在這種情況下8

相關問題