退屈なことはpythonにやらせよう 演習 第5章 5.6.2
第5章、2問目です
いろいろ調べて、以下で入力
def display_inventory(inventory):
print ('持ち物リスト:')
item_total = 0
for k, v in inventory.items():
print (str(inventory[k]) + ' ' + k)
item_total += v
print ('総アイテム数: ' + str(item_total))
def add_to_inventory(inventory,added_item):
for i in added_item:
inventory.setdefault(i,0)
inventory[i] += 1
return inventory
inv = {'金貨':42,'ロープ':1}
dragon_loot = ['金貨','手裏剣','金貨','金貨','ルビー']
inv = add_to_inventory(inv,dragon_loot)
display_inventory(inv)
ーーーーーーーーーーーーーーーーーーーーーーーーーーーーーーーーー
プログラムは動きました。ところが。
RESTART: プログラム/5-6-2-3.py
持ち物リスト:
43 金貨
1 ロープ
総アイテム数: 44
>>>
うーん。dragon.lootが反映されていません
なぜ???
一文字違っても…文字列型になると字が緑に変わる エラーの見つけ方を一つ覚えました
久々に退屈なことはpythonにやらせようを読んでいます。
第5章、P124。つまずきました。
どこが間違っているのか。探してもなかなかみつかりません。
が、上の エラーメッセージをよく読むと。
「for k, v in guests.item():
AttributeError: 'dict' object has no attribute 'item'」
7行目の○guests.items が×guest.item となっていました。
その前、P120 下記、やはりエラーが。
どこが間違っているでしょうか?
the_board = {'top-L: ' ' , 'top-M': ' ', 'top-R': ' ',
'mid-L: ' ' , 'mid-M': ' ', 'mid-R': ' ',
'low-L: ' ' , 'low-M': ' ', 'low-R': ' '}
def print_board(board):
print(board['top-L'] + 'I' + board['top-M'] + 'I' + board['top-R'])
print('-+-+-')
print(board['mid-L'] + 'I' + board['mid-M'] + 'I' + board['mid-R'])
print('-+-+-')
print(board['low-L'] + 'I' + board['low-M'] + 'I' + board['low-R'])
print_board(the_board)
正解は、 ×{'top-L: ' ' →○ {'top-L': ' '
top-Lを 「’ ’」シングルクォートでくるまないといけないんですが、片方が抜けていました。
この見分け方。「’ ’」でくるんで文字列(str)型になると字が緑に変わるんですね。
上記の間違った記述では、文字列が黒いままでした。top-L → top-L
文字列型になると緑に変わる
覚えておこうと思いました。