猿问

python代码问题之字典

people={

    "alice":{

        "phone":"2341",

        "addr":"for drive 23"

    },

    "beth":{

        "phone":"9012",

        "addr":"bsr street 42"

    },

    "cecil":{

        "phone":"3158",

        "addr":"baz avenue 90"

    }

}

#针对电话号码和地址使用的描述性标签,会在打印时候用到

labels={

    "phone":"phone number",

    "addr":"address"

}


name=raw_input("Name:")


#查找电话号码还是地址?

request=raw_input("phone number(p) or address (a)?")


#使用正确的键:

if request=="p":key="phone"

if request=="a":key="addr"


#如果名字是字典中的有效键方才打印信息:

if name in people:print "%s's %s is %s."%\

   (name.labels[key],people[name][key])


提示错误为:

File "c:\Users\DULU\Desktop\untitled-1.py", line 32, in <module>
  (name.labels[key],people[name][key])

AttributeError: 'str' object has no attribute 'labels'

(这是什么意思,看不懂呀)

Hankong
浏览 1870回答 3
3回答

longgb246

1、if name in people等价于if name in people.keys(),你的代码里面people.keys()有:"alice"、"beth"、"cecil"。这3个都是string类型,string类型没有labels这个属性。这也就是你的报错信息:'str' object has no attribute 'labels'。string类型本身就没有labels这个属性,别告诉我你连这个都不知道。所以你后面引用name.labels[key]就会报错。2、还有你print的参数个数不对,个人不太喜欢%,偏向于.format()。我大致知道你想干嘛,就是输入姓名和p、a输出,结果是吧,最后几行你改下:# 使用正确的键: if request == "p":     key = "phone" if request == "a":     key = "addr" # 如果名字是字典中的有效键方才打印信息: if name in people.keys():     print "%s's %s is %s." % (name, key, people[name][key])     # 你可以尝试下面的.format()     print "{0}'s {1} is {2}.".format(name, key, people[name][key])个人强烈建议,python代码不要写在一行,缩进才是它的规范。
随时随地看视频慕课网APP

相关分类

Python
我要回答