我在 python 中创建了一个电话寄存器,用户可以在其中选择将新人添加到寄存器中。我需要获取代码以查找该用户是否已经在注册中。我的对象具有属性 surname、firstname、phonenumber 和 address。
我的代码是这样的:
def personInRegister(surname, firstname, phonenumber, address):
matchInRegister = False
x = 0
while x in range(len(people)):
if (people[x].surname.lower == surname.lower and
people[x].firstname.lower == firstname.lower and
people[x].phonenumber == phonenumber and
people[x].address.lower == address.lower):
matchInRegister = True
break
else:
x = x+1
return matchInRegister
people 是我的人员列表。
我并没有让它工作,而且我不知道我做错了什么。请帮忙!
请您参考如下方法:
str.lower是一个函数。 str.lower() 调用该函数并返回字符串的小写版本。
Python 有一个有用的函数来检查 any 是否存在。序列中的值为 True。所以我们可以像这样构建一个 bool 值序列:
def personInRegister(surname, firstname, phonenumber, address):
return any(person.surname.lower() == surname.lower() and
person.firstname.lower() == firstname.lower() and
person.phonenumber == phonenumber and
person.address.lower() == address.lower()
for person in people)
为了避免每次循环都为查询调用 lower(),您可以将查询创建为元组并进行比较:
def personInRegister(surname, firstname, phonenumber, address):
query = (surname.lower(),
firstname.lower(),
phonenumber,
address.lower())
return any((person.surname.lower(),
person.firstname.lower(),
person.phonenumber,
person.address.lower()) == query
for person in people)
如果你想返回人,你可以使用next :
def personInRegister(surname, firstname, phonenumber, address):
query = (surname.lower(),
firstname.lower(),
phonenumber,
address.lower())
return next((person for person in people
if query == (person.surname.lower(),
person.firstname.lower(),
person.phonenumber,
person.address.lower())),
None)
如果找不到该人,这将返回 None。如果不使用默认返回,则必须使用生成器表达式。所以这告诉你一个人的存在,并给你他们的记录。
