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 所说,您正在检查 s 而不是 x。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

蟒蛇 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 回答
1

一个问题是您正在检查s而不是xisinstance

isinstance(s, ...

我还应该指出,这种编程风格非常不符合 Python 风格。也许如果您解释了为什么要这样做,我们也许可以改进这种方法。

于 2012-12-01T13:57:28.747 回答
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 回答