我正在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
人们是我的人名单。
我和它没有工作,我不知道我做错了什么。请帮忙!
答案 0 :(得分:5)
str.lower
是一个功能。 str.lower()
调用该函数并返回该字符串的小写版本。
Python有一个有用的功能,用于检查序列中的any
值是否为True
。所以我们可以像这样建立一个布尔值序列:
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)
如果您想返回person
,可以使用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
。如果不使用默认返回,则必须使用生成器表达式。所以这告诉你一个人的存在,并给你他们的记录。