Python字符串、算法(类似于(类似于facebook的)系统)



以下是我需要做的:实现一个函数,比如:[String]->String,它必须接受输入数组,其中包含喜欢某个项目的人的名字。它必须返回显示文本,如示例所示:

likes [] // must be "no one likes this"
likes ["Peter"] // must be "Peter likes this"
likes ["Jacob", "Alex"] // must be "Jacob and Alex like this"
likes ["Max", "John", "Mark"] // must be "Max, John and Mark like this"
likes ["Alex", "Jacob", "Mark", "Max"] // must be "Alex, Jacob and 2 others like this"

到目前为止,这是我的代码,只有第一个和第二个例子是正确的,我不知道如何将["eter"]转换为"Peter",以及如何只在最后加上"and"(在最后两个人/值之间:

def likes(names):
if names == []:
return str("no one likes this")
elif len(names) == 1:
return (str(names)) + " likes this"
elif 1<len(names)<=3:
return " and ".join(map(str,names)) + " like this"
else:
return ", ".join(map(str,names)) + " and " + str(len(names)-2)+" others like this"

第一种情况的输出为:"[彼得]喜欢这个"(应该等于"彼得喜欢这个"(对于最后两种情况:"Max and John and Mark like this"(应等于"Max,John and Mark such"(,"亚历克斯和雅各布,马克和马克斯以及其他两个这样的人"(应该等于"亚历克斯、雅各布和其他两个像这个(

我想我已经很接近了,如果有任何澄清,我将不胜感激!

您可以使用名称[0]访问列表的第一项。我还删除了不需要的地图调用。

def likes(names):
if len(names) == 0:
return "no one likes this"
elif len(names) == 1:
return names[0] + " likes this"
elif 1 < len(names) <= 3:
return " and ".join(names) + " like this"
else:
return ", ".join(names[0:2]) + f" and {str(len(names)-2)} others like this"
print(likes([]))                  # must be "no one likes this"
print(likes(["Peter"]))            # must be "Peter likes this"
print(likes(["Jacob", "Alex"]))    # must be "Jacob and Alex like this"
print(likes(["Max", "John", "Mark"]))          # must be "Max, John and Mark like this"
print(likes(["Alex", "Jacob", "Mark", "Max"])) # must be "Alex, Jacob and 2 others like this"

您可能需要查看str.join((方法:

>>> ",".join(["stack", "overflow"])                                                                                                                                                                            
>>> 'stack,overflow'

这个切片的特殊情况:

>>> l = [1,2,3]
>>> l[:-1]
[1, 2]

最新更新