2015-10-15 25 views
0

我要在Python中創建一個電話簿應具備以下功能:Python的更新別名和家長

  • 添加名稱數量 - 增加了數量字典。名稱必須是唯一的,也是數字。
  • 查找 - 打印相關
  • 別名名NEWNAME數 - 允許被搜索從NEWNAME
  • 變化名稱數量 - 更改相關的數字與現有的
  • 戒 - 退出程序

運行的程序應該是這樣的:

telebok> add peter.forsberg 12345 
telebok> lookup peter.forsberg 
12345 
telebok> alias peter.forsberg foppa 
telebok> lookup foppa 
12345 
telebok> alias foppa MR21 
telebok> change MR21 67890 
telebok> lookup peter.forsberg 
67890 

我得到的一切,除了換個工作:

def adressbook(): 
telebook = {"jacob.engert":"8472923777", "nisse":"092563243"} 
while True: 
    book = raw_input("telebook> ").lower() 
    lista = book.split() 
    if "add" in lista[0]: 
     n = lista[1] 
     x = lista[2] 
     if x in telebook.values(): 
      print "Number already exists!" 
     elif n in telebook: 
      print "Name already exists!" 
     else: 
      telebook[n] = x 
      print telebook 
    elif "lookup" in lista[0]: 
     n = lista[1] 
     if n in telebook: 
      print n, "", telebook[n] 
     elif n.isdigit(): 
      print "Type only characters!" 
     else: 
      print "This person does not exist!" 
    elif "alias" in lista[0]: 
     n = lista[1] 
     alias = lista[2] 
     if n in telebook: 
      v = telebook.get(n) 
      telebook[alias] = v 

    elif "change" in lista[0]: 
     key = lista[1] 
     value = telebook.get(key) 
     newvalue = lista[2] 
     for key, value in telebook.items(): 
      telebook.update({key:newvalue}) 
      print telebook 

所以,當我更新的別名,我想要更新原件,但我得到這個結果:

>>> adressbook() 
telebook> add ove 345347657 
{'jacob.engert': '8472923777', 'ove': '345347657', 'nisse': '092563243'} 
telebook> alias ove mr.o 
telebook> lookup mr.o 
mr.o 345347657 
telebook> change mr.o 534523234 
{'mr.o': '534523234', 'jacob.engert': '8472923777', 'ove': '345347657', nisse': '092563243'} 
{'mr.o': '534523234', 'jacob.engert': '534523234', 'ove': '345347657', 'nisse': '092563243'} 
{'mr.o': '534523234', 'jacob.engert': '534523234', 'ove': '534523234', 'nisse': '092563243'} 
{'mr.o': '534523234', 'jacob.engert': '534523234', 'ove': '534523234', 'nisse': '534523234'} 
telebook> 

所以我的問題是,如何才能讓這個當我改變數的別名,原來的數量也將發生變化?

+1

爲什麼你使用你的病情'in'爲'if's?這樣'xaddy'的輸入就可以工作。使用普通的''==相等運算 – Pynchia

+0

另外,請學習如何使用'.get'方法上的字典。如果在密鑰不存在的情況下爲其提供返回值,它會使生活變得更加簡單。 – Pynchia

回答

0

你幾乎在正確的軌道上。

爲了更改所有條目(別名和父級),您需要查找與用戶想要更改的條目號碼相同的條目(無論是否是別名),並將其號碼替換爲新之一:

key = lista[1] 
newvalue = lista[2] 
present_value = telebook.get(key) 
if present_value: 
    for name, num in telebook.items(): 
     if num == present_value: 
      telebook[name] = newvalue 

或使用字典理解:

key = lista[1] 
newvalue = lista[2] 
present_value = telebook.get(key) 
if present_value: 
    upd = {name: newvalue for name, num in telebook.items() if num == present_value } 
    telebook.update(upd) 

,或者使用generator expression生成元組序列(dict.update,可同時接收)

key = lista[1] 
newvalue = lista[2] 
present_value = telebook.get(key) 
if present_value: 
    upd = ((name, newvalue) for name, num in telebook.items() if num == present_value) 
    telebook.update(upd) 
+0

感謝您的建議,看起來不錯,這正是我想要的,但不幸的是我沒有讓你的代碼工作。我使用Python 2.7.10,我在年底得到語法錯誤: NUM ==現值:<--- – Hacjob

+0

我非常抱歉。現在編輯 – Pynchia