2013-04-08 69 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