如前一个(但不同的)问题所述,我正试图找出一个带有Python的“简单”字典/数据库,它将从十个列表中检索一个名称,并提供所请求的信息。即输入可以是'John phone',其中输出是'John的电话号码是0401'(我已经拍了拍);但我也可以输入'John Birthday'或'John hobbies',输出也会对应。
由于我是一个完整的菜鸟,我甚至不确定从哪里开始。几个小时的谷歌搜索和阅读讲义到目前为止没有任何结果。 我觉得它与多重参数%函数有关,但我们的讲师真的不清楚如何进一步研究它。 到目前为止,我所拥有的是:
#!/usr/bin/python
friends = {'John': {'phone' : '0401',
'birthday' : '31 July',
'address' : 'UK',
'interests' : ['a', 'b', 'c']},
'Harry': {'phone' : '0402',
'birthday' : '2 August',
'address' : 'Hungary',
'interests' : ['d', 'e', 'f']}}
name = raw_input ('Please enter search criteria: ')
if name in friends:
print "%s's phone number is: %s" % (name, friends[name]['phone'])
else:
print 'no data'
我还想使用'while'功能,因此一旦获得该信息,prog就不会关闭,但不确定这是否合适。 任何指针都会很棒,即使它是“尝试这种”的暗示,或指向相关网站的链接。
答案 0 :(得分:5)
由于这是家庭作业,我将限制我的回答一些提示:
tok = name.split()
会将name
拆分为单词列表,因此'John address'
将成为['John', 'address']
。tok[0]
和tok[1]
来访问,并使用它们转换为friends
以获取相关人员,然后获取相关字段。while
循环中没有问题,这样用户就可以执行多个查询。唯一要弄清楚的是你将如何退出该循环。答案 1 :(得分:2)
根据您的示例代码,“John phone”无法正常工作,因为它实际上会查找“John phone”作为名称(并且“phone”是硬编码的)。例如,尝试这样的代码:
response = raw_input('Please enter search criteria: ').split()
try:
print "%s's %s is %s" % (response[0], response[1], friends[response[0]][response[1]])
except KeyError:
print 'no data'
split()分别获取每个参数,然后可以用[0]和[1](等等)引用。您已经使用%替换进入正确的轨道,但这种方法将使其具有更高的可用性和可读性。
关键是你不需要检查名称是否匹配(或标准是否匹配)。假设它会在那里 - 并且在特殊情况下(未找到匹配),它可以按预期返回“无数据”。
Please enter search criteria: John phone
John's phone is 0401
Please enter search criteria: Harry birthday
Harry's birthday is 2 August
答案 2 :(得分:0)
听取你问题第一部分的答案。对于第二部分,我建议用一个退出值(可能是“退出”),用户可以键入以退出程序,然后让你的while循环保持继续,而输入不是那个值。