3

0.0から39.9までのフロートを文字列に変換したいと思います。10桁がそれぞれ1、2、または3の場合は、L、T、またはYに置き換えます。そして、それが1つにある場合は、Mを追加します。たとえば、22.3はT2.3を返し、8.1はM8.1を返します。それ以外の場合は、フロートを返します。

このコードはもちろん機能しますが、もっと単純な(ワンライナーではないにしても)解決策があるのではないかと思います。コードは次のとおりです。

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

ありがとう!

4

1 に答える 1

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つの推測をしました。必要に応じて変更してください。]

于 2012-12-17T19:51:34.690 に答える