我的if语句一直为空列表返回'None'

时间:2016-09-15 14:10:49

标签: python list function if-statement

我是Python编码的初学者,我一直在练习CodeWars练习。

这个练习基本上要求你在Facebook上重新创建“喜欢”的显示功能,即它如何显示你在帖子上的数字等。

这是我的代码:

def likes(names):
    for name in names:
        if len(names) == 0:
           return 'no one likes this'
        elif len(names) == 1:
           return '%s likes this' % (name)
        elif len(names) == 2:
           return '%s and %s like this' % (names[0], names[1])
        elif len(names) == 3:
           return '%s, %s and %s like this' % (names[0], names[1], names[2])
        elif len(names) >= 4:
           return '%s, %s and %s others like this' % (names[0], names[1], len(names) - 2)

print likes([])
print likes(['Peter'])
print likes(['Alex', 'Jacob', 'Mark', 'Max'])

打印出来:

None
Peter likes this
Alex, Jacob and 2 others like this

我的主要问题是,当参数:[]为空时,我的第一个'if'语句不生成字符串'没有人喜欢这个'。有没有解决这个问题的方法?

2 个答案:

答案 0 :(得分:7)

如果names是一个空列表,则根本不会执行for循环,这将导致函数返回None。您应该更改函数的结构(提示:您可能甚至不需要循环,至少不需要显式循环)。在第一次迭代中有一个循环然后return是没有意义的。

答案 1 :(得分:4)

你已经完成的for循环对于列表的每个元素都会出现一次,但你没有列表中的元素,所以循环不会出现,返回值将是"无"

def likes(names):
    #for name in names:  #LOOK HERE: you definetly not need this loop
    if len(names) == 0:
       return 'no one likes this'
    elif len(names) == 1:
       return '%s likes this' % (names[0])
    elif len(names) == 2:
       return '%s and %s like this' % (names[0], names[1])
    elif len(names) == 3:
       return '%s, %s and %s like this' % (names[0], names[1], names[2])
    elif len(names) >= 4:
       return '%s, %s and %s others like this' % (names[0], names[1], len(names) - 2)