2016-10-13 113 views
0

我需要幫助,在raw_input的一行中爲字典添加名稱和電話號碼。它應該看起來像這樣:add John 123(添加名字約翰與數字123)。這裏是我的代碼:Python - 交互式電話簿

def phonebook(): 
    pb={} 
    while True: 
     val,q,w=raw_input().split(" ") 
     if val=='add': 
      if q in pb: 
       print 
       print "This name already exists" 
       print 
      else: 
       pb[q]=w #lägger till namn + nummer i dictionary 
     if val=='lookup': 
      if q in pb: 
       print 
       print pb[q] 
       print 
      else: 
       print "Name is not in phonebook" 
       print 

我得到解壓縮錯誤。有小費嗎?還有另一種方法可以做到嗎?

回答

2

下面的行假設你準確鍵入每個3個字由空格字符分隔:

val, q, w = raw_input().split(" ") 

如果有少於或多於3個字(它是這種情況時,使用查找命令,ISN是嗎?),你會得到一個解壓錯誤。

你可以得到輸入一個獨特的變量,然後測試其第一個元素,以避免錯誤:

in_ = raw_input().split(" ") 
if in_[0] == 'add': 
    # process add action 
if in_[0] == 'lookup': 
    # process lookup action 

特別提示:您不需要給空格字符split方法,因爲它是默認值:

raw_input().split() # will work as well 
+0

謝謝你,非常有幫助! –

1

我想你,當你查找有人用「查找約翰」的解包誤差。代碼在分割(「」)中查找第三個值,但沒有找到。

我不知道如果這可能幫助:

def phonebook(): 
pb={} 
while True: 
    vals = raw_input().split(" ") 
    if vals[0] == 'add': 
     q = vals[1] 
     w = vals[2] 
     if q in pb: 
      print "This name already exists" 
     else: 
      pb[q]=w #lägger till namn + nummer i dictionary 
    elif vals[0]=='lookup': 
     q = vals[1] 
     if q in pb: 
      print 
      print str(q) + "'s number is: " + str(pb[q]) 
      print 
     else: 
      print "Name is not in phonebook" 
      print 

而歸我:

>add j 12 
>add j 12 
This name already exists 
>lookup j 

j's number is: 12 

>lookup j 12 

j's number is: 12 

>lookup k 
Name is not in phonebook