3

複数の if および elif 条件付けを含む問題に対処しています。正確に述べると、私の場合は次のようになります。

if len(g) == 2:
   a = 'rea: 300'
   b = 'ref: "%s": {"sds": 200},"%s": {"sds": 300}' % (g[0],g[1])

elif len(g) == 3:
   a = 'rea: 400'
   b = 'ref: "%s": {"sds": 200},"%s": {"sds": 300},"%s": {"sds": 400}' % (g[0],g[1],g[2])
....

そして、この elif 条件付けは elif len(g) == 99 まで上がるはずです...だから、これを行うエレガントな方法があるはずです。また、観察すると、「rea」と「ref」が進行するパターンがあり、次のように言えます。

 if len(g) == x:
    a = 'rea: (x*100)+100'
    b = 'ref: "%s": {"sds": 200},"%s": {"sds": 300},"%s": {"sds": (x*100)+100}' % (g[0],g[1],g[2])
4

5 に答える 5

2

多分このようなもの:

g_len = len(g)
a = "rea: {}".format((g_len + 1) * 100)
b = "ref: "
for i, g_i in enumerate(g):
    b += ' "{}": {{"sds": {}}},'.format(g_i, (i+2) * 100)
于 2013-06-30T06:45:44.333 に答える
2

この方法を試してください:

def func(g):
    if not 1 < len(g) < 100:
        raise ValueError('inadequate length')
    d = {x:{'sds':(i+2)*100} for i, x in enumerate(g)}
    a = 'rea: %s00' % (len(g)+1)
    b = 'ref: %s' % str(d)[1:-1]
    return (a, b)

b辞書に非常によく似た文字列を作成する理由はわかりませんが、理由があると確信しています...

>>> func(range(3))
('rea: 400', "ref: 0: {'sds': 200}, 1: {'sds': 300}, 2: {'sds': 400}")
于 2013-06-30T07:37:53.530 に答える
0

辞書を使う:

x = 100
d = {}
for i in xrange(2, len(g)+1):
    d[i] = ['rea: {}'.format(100+x*i), 'ref: '+ ('%s: {"sds": 200}, ' *(i-1) + ' %s: {"sds": 200}') % tuple(g[:i])]

d は次のようになります。

{2: ['rea: 300',
     'ref: "depends_on_g": {"sds": 200}, "depends_on_g": {"sds": 300}'],
 3: ['rea: 400',
     'ref: "depends_on_g": {"sds": 200}, "depends_on_g": {"sds": 300}', "depends_on_g": {"sds": 300}]
 ...
}

次に、それにアクセスするには:

a, b = d.get(len(g))

ifステートメントは必要ありません:)

于 2013-06-30T06:49:01.463 に答える
-1

個人的には、長さが次のようにわかっていた時点で機能的なものを選びます。

def do_Condition(g):
    """ Condtion the result based on the length of g """
    l = len(g)
    a = 'rea: %d' % (100 + 100*l)
    items = ['ref: "%s"' % (g[0])]
    n = 100
    for i in g[1:]:
        n += 100
        items.append('{"sds": %d},"%s"' % (n, i))
    b = ': '.join(items)
    return (a, b)
于 2013-06-30T07:16:49.423 に答える