函数未返回预期的列表

2024-05-17 02:54:08 发布

您现在位置:Python中文网/ 问答频道 /正文

我有3个清单:

members = ['Alex', 'Danny', 'Kieran', 'Zoe', 'Caroline']
visitors = ['Scott', 'Helen', 'Raj', 'Danny']
signups = ['Helen', 'Scott']

函数应返回既不是现有成员也不是新成员的visitors列表。如果没有,则返回None

这是我的代码:

def guests(member,signup,visitor):
    visit = []
    for person in visitor:
        if person not in member and signup:
            visit.append(person)
            return visit
        return print("None.")

但是我的输出返回["Scott"]。我似乎不知道我做得不对的地方是什么


Tags: innonereturn成员visitscottpersonmember
3条回答

首先,您在获得第一个值之后返回,其次,您可能需要更改 if person not in member and signupif person not in member and person not in signup

members = ['Alex', 'Danny', 'Kieran', 'Zoe', 'Caroline']
visitors = ['Scott', 'Helen', 'Raj', 'Danny']
signups = ['Helen', 'Scott']
def guests(member,signup,visitor):
    visit = []
    for person in visitor:
        if person not in member and person not in signup:
            visit.append(person)
    return visit
print(guests(members,signups,visitors))

如果缩进错误,则在第一次出现已注册且不是成员的人员后返回列表的值,则应将缩进修正为:

def guests(member,signup,visitor):
    visit = []
    for person in visitor:
        if person not in member and person not in signup:
            visit.append(person)
    return visit if len(visit) != 0 else None

另外,请注意我是如何更改您的返回值的。您不应该返回Print('None'),因为虽然它最终将返回None(因为print返回None,这不是最佳实践)

person not in member and signup的计算结果为(person not in member) and (signup)

person为“Scott”时,第一部分为True,第二部分(signup)为非空列表,因此在布尔上下文中它被计算为True,因此整个条件为True

然后,立即return输出,而无需进一步循环

你的意思是:

def guests(member,signup,visitor):
    visit = []
    for person in visitor:
        if person not in member and person not in signup:
            visit.append(person)
    return visit if len(visit) != 0 else None

相关问题 更多 >