0

そこで、複数の文字列とタプルのリストを取得する関数を作成したいと思います。その機能は、文字列の場合は文字列を出力するだけですが、タプルの場合は整数と文字列を取得し、それはそれらを乗算します。

例:

print(something(["1stString", "2ndString", (3, "Pie"), (4, "Soda")]))

そしてそれは印刷します:

1stString
2ndString
Pie
Pie
Pie
Soda
Soda
Soda
Soda

私の惨めな試み:

def something(s):
    for x in s:
        if isinstance(s, str):
            print(s)
        if isinstance(s, tuple):
            x = tuple[0] * tuple[1]
        print(x)
    exit()

これは文字列に対しては機能しますが、タプルに対しては機能しません。

印刷します:

1stString
2ndString
(3, 'Pie')
(4, 'Soda')

私は何が間違っているのですか?

もう一つ。リストとして印刷したい場合はどうですか?

このような:

['1stString', '2ndString', 'Pie', 'Pie', 'Pie', 'Soda', 'Soda', 'Soda', 'Soda']
4

4 に答える 4

2

NPEが言ったように、xではなくsをチェックしています。sは要素の全リストであり、xはsの現在の要素のプレースホルダーです。

def something(s):
    for x in s:
        if isinstance(x, str):
            print(x)
        if isinstance(x, tuple):
            for i in range(x[0]):
                print x[1]
于 2012-12-01T14:04:06.017 に答える
1

1つの問題は、チェックインしていて、チェックインしsていないことです。xisinstance

isinstance(s, ...

また、このスタイルのプログラミングは非常に非Python的であることも指摘しておく必要があります。おそらく、なぜこれを行っているのかを説明していただければ、このアプローチを改善できる可能性があります。

于 2012-12-01T13:57:28.747 に答える
1

Python 3.2:

    def something(s):
            for i in s:
               if isinstance(i,str):
                    print(i)
            else:
                print(i[0]*i[1])

それは印刷されます

    1stString
    2ndString
    PiePiePie
    SodaSodaSodaSoda
于 2012-12-01T14:16:50.070 に答える
0

私はジェネレータ関数を使用します:

def yielder(sequ):
    for E in sequ:
        if isinstance(E,str):
            yield E
        else:
            ss = E[1]
            for i in xrange(E[0]):
                yield ss

li = ["1stString", "2ndString", (3, "Pie"), (4, "Soda")]

print li
print '----------------------------'
print list(yielder(li))
print '----------------------------'
print '\n'.join(yielder(li))

結果

['1stString', '2ndString', (3, 'Pie'), (4, 'Soda')]
----------------------------
['1stString', '2ndString', 'Pie', 'Pie', 'Pie', 'Soda', 'Soda', 'Soda', 'Soda']
----------------------------
1stString
2ndString
Pie
Pie
Pie
Soda
Soda
Soda
Soda
于 2012-12-01T15:36:25.317 に答える