2012-12-17 69 views
3

我想將0.0和39.9之間的float轉換爲字符串。將十位數字替換爲L,T或Y(如果它們分別爲1,2或3)。如果它在其中,則附加一個M。例如,22.3會返回T2.3,8.1會返回M8.1等等。否則,返回浮動。Python單線程將float轉換爲字符串

這段代碼當然有用,但我想知道是否有更簡單的(如果不是單線的)解決方案。這裏是代碼:

def specType(SpT): 
    if 0 <= SpT <= 9.9: 
    return 'M{}'.format(SpT) 
    elif 10.0 <= SpT <= 19.9: 
    return 'L{}'.format(SpT - 10) 
    elif 20.0 <= SpT <= 29.9: 
    return 'T{}'.format(SpT - 20) 
    elif 30.0 <= SpT <= 39.9: 
    return 'Y{}'.format(SpT - 30) 
    else: 
    return SpT 

謝謝!

+6

你必須小心所有'浮動'比較('SpT <= 9.9'等) – NPE

+1

+1,NPE。當SpT爲9.95時,期望的輸出是多少?因爲它大於'9.9'且小於'10.0',它會穿過裂縫併到達'return SpT'線。 – Kevin

+0

這是一個很好的觀點。如果我說明了這一點,但實際上它絕對不會出現在應用程序中。 –

回答

10

如何:

def specType(SpT): 
    return '{}{}'.format('MLTY'[int(SpT//10)], SpT % 10) if 0.0 <= SpT <= 39.9 else SpT 

這給

>>> specType(0.0) 
'M0.0' 
>>> specType(8.1) 
'M8.1' 
>>> specType(14.5) 
'L4.5' 
>>> specType(22.3) 
'T2.3' 
>>> specType(34.7) 
'Y4.7' 

[正如在評論中指出,你要想想如何處理它可以通過你的界限潛行數做 - 我猜一猜;適當修改。]

+1

:O心=吹!我從來不知道你可以做'//'! – jackcogdill

+1

@yentup你也可以使用[''divmod'](http://docs.python.org/2/library/functions.html#divmod):) –

+1

@LevLevitsky哇現在我要去閱讀整個頁面:D – jackcogdill