我正在学习python并尝试制作电话簿.相当标准的练习,但我在试图让我的搜索功能通过字典中的每个值时遇到问题.如果有匹配,它只会返回第一个项目,否则它只会返回None,我不确定我做错了什么.
使用python 2.6没有特别的原因.
phonebook = {"id": 1, "fname" : "Mario", "lname": "Mario", "phone": "XXX-XXX-XXXX"}, \
{"id": 2, "fname" : "Luigi", "lname": "Mario", "phone": "505-123-4567"}
def search_fname(name):
name = str.capitalize(name)
for n in phonebook:
if name == n["fname"]:
return n["id"]
else:
print "No match found."
return 0
def search():
name = raw_input("Please enter the first name: ")
pid = search_fname(name)
if pid != 0:
for n in phonebook:
if n["id"] == pid:
print n["fname"], n["lname"], n["phone"]
Run Code Online (Sandbox Code Playgroud)
你第一次测试就回来了:
for n in phonebook:
if name == n["fname"]:
return n["id"]
else:
print "No match found."
return 0
Run Code Online (Sandbox Code Playgroud)
因此,如果电话簿中的第一个条目(绑定)n匹配(如此name = "Mario"),则返回n['id'],否则返回0.for当您退出该功能时,您的循环永远不会在此处迭代电话簿的其余部分.
else完全移除块; 你不会知道,如果没有比赛,直到您已经尝试了所有的条目,所以把你print 以后的for循环:
for n in phonebook:
if name == n["fname"]:
return n["id"]
print "No match found."
return 0
Run Code Online (Sandbox Code Playgroud)