用于重复的Python编程函数

2024-09-22 20:27:54 发布

您现在位置:Python中文网/ 问答频道 /正文

def main() :
    n = 5
    def repeat(string, n, delim) :

        name = "string" + "delim"
    nametwo = name * n
    print(nametwo)

我需要编写一个函数def repeat(string, n, delim),它返回重复n次的string "string",用字符串deli分隔。例如,repeat("ho", 3, ", ") "ho, ho, ho"有人能给我一些建议吗?我应该怎么写这篇文章?在


Tags: 函数字符串namestringmaindef建议repeat
3条回答

你要的已经存在:^{}join只是在做难的部分;我们仍然需要一些东西来处理简单的部分……但这就是最简单的部分。在

另外,正如其他人所指出的那样,您可以在字符串上使用*运算符来实现大部分目标。但是,尽管你自己差点就写好了,但我觉得你不明白为什么这是最重要的方式。在

你甚至可以把两者结合起来:delim.join([string] * n)。(这里,我重复一个列表而不是字符串本身,因为否则我只会得到一个大字符串"spamspamspamspamspam"而不是五个单独的"spam"向上join


但是,我假设这是一个家庭作业或自学尝试,你想知道如何从头开始写。在

通常,当你想重复某事时,你需要一个循环。在

如果要对列表spam中的每个元素重复某些操作,则需要编写循环for element in spam:。在

但是如果你想重复5次呢?没有“数字5中的每个元素”。你需要找到有5个元素的东西。而^{}正适合于此。所以:

def repeat(string, n, delim):
    for i in range(n):
        # something

接下来,您已经知道如何使用+运算符连接字符串。所以,让我们从一个空字符串开始,然后连接到它的末尾:

^{pr2}$

但这有一个问题:

>>> 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)]

我在末尾去掉多余的分隔符的方法是使用带负索引的切片。你可能还没有学会,这就是为什么你应该为自己写一个解决方案。(另外,这可能是最老套的解决方案。)

一直回到顶部,如果您使用join,您将看到它为您解决了这个问题。它显然没有使用魔术,所以你可以考虑看看它是如何实现的。不幸的是,它可能是this文件中的一大堆C代码,不是很清晰的Python,所以您可能不会学到太多。在

看看这个:

>>> ", ".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'
>>>

这主要利用了字符串的^{}方法和^{}内置函数。在

你离得太近了。。在

def repeat(string, n, delim):
      name = string + delim
      nametwo = name*n
      print(nametwo)

你不需要引号。使用引号,name的值将是“stringdelim”,而不是“string”和“delim”的值。在

相关问题 更多 >