Python 3 字典 "list indices need to be integers not str"



我一直在做任何我能想到的事情,现在到了我不知道该去哪里的地步。在谷歌搜索错误和一般字典帮助之后,我最终来到了这里......

我还没有完成它,主要的底部没有照顾,所以忽略它。初步测试发现了这个错误,我不喜欢构建一个启动不起作用的程序,因为我对 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的值来修改该。如果contactNone,这将不起作用。


您询问的错误是实现以下函数的结果:

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'

相关内容

最新更新