我是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'语句不生成字符串'没有人喜欢这个'。有没有解决这个问题的方法?
答案 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)