我需要编写一个函数,该函数返回最右边的2个字符移到最前面的字符串的副本。这是我的代码:
def go_right(mystr):
if mystr >= 2:
for i in range(len(mystr)):
a = mystr[-2:] + mystr[:-2]
return a
上面的代码可以正常工作,但是我似乎无法解决为什么不能做到这一点:
def go_right(mystr):
if mystr >= 2:
for i in range(len(mystr)-2):
a = mystr[-2:] + mystr
return a
如果我在问候中使用上面的函数,它将简单地返回“ lohello”。为什么-2似乎不影响mystr?我以为应该迭代除最后两个字符以外的每个字符?如果有人可以帮助我澄清这一点,我将不胜感激。
最佳答案
在
def go_right(mystr):
if mystr >= 2:
for i in range(len(mystr)):
a = mystr[-2:] + mystr[:-2]
return a
永远不会使用变量
i
,也不会修改mystr。因此,a = mystr[-2:] + mystr[:-2]
被执行len(mystr)次,一次又一次地执行相同的操作。因此,更改for循环的长度不会更改任何内容也就不足为奇了,因为for循环的存在并不执行任何操作。
您的方法等效于
def go_right(mystr):
if mystr >= 2:
a = mystr[-2:] + mystr[:-2]
return a
并且此代码中仍然存在错误。 len(mystr)> = 2代替mystr> = 2,如下所示:
def go_right(mystr):
if len(mystr) >= 2:
a = mystr[-2:] + mystr[:-2]
return a
(比较字符串和数字的语义是始终将它们比较为false,例如
"a" >= 2
为True
)但是,现在当mystr的长度为0或1时,这将产生错误:'UnboundLocalError:分配前引用的局部变量'a'。解决此问题的一种方法是:
def go_right(mystr):
if len(mystr) >= 2:
return mystr[-2:] + mystr[:-2]
return mystr
关于python - Python函数(入门),我们在Stack Overflow上找到一个类似的问题:https://stackoverflow.com/questions/16095201/