当我阅读Eric M的Python速成课程时,在第9章中它在Dictionary部分引入了任意关键字参数。我决定根据到目前为止所获得的知识来编写通讯录。这是代码。
import random
print('Enter choice 1-6:'),'\n'
print('', '1-Create new profile','\n',
'2-Update existing profile','\n',
'3-Delete a profile','\n',
'4-View Directory','\n',
'5-Search Directory','\n',
'6-Exit Profile program')
#Global Variables
user_names={} # used in name_dictionary() to store names only
user_ids=[] # used to contain randomly generated user ids
user_directory={} # will combine userid and names in a new dictionary
#name_dictionary is a dictionary that saves names as ('last_name', 'jones', 'first_name', 'jim')
def name_dictionary(**options):
fn=input('Enter first name: ')
user_names['first_name']=fn
ln = input('Enter last name: ')
user_names['last_name'] = ln
for key,value in user_names.items():
user_names[key]=value
choice=input('You can add additional items such as phone, email-Add/No')
if (choice=='y'):
em = input('Enter email address: ')
options['email'] = em
phn = input('Enter phone: ')
options['phone'] = phn
for key, value in options.items():
options[key] = value
for key,value in user_names.items():
for k, v in options.items():
print()
return(key,value,k,v)
else:
print('Extra information not added')
for k, v in user_names.items():
return (k, v)
# generate_id is a list that randomly generates userids andsaves in a list example user_id69
def generate_id():
# as of now I am not focusing on generating unique random or checking for dup id
user_id = 'user_id' + str(random.randint(0, 100))
user_ids.append(user_id)
return user_id
# addUserIDToDict is a dictionary adds the names and ids to a dictionary which should look like
# user_id69 ('last_name', 'jones', 'first_name', 'jjim')
def addUserUserIDToDict():
user_directory[generate_id()] = name_dictionary()
while True:
# user_directory[generate_id()] = name_dictionary()
print('Add another entry?(stop to quit)')
choice = input()
if (choice == 'y' and choice != 'stop'):
user_directory[generate_id()] = name_dictionary()
else:
break
return user_directory
# search_user function, lets user search by Id or Name
def search_user():
search_option = input('Search by name or id?:..')
if (search_option == 'name'):
search_name = input('Enter name')
for k, v in user_directory.items():
for key, value in user_names.items():
if (search_name == value):
print()
print(search_name, ' found in directory')
print('That name is in position', key)
else:
print('That name not found')
if (search_option == 'id'):
search_id = input('What is the id: ?')
if search_id in user_directory.keys():
print(search_id, ' found in directory')
print(user_directory.get(search_id))
else:
print(search_id, ' not found in directory')
# Prints value of items in user directory
def print_directory():
print('==View Current Directory==')
if (len(user_directory) == 0):
print('No entry to show')
else:
for k, v in user_directory.items():
print(k, v)
# Used for finding a name by last or first name and then modify/change the name
def modify_profile():
print("You can modify names or an entry to add additional items")
modify_name = input('Enter name to modify')
for k, v in user_directory.items():
for key, value in user_names.items():
if(modify_name==value):
print(modify_name, ' found in directory')
print('That name is in position', key)
update_name = input('Enter what is the change to make')
user_names[k] = update_name # updates the name in user_names dictionary
user_directory[k] = update_name # updates in user_dictionary
break
else:
print('That name not found')
# Finds a contact and then removes it. I will use pop so that I can later track it.
def delete_user():
search_name = input('Enter name')
if (search_name in user_names.values()):
print("Name found")
to_remove = input('Do you want to proceed to delete that contact? Y/N..?')
if (to_remove == 'Y'):
for k, v in user_directory.items():
for key, value in user_names.items():
print()
print("Removing id", k)
del user_directory[k]
else:
print('That contact does not exist')
# Menu items
while True:
print('Pick an option from menu above')
print('Options are 1-6, invalid selection will exit program')
user_choice = int(input()) # used for user input for menu
if (user_choice == 1):
addUserUserIDToDict()
print_directory()
elif (user_choice == 2):
modify_profile()
elif (user_choice == 3):
delete_user()
elif (user_choice == 4):
print_directory()
elif (user_choice == 5):
search_user()
elif (user_choice == 6):
print('Exit Program')
break
elif (user_choice < 1 or user_choice > 6):
print('Wrong selection.Menu between 1 to 6')
print('Exit Program')
break
我的第一个问题是我无法从user_names打印整个键值。我在那里使用return语句。如果我将其更改为print(k,v),则可以正常工作。但是,如果不使用return,则无法在addToDict函数中使用它。另一个问题是我不确定为什么会这样,当我尝试更新名字或姓氏时,它也会更新其他条目。
这是运行时出现的问题
问题1 :打印来自def name_dictionary(** options)函数的部分数据
user_id74('first_name','sam')**不打印姓氏
user_id15(“姓氏”,“琼斯”,“电话”,“ 952”)***不打印名字和电子邮件地址
问题2 :从def Modify_profile()更新功能来更新其他条目
更改前:
user_id85('last_name','rahman')
user_id24(“姓氏”,“琼斯”)
更改后:
user_id85 1月***请注意,上面的姓氏部分消失了。
user_id24(“姓氏”,“琼斯”)
我知道外观不好,还有很多改进的余地,这肯定会花费您宝贵的时间。但是,如果您可以提供一些帮助的提示/方向。谢谢