Python 将一个字符串重复n次并打印n行
我被一个问题困扰了一段时间: 我希望创建一个使用字符串和正整数的python函数。函数将打印字符串n次,共n行。我不能使用循环,只能使用递归 e、 g 每当我尝试创建这样做的函数时,该函数都会逐渐减小字符串的长度: e、 g 我的代码是这样的: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):
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])