Python编程函数用于重复

时间:2013-10-09 00:27:19

标签: python

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"有人可以给我一些提示我应该如何写这个吗?

6 个答案:

答案 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'
>>>

主要是,这利用了字符串的join方法和内置的range

答案 1 :(得分:3)

您要求的内容已经存在:str.joinjoin只是在做艰难的事情;我们仍然需要一些容易的部分......但这很容易。

另外,正如其他人所指出的那样,您可以在字符串上使用*运算符来获取大部分内容。但是,尽管我自己写了差不多的文章,但我觉得你不明白为什么会那样。

您甚至可以将两者结合起来: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)