這裡有一個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))
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))
(圖一) 程式輸出結果 |
沒有留言:
張貼留言