Python 我如何编写自己的函数,它将字符串和数字作为参数并打印;字符串*number";
我的家庭作业问题是: Python允许您通过将字符串乘以整数来重复该字符串,例如,“Hi”*3将给出“hihi”。假设此功能不存在,而是编写一个名为repeat的函数,该函数接受字符串和整数作为参数。函数应该返回一个原始字符串的字符串,该字符串重复指定的次数,例如repeat('Hi',3)应该返回'hihi' 我的回答如下:Python 我如何编写自己的函数,它将字符串和数字作为参数并打印;字符串*number";,python,Python,我的家庭作业问题是: Python允许您通过将字符串乘以整数来重复该字符串,例如,“Hi”*3将给出“hihi”。假设此功能不存在,而是编写一个名为repeat的函数,该函数接受字符串和整数作为参数。函数应该返回一个原始字符串的字符串,该字符串重复指定的次数,例如repeat('Hi',3)应该返回'hihi' 我的回答如下: def repeat(string,number): fstring = "" for var in range(1,number+1
def repeat(string,number):
fstring = ""
for var in range(1,number+1):
fstring+=fstring+string
print(fstring)
repeat("Hi",3)
但这并不是我所期望的:
hihihihi
. 我看不出错误,帮帮我
请记住,此函数是“值返回函数”,如果要打印,请使用:
print(repeat("Hi",3))
以下是每次将上一个
fstring
加倍:
fstring+=fstring+string
由于它使用+=
运算符,因此它相当于:
fstring = fstring + fstring + string
只需将其更改为:
fstring += string
要修复它。从您的代码:
fstring+=fstring+string
这将获取任何已存在的fstring
,加上string
,并将其添加到fstring
因此,fstring
从'
变为'+'+'Hi'
,即'Hi'
。然后到'Hi'+'Hi'+'Hi'
,最后到'hihi'+'HiHiHi'+'Hi'
另外,对于范围(1,数字+1)内的var,您可以使用:
,但是对于范围(0,数字)内的var,使用:
,可读性更高,速度更快,因为您实际上不需要number
的值从1
到number
,您只需要它运行number
次
您也不需要var
,在这种情况下,您可以使用\ucode>,它告诉Python忽略实际的循环变量名
您可能不希望在最后打印,而是希望函数返回结果,以便可以在某个地方使用它(例如,用于打印)
最后,我建议不要调用变量string
,因为这可能会与内置的str
混淆。类似于s
的名称是临时字符串的常用名称
所以,你最终会得到:
def repeat(s, number):
result = ''
for _ in range(0, number):
result += s
return result
print(repeat("Hi", 3))
赋值运算符+=
正在添加字符串和新字符串,因此您需要使用以下任一选项:
fstring=fstring+string
或
通过删除for循环中的+1,我可以让它工作。代码如下所示
def repeat(string,number):
fstring = ""
for var in range(1,number):
fstring+=fstring+string
print(fstring)
repeat("Hi",3)
我认为最好的解释方法是手动运行迭代。
最初,fstring
为空,因此可以将fstring
和string
添加到fstring
变量中。
结果是:“+”嗨“=”嗨“,一切都好
第二次迭代:
fstring=“嗨”
string=“嗨”
您可能认为结果是“HiHi”,但您正在累积到fstring
变量!
所以它是:
原始fstring
+fstring
+string
=HiHiHi
第三次迭代:
原始字符串已经是HiHiHi
,我们添加了另一个HiHiHi
,并添加了原始字符串。所以我们有七个“你好”
该函数将不断向自身添加fstring
,因此它将变得非常大、非常快
解决方案是只将原始字符串附加到for循环中的fstring
像这样:
fstring = ""
for var in range(1,number+1):
fstring+=string
print(fstring)
repeat("Hi",3)
这样,您就只添加了原始字符串。我投了否决票,因为我觉得您的答案与之前提供的其他答案没有任何补充,有些是您提供的答案。是的,我承认您的答案和其他最重要的答案是最快和最好的,值得投票,而我的答案不是,但我还是迟到了一两分钟,因此,以我的拙见,你可能会删除否决票(如果你认为,也可以不删除,我不会介意),我不是在与我自己的答案进行比较(关于其他方面的细节,可以认为过于宽泛),而是@TomKarzes清晰、简短、切中要害的答案,它提供了完全相同的解决方案,但已在3分钟前发布。您答案中的代码与问题中的代码相同。@HiterDean哦,糟糕,我一定不是偶然从我的编辑器中复制了代码。此代码仅在数字=3时有效,但如果我选择数字=1或数字=4,则代码将不起作用。().
def repeat(string,number):
fstring = ""
for var in range(1,number):
fstring+=fstring+string
print(fstring)
repeat("Hi",3)
fstring = ""
for var in range(1,number+1):
fstring+=string
print(fstring)
repeat("Hi",3)