Pythonで名前と年齢を管理するプログラムを書いています。
基本的な構造は完成したのですが、どうしても解決できない部分があります。
辞書で同じ年齢(キー)に名前(値)を追加しようとすると、strはappendメソッドを持たないという旨のエラーが出て来ます。そもそもなぜstrになっているのかよくわかりません。
Python
1def is_int(arg): 2 """ 3 int型かどうか調べる関数 4 """ 5 try: 6 int(arg) 7 return True 8 9 except ValueError: 10 return False 11 12def DataBase(): 13 # 名前を値v, 年齢をキーkとする辞書型変数 {年齢:年齢} 14 data_dict = {} 15 dammy = 0 16 while(True): 17 # 年齢順にソートする 18 data_dict = dict(sorted(data_dict.items())) 19 if(dammy != 0): 20 for k, v in data_dict.items(): 21 print("年齢:{} 名前:{}".format(k, v)) 22 msg = input("表示したい方の名前あるいは年齢を入力してください:") 23 24 # 年齢を入力された場合 25 if(is_int(msg)): 26 for k, v in data_dict.items(): 27 if(k == msg): 28 print("年齢:{} 名前:{}".format(k, v)) 29 30 # 名前を入力された場合 31 else: 32 for k, v in data_dict.items(): 33 if(v == msg): 34 print("年齢:{} 名前:{}".format(k, v)) 35 36 while(True): 37 dammy = 1 38 opt = input("データを追加(add),削除(del),何もしない(continue)?:") 39 if(opt == "continue"): 40 break 41 elif(opt == "add"): 42 age = input("追加したい方の年齢を入力してください:") 43 name = input("追加したい方の名前を入力してください:") 44 if((is_int(age) and not is_int(name))): 45 if(age in data_dict.keys()): 46 data_dict[age].append(name) 47 else: 48 data_dict[age] = name 49 break 50 elif(opt == "del"): 51 name = input("削除したい方の名前を入力してください:") 52 age = input("削除したい方の年齢を入力してください:") 53 if((is_int(age) and not is_int(name))): 54 for k, v in data_dict.items(): 55 if((k == age) and (v == name)): 56 data_dict.pop(k, v) 57 break 58 else: 59 print("yかnを入力してください") 60 61 62if __name__ == "__main__": 63 DataBase()
Yuji-no-MacBook-Air:tmp_file YujiNarita$ python hw0423.py データを追加(add),削除(del),何もしない(continue)?:add 追加したい方の年齢を入力してください:21 追加したい方の名前を入力してください:yuji 年齢:21 名前:yuji 表示したい方の名前あるいは年齢を入力してください:21 年齢:21 名前:yuji データを追加(add),削除(del),何もしない(continue)?:add 追加したい方の年齢を入力してください:21 追加したい方の名前を入力してください:aya Traceback (most recent call last): File "hw0423.py", line 181, in <module> DataBase() File "hw0423.py", line 164, in DataBase data_dict[age].append(name) AttributeError: 'str' object has no attribute 'append' Yuji-no-MacBook-Air:tmp_file YujiNarita$
回答2件
あなたの回答
tips
プレビュー
バッドをするには、ログインかつ
こちらの条件を満たす必要があります。