def main() :
n = 5
def repeat(string, n, delim) :
name = "string" + "delim"
nametwo = name * n
print(nametwo)
我需要编写一个函数def repeat(string, n, delim)
,它返回string "string"
重复n次,用字符串deli分隔。 exampleL repeat("ho", 3, ", ") "ho, ho, ho"
有人可以给我一些提示我应该如何写这个吗?
答案 0 :(得分:3)
看看这个:
>>> ", ".join("ho" for _ in range(3))
'ho, ho, ho'
>>> def repeat(string, n, delim):
... return delim.join(string for _ in range(n))
...
>>> repeat("ho", 3, ", ")
'ho, ho, ho'
>>>
答案 1 :(得分:3)
您要求的内容已经存在:str.join
。 join
只是在做艰难的事情;我们仍然需要一些容易的部分......但这很容易。
另外,正如其他人所指出的那样,您可以在字符串上使用*
运算符来获取大部分内容。但是,尽管我自己写了差不多的文章,但我觉得你不明白为什么会那样。
您甚至可以将两者结合起来:delim.join([string] * n)
。 (这里,我正在重复一个列表而不是字符串本身,因为否则我只会得到一个大字符串"spamspamspamspamspam"
而不是五个单独的"spam"
到{{ 1}} up。)
但是,我会假设这是一项家庭作业或自学教学,你想知道如何从头开始写作。
通常情况下,当你想重复某些事情时,你需要一个循环。
如果要为列表join
中的每个元素重复某些内容,请编写循环spam
。
但是如果你想重复5次怎么办?没有“5号中的每个元素”。你需要找到有5个元素的东西。 range(5)
对此完美无缺。所以:
for element in spam:
接下来,您已经知道如何使用def repeat(string, n, delim):
for i in range(n):
# something
运算符连接字符串。所以,让我们从一个空字符串开始,并连接到它的结尾:
+
但这有一个问题:
def repeat(string, n, delim):
result = ""
for i in range(n):
result = result + string + delim
return result
只有适量的垃圾邮件,但是逗号太多了。
如果你回到>>> repeat("spam", 5, ", ")
'spam, spam, spam, spam, spam, '
解决方案,你会发现这与*
是一回事,我们只是走了很长的路。无论哪种方式,你都会遇到同样的问题。
你如何避免这种情况?
在这里你必须有点棘手。您可以将最后一个值或特殊值视为特殊值。或者你可以查看(string + delim) * n
到目前为止看看你是否刚开始。或者您可以让它添加额外的分隔符,然后在最后将其丢弃。我会告诉你其中一个选项,但你应该尝试自己写另一个。 (一旦你弄清楚如何调整算法以使其成为可能,看result
可能是最简单的,也是最干净的。)
result
我最后砍掉额外分隔符的方式是使用切片,负索引。您可能还没有学到这一点,这就是您应该为自己编写解决方案的原因。 (另外,这可能是最讨厌的解决方案。)
一直回到顶部,如果你玩def repeat(string, n, delim):
result = ""
for i in range(n):
result = result + string + delim
return result[:-len(delim)]
,你会发现它为你解决了这个问题。它显然没有使用魔法,所以你可能会考虑看它是如何实现的。不幸的是,它可能是this文件中某处的一大堆C代码,不是很好的Python,所以你可能不会学到太多东西。
答案 2 :(得分:1)
你太近了..
def repeat(string, n, delim):
name = string + delim
nametwo = name*n
print(nametwo)
你不需要那里的引号。使用引号,name
的值将是“stringdelim”,而不是“string”和“delim”的值。
答案 3 :(得分:0)
>>> def repeat(s, n, d):
... return d.join([s]*n)
...
>>> repeat("ho", 3, ", ")
'ho, ho, ho'
您可以使用n
itertools.repeat
可能非常大)
>>> import itertools as it
>>> def repeat(s, n, d):
... return d.join(it.repeat(s, n))
...
>>> repeat("ho", 3, ", ")
'ho, ho, ho'
答案 4 :(得分:0)
def repeat(string, n, delim):
print((string + delim)*(n-1) + string*(n>0))
>>> repeat('ho', 5, ", ")
ho, ho, ho, ho, ho
答案 5 :(得分:0)
这是一个递归版本
def repeat(s, n, d):
if n == 0:
return ""
if n == 1:
return s
return repeat(s, n/2, d) + d + repeat(s, n - n/2, d)