python-len方法不好

python-len方法不好,python,python-3.x,function,methods,Python,Python 3.x,Function,Methods,因此,我尝试进行MacDonald挑战。给定一个参数名为的函数,返回它的MacDonald版本,第一个和第四个字母大写。 如果我在没有任何If-else的情况下尝试代码,并且只传入mac,则会发生错误。因此,我说如果名称的长度小于5个字母,则打印出该名称太短。否则,请使用macdonald版本。 然而,出于某种原因,len在这里给出了一个错误 def old_macdonald(name): firstLetter = name[0].capitalize() fourthLet

因此,我尝试进行MacDonald挑战。给定一个参数名为的函数,返回它的MacDonald版本,第一个和第四个字母大写。 如果我在没有任何If-else的情况下尝试代码,并且只传入mac,则会发生错误。因此,我说如果名称的长度小于5个字母,则打印出该名称太短。否则,请使用macdonald版本。 然而,出于某种原因,len在这里给出了一个错误

def old_macdonald(name):
    firstLetter = name[0].capitalize()
    fourthLetter = name[3].capitalize()
    inBetween = name[1:3]
    last = name[4:]
    newName = firstLetter + inBetween + fourthLetter + last
    if len(newName) < 4:
        print("name is too short.")
    else:
        print(newName)
old_macdonald("mac")
我不认为len抛出了异常,但就像没有if条件的版本一样,字符串操作也抛出了异常


在代码的else部分执行字符串操作以避免出现异常。

按照Jens的建议,我将if检查放在了所有内容之上,因为如果名称太短,您希望终止函数,并在if检查中返回if检查以断开结束函数

def old_macdonald(name):
    if len(name)< 4:
        print("name is too short.")
        return
    firstLetter = name[0].capitalize()
    fourthLetter = name[3].capitalize()
    inBetween = name[1:3]
    last = name[4:]
    newName = firstLetter + inBetween + fourthLetter + last
    print(newName)

old_macdonald("mac")
old_macdonald("macdonald")
结果如下
无论如何,您仍在尝试执行相同的操作,len并没有向您抛出错误,代码的上述部分给出了错误


只需将代码移到函数的else部分,就可以了。您需要这样做的原因是,您需要先检查,然后执行,而不是先执行再检查。

请复制并粘贴len在您的问题中给出的错误和回溯。错误的不是len,而是名称[3]-mac中没有第四个字符。@georg:我正要提到这一点,但如果您已经这么做了,我不会:-@StorMy:在用大写字母&co解析名称之前,您应该编写if lennewName<4:的代码,否则您将为过短的名称编写不必要的代码。