おえぷろべい

お絵かきとプログラミングと米国株投資についてのなんやかんや

辞書型(dictionary)について(Python)

f:id:feci:20210726231508j:plain

Python3

 

Python3.8.5での辞書型(dictionary)の作り方について。

#①辞書型の作り方その1
d = {"x"100'y'200}
print(d)

#②辞書型の作り方その2(keyの頭に数字はダメ)
i = dict(x=100わい='200'="さんびゃく")
print(i)

#③辞書型の作り方その3
w = dict([('x'100), ('わい'"200"), (3'さんびゃく')])
print(w)

 

上記のプログラムを出力した結果は、以下のとおりです。

 

①の出力結果

{'x': 100, 'y': 200}

 

②の出力結果

{'x': 100, 'わい': '200', 'Z': 'さんびゃく'}

 

③の出力結果

{'x': 100, 'わい': '200', 3: 'さんびゃく'}

 

 

辞書型の変数の作り方は上記のように3パターンあります。

この作り方のそれぞれの定型は、以下のようになっています。

 

①のパターン

変数 = {key: value, 'key': value, "key": value}

 

②のパターン

変数 = dict(key=value, key=value)

 

③のパターン

変数 = dict([(key, value), ('key', value), ("key", value)])

 

 

keyの部分には値の名前が入ります。

valueの部分にはkeyに連動した値が入ります。

 

②のパターンの記述に関しては、①や③とは少し違います。

②のパターンでは、keyの部分にシングルクオーテーションやダブルクオーテーションが使えません。

これらの記号で値を囲むとエラーになります。

 

また、②のパターンではkeyの値の頭に半角数字または全角数字を使うことはできません。

keyの頭に数字を使った場合も、すべてエラーになってしまいます。

 

 

辞書型のvalueを書き換える。

d = {"x"100'y'200}

d['x'= 90
d['y'= 'abc'

print(d)

上記のように、既存の辞書型の変数のvalueの値を上書きすることが可能です。

 

このプログラムの出力結果は、以下のようになります。

 

dの出力結果

{'x': 90, 'y': 'abc'}

 

 

辞書型の変数に新たなkeyとvalueを追加する。

d = {"x"100'y'200}

d['Z'= 'あいうえお'
d[5= 500

print(d)

上記のように、既存の辞書型の変数に新しいkeyとvalueを追加することが可能です。

 

このプログラムの出力結果は、以下のようになります。

 

dの出力結果

{'x': 100, 'y': 200, 'Z': 'あいうえお', 5: 500}

 

 

辞書型のデータをfor文で処理する。

d = {"x"100'y'200}

#①数値がvに入らない。
for v in d:
  print(v)


#②辞書のitemsメソッドを使うとkにx、vに100が入る。
for kv in d.items():
  print(k':'v)


#③itemsメソッドを使うが戻り値用の変数が1つしかないパターン。
for k in d.items():
  print(k)


#④itemsメソッドの戻り値が2つなのに戻り値用の変数を3つ以上用意したパターン。
for kvw in d.items():
  print(k':'v':'w)

辞書型のデータの場合、①のパターンのようにfor文でinを使って処理すると、変数vにはkeyの値しか格納されません。

 

このような場合に使うのが辞書型に用意されているitemsメソッドです。

②のパターンのように戻り値を格納する変数を2つ用意して変数dをitemsメソッドで処理してやると、kの中にはkeyの値が、vの中にはそのkeyに対応したvalueの値がそれぞれ格納されます。

 

 

なので、上記のプログラムの出力結果は以下のようになります。

 

①の出力結果

x
y

 

②の出力結果

x : 100
y : 200

 

③の出力結果

('x', 100)
('y', 200)

 

④の出力結果

エラー

 

 

itemsメソッドからの戻り値の数よりも戻り値用の変数の数が少ない③のパターンでは、一応エラーはでません。

しかしkeyとvalueをつなぐ記号が、なぜかコロンからカンマに変わって表示されます。

 

itemsメソッドからの戻り値の数よりも戻り値用の変数の数のほうが多い④のパターンでは、Pythonは問答無用でエラーを吐いてきます。

 

 

以上です。

number_format関数について(PHP)

f:id:feci:20210727001932j:plain

PHP7

 

PHP7.4.1におけるnumber_format関数について。

<?PHP

$sum = 1000 + 150 + 0.036;

//①パラメータを1つ指定したパターン
$sum = number_format($sum);
echo $sum, '円です。';


//②パラメータを2つ指定しつつ変数をいれたパターン
$sum = number_format($sum, 2);
echo $sum, '円です。';


//③パラメータを2つ指定したパターン
$sum = number_format(1150.0362);
echo $sum, '円です。';


//④パラメータを4つ指定したパターン
$sum = number_format(1150.0362'+''++');
echo $sum, '円です。';

number_format関数を使うと、パラメータに指定した数値に会計表記のように3桁ごとにカンマが入ります。

つまり、10000円が10,000円になります。

 

 

上記のプログラムの出力結果は、それぞれ以下のようになります。

 

①の出力結果

1,150円です。

 

②の出力結果

1,150.04円です。

 

③の出力結果

1,150.04円です。

 

④の出力結果

1++150+04円です。

 

 

number_format関数には、number_format(aa, bb, 'cc', "dd"); の形式で4つのパラメータが入ります。

3番目と4番目の値は、シングルクオーテーションかダブルクオーテーションのどちらかで囲う必要があります。

 

aaには関数処理の対象となる数値が入ります。

aaは省略不可能なパラメータです。

 

bbには小数点以下いくつまでの値を表示するのか指定する整数が入ります。

bbは省略可能なパラメータです。

またはbbに0を記入しても、bbを省略したときの同様の結果が得られます。

 

ccには小数点を表す記号であるピリオドを変換するための文字や文字列が入ります。

④の出力結果ではccに+を指定しているので、ピリオドは+に置き換わっています。

ちなみにここの値は、’あいう’でも”4_%”でも何でもOKです。

 

ちなみにccのパラメータを入力する場合は、4番目のddのパラメータの記入も必須となります。

aaとbbとccの3つしかパラメータが指定されていない場合は、PHPはエラーを吐いて動作をストップします。

 

ddにはカンマを変換するための文字や文字列が入ります。

④の出力結果ではddに++を指定しているので、カンマは++に置き換わっています。

 ちなみにここの値も、’4-j’でも”総理大臣”でも何でもOKです。

 

このnumber_format関数の3番目と4番目のパラメータの使い道は、はっきり言ってよく分かりません。

どのような場面を想定して用意されたのか、皆目見当もつきません。

 

なので、number_format関数のパラメータは1番目と2番目だけを覚えていれば、それで事足りるように思います。

 

 

あと、一度number_format関数で処理した変数をもう一度number_format関数で処理した場合は、挙動がおかしなことになります。

エラーこそでませんがNoticeと表示されて、出力される値が強制的に1となってしまいます。

 

なので、②のプログラムを単体で処理した場合は上記のような出力結果となるのですが、①のプログラムと②のプログラムを連続的に処理した場合は、②の出力結果は「1,150.04円です」ではなく「1.00円です」となってしまいます。

 

 

以上です。

お絵かきをしよう_その67

絵の練習中。

トレースはひとまず終了。今は覚え模写の練習をしております。

 

f:id:feci:20210731001452j:plain

目が大きすぎた感。

 

第61回目から、絵の練習方法を「シジストノート」さんで公開されている練習方法に切り替えてみました。

方法論としては、ニコニコ動画にアップロードされている「初心者絵描きのためのオススメ練習方法」を参考にしております。

 

今回は僕のヒーローアカデミア麗日お茶子さんのお目々を模写してみました。

片方を模写して、残りの片方はクリスタくんの複製と反転機能を使って作りました。

 

いい感じに目が描けたので、それを元にシジストノートさんのいつもの女性素体の正面顔をうろ覚えで描いてみたのですが、これはちょっと目が大きすぎましたね。

すごいバランスが悪い感じがします。

 

ただこれも、クリスタくんの範囲指定と縮小と移動の機能を使えば、ある程度はいい感じのバランスに調整できるかもしれませんね。

ふむ。そういうのもアリなのかな。

 

あとは、首の太さと顔の輪郭は、今までで一番いい感じに描けたような気がします。

今回は元絵の素体をいっさい見ずに描いたのにね。

見ないほうがうまく描けてしまいました。

 

なんでやねん。

定数宣言について(PHP)

f:id:feci:20210727001932j:plain

PHP7

 

PHP7.4.1における定数宣言について。

<?PHP

const TAX = 10;                     //推奨されている定数宣言
define(TAX10);                    //推奨されていない定数宣言

echo "消費税は{TAX}%です。";       //消費税は{TAX}%です。
echo "消費税は". "TAX" ,'%です。'//消費税はTAX%です。
echo "消費税は" . TAX , '%です。'//消費税は10%です。

定数は変数とちがい、一度宣言をすると中の値を上書きすることができません。

もし上書きしようとするとエラーがでます。

 

定数の作り方は、上記のとおり2つのパターンがあります。

どちらのパターンでも、変数宣言とちがい頭のドル記号は必要ありません。

 

const 〇〇 = △△; のパターンは、PHPで推奨されている定数宣言のパターンです。

〇〇の部分に定数名が入り、△△の部分に定数に格納される値が入ります。

 

define(〇〇, △△); のパターンは、現在では推奨されない定数宣言のパターンとなっています。

このパターンではエラーこそ吐かれませんが、PHPは毎回Warningを出して警告をしてきます。

 

 

ちなみにこれらの定数宣言における命名規則は、変数宣言のときの命名規則とまったく同じです。

あとPHPでは、定数名は大文字表記にするのが暗黙の了解というか慣例となっているようです。

 

 

あと定数と変数とでは、printやechoで処理するときの挙動が多少ちがいます。

変数では echo "消費税は{$tax}%です"; と記述すると、ちゃんと「消費税は10%です」という感じでブラケット内の変数が変数として処理されます。

 

しかし定数では、このブラケットを使った記述ではブラケット内の定数は定数としては処理されません。

ただの文字列として処理されてしまいます。

 

ちなみにこの挙動は、ピリオドやカンマを使った文字列の連結の場合でも同じです。

もし変数であれば echo "消費税は". "$tax" ,'%です'; と記述すればちゃんと「消費税は10%です」と出力されますが、定数ではこのようなダブルクオーテーションで囲う方法もアウトです。

定数としてではなく、ただの文字列として処理されてしまいます。

 

 

以上です。

zip関数について(Python)

f:id:feci:20210726231508j:plain

Python3

 

Python3.8.5でのzip関数について。

day = ['月曜日''火曜日''水曜日']
food = ['餃子''グラタン''コンビーフ']
drink = ['紅茶''コーヒー''レッドブル']

#①zip関数を使わない場合
for i in range(len(day)):
  print(day[i], food[i], drink[i])


#②zip関数を使った場合
for daysfoodsdrinks in zip(dayfooddrink):
  print(daysfoodsdrinks)


#③パラメータの変数と戻り値用の変数の名前が同じ場合
for dayfooddrink in zip(dayfooddrink):
  print(dayfooddrink)


#④パラメータの変数が3つあるのに戻り値用の変数が1つしかない場合
for day in zip(dayfooddrink):
  print(dayfooddrink)


#⑤パラメータの変数が3つあるのに戻り値用の変数が2つしかない場合
for dayfood in zip(dayfooddrink):
  print(dayfooddrink)


#⑥パラメータの変数が3つなのに戻り値用の変数が4つ以上ある場合
for dayfooddrinkaaa in zip(dayfooddrink):
  print(dayfooddrink)

 

①のパターンではzip関数を使わずにrange関数を使って処理していますが、「これだとiがいっぱいあって見ずらいじゃないか」、という感想をもつ人もいるらしいです。

 

zip関数は、そんな人のための関数です。

②のパターンのような形式でzip関数に指定したパラメータの数と同じ数の戻り値用の変数をinの前に用意することで、①と同じような出力結果を得ることができます。

 

 

上のプログラムの出力結果は、それぞれ以下のようになります。

 

①の出力結果

月曜日 餃子 紅茶
火曜日 グラタン コーヒー
水曜日 コンビーフ レッドブル

 

②の出力結果

月曜日 餃子 紅茶
火曜日 グラタン コーヒー
水曜日 コンビーフ レッドブル

 

③の出力結果

月曜日 餃子 紅茶
火曜日 グラタン コーヒー
水曜日 コンビーフ レッドブル

 

④の出力結果

('月曜日', '餃子', '紅茶') ['餃子', 'グラタン', 'コンビーフ'] ['紅茶', 'コーヒー', 'レッドブル']
('火曜日', 'グラタン', 'コーヒー') ['餃子', 'グラタン', 'コンビーフ'] ['紅茶', 'コーヒー', 'レッドブル']
('水曜日', 'コンビーフ', 'レッドブル') ['餃子', 'グラタン', 'コンビーフ'] ['紅茶', 'コーヒー', 'レッドブル']

 

⑤の出力結果

エラー

 

⑥の出力結果

エラー

 

 

ご覧のように、zip関数のパラメータに指定した変数名と戻り値用の変数名がまったく同じ場合でも、Pythonは特に不具合なく正常に処理をおこなってくれます(③)。

 

しかし、zip関数に指定したパラメータの数と戻り値用の変数の数が一致しない場合は注意が必要です。

 

複数のパラメータに対して戻り値用の変数が1つしかない場合は、④の出力結果のようになってしまいます。

またその他の数が合わないパターンでは、⑤や⑥のパターンのように、おそらくすべてのパターンでエラーになることが予想されます。

 

 

以上です。

enumerate関数について(Python)

f:id:feci:20210726231508j:plain

Python3

 

Python3.8.5でのenumerate関数について。

#①enumerate関数を使わない場合
i = 0
for hiragana in ['あい''うえ''お']:
  print(ihiragana)
  i += 1


#②enumerate関数を使った場合
for ihiragana in enumerate(['あい''うえ''お']):
  print(ihiragana)


#③リストなしでenumerate関数を使った場合
for ihiragana in enumerate('かきくけこ'):
  print(ihiragana)

 

enumerate関数は、①のfor文でやろうとしていることをもうちょっとスマートに記述するために使う関数です。

どういう処理になるのかは、実際に出力された値を見ていったほうがわかりやすいと思います。

 

上のプログラムを処理すると、それぞれ以下のように出力されます。

 

①の出力結果

0 あい
1 うえ
2 お

 

②の出力結果

0 あい
1 うえ
2 お

 

③の出力結果

0 か
1 き
2 く
3 け
4 こ

 

 

上記のように、enumerate関数を使うとfor文のなかの処理を1回まわすごとに、0からはじまる連続した数値が変数iのなかに自動で上書きされていきます。

この場合の変数iに格納される数値の終端は、enumerate(パラメータ);で指定したパラメータの総数と同じものになります。

 

なので②の場合はリストとして3つの値がパラメータに指定されているので、変数iには0、1、2の順に数値が格納されていきます。

 

③の場合は5つの文字がパラメータとして指定されているので、0から4までの5つの数値が0から順に変数iに格納されていきます。

 

 

ちなみに、出力結果にある0や1などの数値とその後ろに出力される文字列の間にある半角スペースの存在は、たぶんPythonの仕様です。

この半角スペースは、おそらく削除することはできません。

 

 

以上です。

お絵かきをしよう_その66

絵の練習中。

トレースはひとまず終了。今は覚え模写の練習をしております。

 

f:id:feci:20210729200245j:plain

目ですね。

 

第61回目から、絵の練習方法を「シジストノート」さんで公開されている練習方法に切り替えてみました。

方法論としては、ニコニコ動画にアップロードされている「初心者絵描きのためのオススメ練習方法」を参考にしております。

 

うん。やっぱり目ですね。

鼻の高さや鎖骨の長さなどちがう部分はいろいろありますが、見た目の雰囲気を決める最大のちがいは目の形状というか大きさでしょうね。

 

次回はもうちょっと目を大きくする感じで描いてみようと思います。

なんだったら、目と眉毛だけ別枠で練習をしてみてもいいのかもしれませんね。

 

うん。ちょっと検討してみましょう。

ただまあ、時間とやる気と腱鞘炎の問題で、正直これ以上毎日の日課を増やしたくはないとは思うんですよねえ。

 

う~ん。

悩ましいところ。