2015-10-30 34 views
-2

如果我創建了一個需要在多個函數中訪問的字典,那麼傳遞它的最佳方式是什麼?將字典傳遞給python中的新函數?

我目前正在做的事情將重置字典爲空。如果我在addDictionary()中打印,我會得到我想要的結果。但是,當我使用lookUpEntry()中的鍵查找元素時,找不到它。當我打印時,我得到一個空字典。如果有人對此有任何反饋,我也必須最終醃製和解開,這也會有所幫助。

import pickle 

def dictionary(): 
addressBook = {} 

return addressBook 

def addPerson(): 
personLastName = input("Enter the last name of " 
        "the person you want to add: ").lower() 
personFirstName = input("Please enter the first name of " 
         "the person you want to add: ") 

localPart = input("Please enter the local part of the email address") 
while not localPart.isalnum(): 
    localPart = input("Please enter a valid input, a-z and numbers 0-9: ") 

domain = input("Please enter the domain of the email addres: ") 
while not domain.isalnum(): 
    domain = input("Please enter a valid input, a-z and numbers 0-9: ") 

topLevelDomain = input("Please enter the top level domain, examples: com, net, org: ") 
while not topLevelDomain.isalnum() or len(topLevelDomain) > 3: 
    topLevelDomain = input("Please enter only letters, a-z and not more then 3 characters: ") 

personEmail = localPart + "@" + domain + "." + topLevelDomain 

personStreetAddress = input("Please enter house number and street of the person you want to add: ") 
personCityState = input("Please enter the city, state abbreviation and zipcode of the person you want to add: ") 

personPhone = input("Please enter the phone number of the person you want to add: ") 

personPhoneStr = personPhone.strip("-") 

while not personPhoneStr.isdigit() and not len(personPhoneStr) == 10: 
    personPhone = input("Error. That is not a valid phone number. Try again: ") 

    personPhoneStr = personPhone.strip("-") 

return personLastName, personFirstName, personEmail, personStreetAddress, personCityState, personPhone 


def addDictionary(): 
addressBook = dictionary() 

personLastName, personFirstName, personEmail, personStreetAddress, personCityState, personPhone = addPerson() 

addressBook[personLastName] = personFirstName, personEmail, personStreetAddress, personCityState, personPhone 

print(personFirstName,personLastName, "has been added to the address book!") 

print(addressBook) 

return addressBook 


def lookUpEntry(): 
addressBook = dictionary() 

keyName = input("Enter the last name of the person you are trying to find.") 

while not keyName in addressBook: 
    keyName = input("That name is not in the address book. Please try again.").lower() 

x = input("Enter '1' if you want to look up a email. Enter '2' if you want to look " 
      "up a persons address. Enter '3' to look up a persons phone number: ") 
if x == "1": 
    print("The email of", addressBook[keyName[0]], keyName, "is:", addressBook[keyName[1]]) 
elif x == "2": 
    print("The address of", addressBook[keyName[0]], keyName, "is:", addressBook[keyName[2]], addressBook[keyName[3]]) 
elif x == "3": 
    print("The phone number of", addressBook[keyName[0]], keyName, "is:", addressBook[keyName[4]]) 
else: 
    print("Sorry that item is not stored in this address book.") 

def main(): 
addDictionary() 
lookUpEntry() 

的main()

+2

請縮進代碼正確 – donkopotamus

回答

0

目前定義爲dictionary

def dictionary(): 
    addressBook = {} 
    return addressBook 

在這裏,您創建一個新的字典每次調用時間。試着用

# a global dictionary 
_addressBook = {} 
def dictionary(): 
    return _addressBook 
+0

難道不全局字典是壞的代碼替換呢? – WonderphuL

+0

作爲你現在的代碼,你不把'dict'傳遞給'addDictionary'或'lookupEntry',它幾乎需要一個全局的 – donkopotamus

+0

好吧傳遞字典的最好方法是什麼?對不起,我有單聲道,錯過了傳遞值給函數的類。不是我的強項。 – WonderphuL