Python 将一个字符串重复n次并打印n行

Python 将一个字符串重复n次并打印n行,python,recursion,Python,Recursion,我被一个问题困扰了一段时间: 我希望创建一个使用字符串和正整数的python函数。函数将打印字符串n次,共n行。我不能使用循环,只能使用递归 e、 g 每当我尝试创建这样做的函数时,该函数都会逐渐减小字符串的长度: e、 g 我的代码是这样的: def repeat(a, n): if n == 0: print(a*n) else: print(a*n) repeat(a, n-1) 任何帮助都将不胜感激,谢谢 试试这个 def f(string, n, c=0):

我被一个问题困扰了一段时间:

我希望创建一个使用字符串和正整数的python函数。函数将打印字符串n次,共n行。我不能使用循环,只能使用递归

e、 g

每当我尝试创建这样做的函数时,该函数都会逐渐减小字符串的长度:

e、 g

我的代码是这样的:

def repeat(a, n):
if n == 0:
    print(a*n)
else:
    print(a*n)
    repeat(a, n-1)
任何帮助都将不胜感激,谢谢

试试这个

def f(string, n, c=0):
    if c < n:
        print(string * n)
        f(string, n, c=c + 1)

f('abc', 3)
def(字符串,n,c=0):
如果c
你真的很接近

def repeat(a, n):
    def rep(a, c):
        if c > 0:
            print(a)
            rep(a, c - 1)
    return rep(a * n, n)
print(repeat('ala', 2))
alaala
alaala

带闭包的函数可以完成这项工作。

所以您只需要额外的参数,它会告诉您已经运行该函数多少次,并且它应该有默认值,因为首先函数必须有两个参数(
str
和正数)

输出

helphelphelp
helphelphelp
helphelphelp
helphelphelp
您应该(可选)传递第三个参数,该参数处理剩余行数的递减:

def repeat(string, times, lines_left=None):
    print(string * times)

    if(lines_left is None):
        lines_left = times
    lines_left = lines_left - 1

    if(lines_left > 0):
        repeat(string, times, lines_left)
一班轮

def repeat(a,n):
    print((((a*n)+'\n')*n)[:-1])
让我们把这个分开

  • a*n
    重复字符串
    n
    次,这是您在一行中想要的
  • +'\n'
    在字符串中添加新行,以便转到下一行
  • *n
    因为您需要重复
    n次
  • [:-1]
    将删除最后一行
    \n
    ,因为默认情况下
    print
    会放置新行
    因此,您不知道
    n-1
    在做什么?是的,我想保留字符串在一行中打印的次数作为固定的参数,但我希望函数将该行重复n次。提示:您可以将第一个参数修改为
    repeat
    ,方法与修改第二个参数相同。不是在递归调用中传递
    n
    ,而是传递
    n-1
    。因此,与其传递
    a
    ,不如传递其他东西?非常接近,我希望打印(a*n)n次不知道为什么这会被提升,因为它实际上与OP的方法做了相同的事情。通常,最好避免嵌套函数,除非你有非常有力的理由支持它。它也更难测试。在这种情况下,我可以看到动机,与3参数函数相比,这种解决方案的一个优点是它消除了错误传递3个参数的可能性。通过将条件更改为
    (如果c>0
    ),您可以使
    rep
    稍微干净一点,这样您就不需要编写单行返回statement@zyxue是的,如你所说的,改变陈述可能是个更好的主意。已编辑。这可以减少,但我想详细说明它的自解释性质。camelCase不太像python。啊,谢谢@zysue!我已经有一段时间没有使用Python了……忘记了那个。我喜欢计数的技巧,这样你就可以使用默认的
    0
    作为第三个参数。这很好,也很容易理解!非常感谢。计数是一种很好的方法,它不使用递归,尽管我假设“需要时使用递归”@zyzue我解释了这些步骤。您可以始终为步骤设置临时变量。
    helphelphelp
    helphelphelp
    helphelphelp
    helphelphelp
    
    def repeat(string, times, lines_left=None):
        print(string * times)
    
        if(lines_left is None):
            lines_left = times
        lines_left = lines_left - 1
    
        if(lines_left > 0):
            repeat(string, times, lines_left)
    
    def repeat(a,n):
        print((((a*n)+'\n')*n)[:-1])