2013-04-08 70 views
-1

我有一个程序,加载名称列表,您可以找到并添加名称到列表中。我必须编写一个parse_command函数,它接受一个表示一个命令及其参数的字符串,并返回一个由该命令组成的对和一个包含命令参数的元组(如果其具有正确数量的参数的有效命令)。否则,它返回对(无,无)在Python中的交互功能

输出应该是这个样子:

>>>parse_command('e') 
('e',()) 
>>>parse_command('f') 
(None, None) 
>>>parse_command('f John Smith') 
('f', ('John Smith',)) 
>>>parse_command('a John Smith, Washington DC, 02532223, 6 August') 
('a', ('John Smith', 'Washington DC', '02532223', '6 August')) 
>>>parse_command('a John Smith, Washington, 1234') 
(None, None) 
>>>parse_command('x') 
(None, None) 

到目前为止,我有这样的:

def parse_command(command_string): 
i = command_string 
if i[0] == 'e': 
    return ('e',()) 
elif i[0] == 'f': 
    command = i[1:] 
    if bool(command) == True: 
     return ('f', (command,)) 
    elif bool(command) == False: 
     return (None, None) 
elif i[0] == 'a': 
    command = i[1:] 
    section = i.split(',') 
    if len(section) == 4: 
     return ('a', tuple(i[2:].split(', '))) 
    else: 
     return (None, None) 

一切正常,我也得到了输出我应该但我想写一个交互功能。因此,如果用户想要查找名称或添加名称,他们可以轻松完成。要将某人添加到列表中,用户可以输入'a',然后输入具有所有详细信息的人员。要找到他们会输入'f'的人,然后输入该人的姓名。如果他们想退出程序,他们只需键入'e'。如果'a,e或f'未被使用'Invalid Command'将被返回。一个例子是这样的:

>>>List of Names: names.csv 
>>>Command: f John Smith 
John Smith: Chicago, 12345, 4 July 
>>>Command: f roeuh eoruhg 
roeuh eoruhg Unknown Friend 
Invalid Command: f 
>>>Command: a John Smith, LA, 12345, 3 July 
John Smith is already a friend 
>>>Command: a Roger Little, Texas, 12345, 9 August 
>>>Command: f Roget Little 
Roger Little: Texas, 12345, 9 August 
>>>Command: e 
Saving changes... 
Exiting... 

到目前为止,我写了这个(load_names,add_name和DISPLAY_NAME已写入):

def interact(): 
names = load_names(raw_input('List of Names: ')) 
ended = False 
while True: 
    result = parse_command(raw_input('Command: ')) 
    if result is not (None, None): 
     if result[0] == 'f': 
      return display_name(result[1], names) 
      pass 
     elif result[0] == 'a': 
      return add_name(result[1:], names) 
      pass 
     elif result[0] == 'e': 
      return 'Saving Changes...' + /n 'Exiting...' 
      ended = True 
      pass 

我有点卡住,正在寻找一些帮助互动功能,有没有人有任何想法?

在此先感谢!

+1

也许你想看看['cmd'](http://docs.python.org/2/library/cmd.html)模块... – sloth 2013-04-08 13:45:52

+2

对不起,这段代码太可怕了,和不可读的,我已经读了你的问题两次,我几乎不知道你在这里做什么。我建议你从编码中抽出时间,多学习一些你想做的事情,找到类似于你在做的事情并研究它。因为无论你在做什么,它都不起作用。 – 2013-04-08 13:45:57

+0

你的意思是交互功能@InbarRose?基本上,要将某人添加到列表中,请使用“a”,然后是详细信息。找到你使用'f'的人后面跟着他们的名字。 'e'只是退出程序。 – 2013-04-08 13:47:53

回答

0

我想你正试图实现一种方法来与代码之外的文件或数据库等持久对象进行交互。我会推荐使用Python SQLite。由于您使用的语言表明了一项任务,而您自己的要求就是帮助,所以我没有提供完整的解决方案。

+1

我写过一个函数来加载文件并保存到文件。宁愿保持代码尽可能基本,如果这是有道理的?尽管感谢您的建议。 – 2013-04-08 14:38:29

+1

不,它没有意义,你会很快发现一个文件不能给你足够的功能。你正在设计*是一个数据库。那么,为什么不能成为一个呢? SQLite是专为你设计的,它是一个简单的文件,而不是一个真正的数据库,只要你使用API​​,它就像一个数据库。非常简单,正确的编码。 – 2013-04-08 14:43:04

+1

这是一项家庭作业任务,我只是按照指示说的去做。 – 2013-04-08 14:50:39