2020年7月2日 星期四

如何處理單位換算的問題

這裡有一個list當中記錄著不同頻率字串。有的有單位 (單位有Hz, KHz, MHz, GHz, THz五種),有的沒有。有的是浮點數,有的又是科學符號表示:

x = ['2.46KHz', '2e+5Hz', '33MHz','-25.03GHz', '+64THz', '533', '-282.0', '1e-2', '-1.1e3']

假設想要比較頻率的大小,因此需要先將所有的點都轉成浮點數以方便比較。Python程式該如何寫,才能將上面x當中所有的數值都轉成浮點數?各位可以先不要看答案,試試看能不能寫的出來(答案在下方)。



















底下是我的程式碼,各位不妨參考看看,如果您有其他更好的答案,也請讓我知道。


x = ['2.46KHz', '2e+5Hz', '33MHz','-25.03GHz', '+64THz', '533', '-282.0', '1e-2', '-1.1e3']

def convert(i):
    scale = {'Hz':1, 'KHz':1e3, 'MHz':1e6, 'GHz':1e9, 'THz':1e12}
    try:
        return float(i)
    except:
        pass
    try:
        return float(i[:-3])*scale[i[-3:]]
    except:
        pass
    try: 
        return float(i[:-2])*scale[i[-2:]]
    except:
        raise Exception('"{}" is invalid frequncy'.format(i))

for i in x:
    print(convert(i))


(圖一) 程式輸出結果

沒有留言:

張貼留言