我一直在做任何我能想到的事情,而现在已经到了我无处可去的地步。谷歌搜索错误和一般字典帮助后,我已经到了这里......
我还没有完成它,主要的底部没有照顾,所以无视它。初步测试发现了这个错误,我不喜欢构建一个程序,开始不起作用,因为我对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()
答案 0 :(得分:1)
您要做的第一件事就是从dict
返回联系人create()
,如下所示:
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
因此,当函数尝试从name
读取密钥contact
时,实际尝试读取字符串"contact"
的字符索引将整数作为索引。该函数可能应该是这样的:
def get_name(contact):
return contact['name']
允许您执行以下操作:(使用与上述相同的john
)
>>> get_name(john)
'John'