2012-12-17 33 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