所以,我想创建一个函数,它接受多个字符串和元组的列表,它的作用是,如果它是一个字符串,它只打印字符串,但如果它是一个元组,则元组取整数并且一个字符串,它将它们相乘。
示例:
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']
答案 0 :(得分:2)
正如NPE所说,你正在检查的不是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]
答案 1 :(得分:1)
一个问题是,您正在s
中检查x
而不是isinstance
:
isinstance(s, ...
我还应该指出,这种编程风格非常非Pythonic。也许如果你解释了为什么要这样做,我们或许可以改进这种方法。
答案 2 :(得分: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
答案 3 :(得分: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