所以我试图创建一个提示用户选择的功能,并根据哪个选项对信息做些什么。
Optionone()基本上要求用户提供单个联系人的信息,每次填写此联系人时,它会在列表中创建一个完整的差异联系人列表。
在optionthree()中,我试图让用户询问他们想要显示的联系人。因此,一旦他们输入联系人姓名,代码就会显示整个列表,其中包含联系人的信息(姓名,地址,电话,电子邮件)。
我排除了与此问题无关的其他选项。
contact = []
def optionone():
contactinfo = []
name = str(input("Name: "))
address = str(input("Address: "))
phone = str(input("Phone: "))
email = str(input("Email: "))
contactinfo.append(name)
contactinfo.append(address)
contactinfo.append(phone)
contactinfo.append(email)
contact.append(contactinfo)
contactinfo = []
这是optionthree函数。
def optionthree(contactinfo):
search = input("Name of contact: ")
if search in contactinfo:
print("This is what I'm trying to figure out")
else:
print("There is no contact with that name in your address book.")
return contactinfo
主菜单功能
def menu():
option = int(input("""
Menu Options:
1. Add new contact
2. Display address book
3. Search for contact
4. Modify contact
5. Delete contact
6. Exit
Choose an option: """))
if option == 1:
optionone()
elif option == 3:
info = optionthree(contactinfo)
main()
现在,当我在终端中运行它时,它告诉我在分配之前我引用变量 contactinfo 。参数的整个概念和通过函数传递变量对我来说非常混乱;这段代码有什么问题?
答案 0 :(得分:0)
您在main函数中使用contactinfo,但未在main函数中定义它。我注意到你定义了一个全局变量" contact"。不确定它是否是同一个变量
答案 1 :(得分:0)
您似乎试图在为contactinfo
分配任何值之前引用它。如果您需要在执行选项3之前执行选项1,那么您可能希望选项3首先检查contactinfo
是否存在。如果它不存在,我建议将该行写成如下:
info = optionthree(optionone())
答案 2 :(得分:0)
在Stack Overflow,我们一次处理一个问题。在这种情况下,直接问题是未定义的变量。如果您仍然无法弄明白,请在单独的帖子中处理信息查询。
我要去除额外的信息以便说明。这是一个很好的编程技术:采取一些步骤。首先,我们要将名称仅添加到列表中并能够找到它。你已经几乎连接了所有东西。
要记住的基本原则是每个函数都有自己的"名称空间" (变量和值的目录)。函数通过参数列表和返回值相互通信。是的,也有全局变量。现在,不要使用它们。
option_one
的目的是在信息列表中添加名称,并使更改可用于主程序。您忘记了最后一部分:您必须在完成后发回更新的列表:
def option_one(contact_list):
name = str(input("Name: "))
contact_list.append(name)
print("OPT 1 contact_list", contact_list) # trace what you do for debugging purposes.
return contact_list
def menu():
# Menu text omitted
master_list = []
if option == 1:
master_list = option_one(master_list)
print("MAIN ", master_list)
elif option == 3:
info = option_three(master_list)
menu()
制作您的主要节目"拥有"主列表 - 选项功能只是获取副本,执行他们的"事物",并返回更新列表(如果需要)。主程序必须初始化该列表master_list
,并将其移交给每个选定的函数。
每个函数都有自己的小世界:它从调用程序获得的内容,它创建的局部变量,以及它完成后的回复。每个例程都可以通过它选择的 local 名称来调用该联系人列表;我已将其称为contact_list
(正如您所做的那样,但使用" Pythonic"标点符号)。
输出:
Choose an option: 1
Name: Mark
OPT 1 contact_list ['Mark']
MAIN ['Mark']