【Python】SimplePrograms line 7 dictionary、そしてgenerator object
7行プログラムです。
コード
prices = {'apple': 0.40, 'banana': 0.50}
my_purchase = {
'apple': 1,
'banana': 6}
grocery_bill = sum(prices[fruit] * my_purchase[fruit]
for fruit in my_purchase)
print ('I owe the grocer $%.2f' % grocery_bill)
実行結果
I owe the grocer $3.40
解説
辞書です。
組み込みやってると、辞書もあまり使わなかったりする。
1行目から4行目。
まとめていきます。
prices = {'apple': 0.40, 'banana': 0.50}
my_purchase = {
'apple': 1,
'banana': 6}
2行目~4行目が途中で改行されているけれど、この改行を除くと結局のところこうなります。
prices = {'apple': 0.40, 'banana': 0.50}
my_purchase = {'apple': 1, 'banana': 6}
あらまあ。
同じようなコードです。
違うのはシンボルと数字だけ。
中途半端に改行するよりも2行で書く方が見やすいけども。
1行目はフルーツの値段(price=価格)。
2行目はフルーツを買った数(purchase=購入)。
5~6行目。
grocery_bill = sum(prices[fruit] * my_purchase[fruit]
for fruit in my_purchase)
1行に書き直します。
grocery_bill = sum(prices[fruit] * my_purchase[fruit] for fruit in my_purchase)
1行に複数の命令が入っているのも苦手なのです。
これって、次のコードと同じなんですよね。
grocery_bill = 0
for fruit in my_purchase :
grocery_bill += (prices[fruit] * my_purchase[fruit])
それが、この太字の部分が for 文の前にきちゃってる。
for fruit in my_purchase :
grocery_bill += (prices[fruit] * my_purchase[fruit])
するとこうなる。
prices[fruit] * my_purchase[fruit] for fruit in my_purchase
これをそのまま関数「sum」の引数に渡している。
これはいったい、なんだろう。
なので表示してみた。
print(prices[fruit] * my_purchase[fruit] for fruit in my_purchase)
すると、こうなった。
<generator object <genexpr> at 0x0000018367AF4900>
generator object?
「at 0x0000018367AF4900」って、
これはポインタなの?
変数に放り込んでみる。
obj_gen = prices[fruit] * my_purchase[fruit] for fruit in my_purchase
怒られた。
obj_gen = prices[fruit] * my_purchase[fruit] for fruit in my_purchase
^^^
SyntaxError: invalid syntax
これなら?
obj_gen = (prices[fruit] * my_purchase[fruit] for fruit in my_purchase)
合格。
じゃあ、こんなことしてみる。
print (obj_gen)
print (*obj_gen)
へぇ~、「*obj_gen」が書けるんだ。
結果は。
<generator object col_gro.<locals>.<genexpr> at 0xf244f3c0>
0.4 3.0
「0.4」はリンゴ1個の値段。
「3.0」はバナナ6個の値段。
リンゴ1個と、
バナナ6個を買ったからね。
「0.4」と「3.0」がリストになって入っているということか?
いや、違う。
違うようなのである。
この「generator object」を追っかけているとどんどん脱線していく。
なので、これはまた改めて。
最後、7行目。
print ('I owe the grocer $%.2f' % grocery_bill)
これはいつもの「print」文です。
お買い物の総額を計算した結果を表示します。
「%f」は置換フィールドで、後ろの変数を浮動小数として扱います。
「%」と「f」の間の数値は表示する桁数になります。
今回の場合、「.2」とありますので小数以下2桁まで表示するという意味になります。
間違いや改善方法、追加情報などありましたら、是非是非コメントくださいませ。