我一直在做任何我能想到的事情,现在到了我不知道该去哪里的地步。在谷歌搜索错误和一般字典帮助之后,我最终来到了这里......
我还没有完成它,主要的底部没有照顾,所以忽略它。初步测试发现了这个错误,我不喜欢构建一个启动不起作用的程序,因为我对 Python 相当陌生。(这也是我在这个论坛上的第一篇文章,所以如果有什么不合格的,请告诉我)
def create(name, age):
contact = {
'name' : name,
'age' : age,
'email' : 'email',
'phone' : 'phone',
}
def getName(contact):
name = input("What's their name? ")
return contact[name]
def getAge(contact):
age = int(input("What's their age? "))
return contact ["name"]
def getPhone(contact):
phone = input("What's their phone number? ")
return contact['phone']
def getEmail(contact):
email = input("What's their email? ")
return contact['email']
def setName(contact, name):
contact['name'] = name
def setAge(contact, age):
contact['age'] = age
def setPhone(contact, phone):
contact['phone'] = phone
def setEmail(contact, phone):
contact['email'] = email
def birthday(contact):
a = getAge(contact)
a +=1
setAge(contact, a)
def show(contact):
print("Name: ", name)
print("Phone number: ", phone)
print("Age: ", age)
print("Email: ", email)
def main():
ann = create('Ann', 21)
roland = create('Roland', 18)
john = create ('John' , 19)
print(getName("contact"))
getAge()
getPhone()
getEmail()
setName()
setAge()
setPhone()
setEmail()
show()
if __name__ == "__main__":
main()
你应该做的第一件事是从create()
返回联系人dict
,如下所示:
def create(name, age):
return {'name': name,
'age': age,
'email': None,
'phone': None}
这样,您就可以访问由函数调用创建的dict
:
>>> john = create('John', 42)
>>> john
{'name': 'John', 'age': 42, 'email': None, 'phone': None}
>>> john['name'] == 'John'
True
>>> john['age'] == 42
True
否则会导致TypeError
。尝试对当前create()
实现的返回值调用任何 setter 函数时,您会看到相同的错误。采用以下函数:
def set_name(contact, name):
contact['name'] = name
set_name()
期待一个dict
,它将通过将'name'
键的值更改为name
的值来修改该。如果contact
None
,这将不起作用。
您询问的错误是实现以下函数的结果:
def get_name(contact):
name = input("What's their name? ")
return contact[name]
如果我们浏览正文,我们将看到以下内容,假设我们按照您在示例代码中的方式调用它:(get_name('contact')
)
>>> name == '<user input>'
True
>>> contact == 'contact'
True
因此,当函数尝试从contact
中读取它们键name
时,它实际上是在尝试读取字符串的字符索引,"contact"
字符串仅将整数作为索引。该函数可能应如下所示:
def get_name(contact):
return contact['name']
这将允许您执行以下操作:(使用与上述相同的john
)
>>> get_name(john)
'John'