我需要编写一个函数,该函数返回最右边的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" >= 2True

但是,现在当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/

10-11 07:37