2016-05-17 31 views
0

我有這個程序,我寫了,我用了一個列表,因爲你可以輕鬆地追加到它。用字典,你不能追加到它。所以我想知道是否有辦法用字典而不是列表來編寫這個程序,如果是這樣的話,怎麼樣?如何使用字典而不是列表來實現此程序?

我希望輸出保持不變。只是當您將store = []更改爲字典store = {}時,那麼如何更改程序的其餘部分,以便僅更改從列表到字典的特定變量?

def SSN(): 

    store = [] 

    for i in range(0, 100): 
     store.append([]) 
    i = 0 
    name = 'key' 
    while(name != ''): 
     name = input('Enter Name: ') 
     if(name == ''): 
      if(i<1): 
       break 
      j=0 
      while(j < i): 
       print(store[j][0] + ' has SSN ' + store[j][1]) 
       j = j+1 
      break 
     j=0 
     val = 0 
     while(j < i): 
      if(name == store[j][0]): 
       val = 1 
       break 
      j = j + 1 
     if(val == 1): 
      update = input(name + ' has SSN ' + store[j][1] + '. Update? ') 
      if(update == 'y'): 
       store[j][1] = input('Enter SSN: ') 
     else: 
      ssn = input('Enter SSN: ') 
      store[i].append(name) 
      store[i].append(ssn) 
      i = i+1 
SSN() 

這正是我想要的,但它只是我想要的字典。 謝謝!

對於輸出,我有這樣的:

Enter Name:約翰邁克 wazowski 邁克 mike has SSN 5678. Update?Ÿ約翰 john has SSN 1234. Update?ň Enter Name: john has SSN 1234 mike has SSN 6644 wazowski has SSN 0000

凡隔開的話代表什麼用戶在程序提示時輸入。

+0

您能向我們展示一個輸入和期望輸出的例子嗎?確切地理解你的問題會更容易。 – Cyb3rFly3r

+0

@ Cyb3rFly3r在問題主體中更新。希望這可以幫助更多。結果,我希望這個保持不變。只是當你將'store = []''改成'store = {}'的字典時,那麼我該如何改變程序的其餘部分,我只是在改變從列表到字典的特定變量? – adhamncheese

+0

因此,說你想將(名稱,ssn)對存儲在字典中並且能夠在名稱已經存在的情況下更新ssn是否正確? – Cyb3rFly3r

回答

4

store設置爲dict是一個好主意,它會擺脫所有用來從中找到項目的循環。更改後的方案將是這個樣子:

def SSN(): 
    store = {} 
    while True: 
     name = input('Enter Name: ') 
     if not name: 
      for k, v in store.items(): 
       print(k + ' has SSN ' + v) 
      break 

     if name in store: 
      if input(name + ' has SSN ' + store[name] + '. Update? ') != 'y': 
       continue 

     store[name] = input('Enter SSN: ') 

從字典上store.items()回報鍵值對,其中關鍵是名稱和值SSN。 name in store返回布爾值,告訴名稱是否在storestore[name] = input('Enter SSN: ')分配新值,如果它存在替換舊值。

+0

很好的答案。我自己正在研究這個問題,然後我想出了基本相同的東西。主要區別在於我使用'try ...除了KeyError ... else'部分來更新SSN,但我更喜歡你的解決方案(可能是我見過的'continue'的最好用法)。 – pzp

+0

只是跑這個,那是完美的!非常感謝!我開始用字典,然後它太長和複雜(仍然學習字典和Python),所以我走了名單路線,然後在這裏,我們! – adhamncheese

0

所以你要implent列出了字典,然後嘗試

List = [Pie] 

Dict = {Apple} 

for List in Dict: 
print(Dict) 
break 

也許這就是你想要的?

+0

這絲毫沒有回答OP的問題。 – pzp

+0

對不起,我有點缺乏經驗,我只是想幫助:( – BradTheBrutalitist

+0

沒關係,我們都在這裏學習 – adhamncheese

1

如果我正在查看此權利... 現在看起來您正在創建一個名爲「商店」的列表,如果不是用您的用戶友好佈局打印它,而是隻打印列表,它看起來像

[ '約翰',1234, '邁克',6644, 'wazowski',0000]

而是寧願你的字典,這些看起來更像

{'john':1234,'mike':6644,'wazowski':0000}

我同意字典在這裏更有意義。嘗試類似

store = {} 
name = 'key' 
while name != '': 
    name = raw_input("Enter Name: ") 
    if name == '': 
     break 
    ssn = raw_input("Enter SSN: ") 
    store[name] = ssn 

你在這種情況下,失去了唯一的一點就是看它的名字第一次進入的能力,第二,等等。但是這似乎並不重要的是能夠很容易地標識哪個號碼去用哪個名字。

相關問題