Python 3 Dictionary" list indices需要是整数而不是str"

时间:2015-04-20 20:51:30

标签: python-3.x

我一直在做任何我能想到的事情,而现在已经到了我无处可去的地步。谷歌搜索错误和一般字典帮助后,我已经到了这里......

我还没有完成它,主要的底部没有照顾,所以无视它。初步测试发现了这个错误,我不喜欢构建一个程序,开始不起作用,因为我对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()

1 个答案:

答案 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。如果contactNone,则无效。


您询问的错误是您执行以下功能的结果:

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'