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'(這是什么意思,看不懂呀)
3 回答
已采納

longgb246
TA貢獻1條經驗 獲得超1個贊
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代碼不要寫在一行,縮進才是它的規范。
添加回答
舉報
0/150
提交
取消