40のおっさんのPython学習記録

20年以上前、学部の必修のC言語が全く理解できずに同級生に放り投げ、その後コーディングから遠ざかったガチ文系のおっさんが、ふと思い立ってPythonに挑戦しています。

新たな気付き集(Chapter 4)

入門ノートでの学習の続きです。

  • divmod(a,b)で商と余りをタプルで返す
  • pow(x,y)でxのy乗を出し、pow(x,y,z)だとそれをzで割った余りで返す。商ではない。
  • chr(整数)で整数が示すUnicodeが文字列で返る
  • ord(文字列1文字)でUnicodeが返る。
  • print(値1, 値2, sep="区切り文字", end="最後尾の文字列")
  • from モジュール名 import 関数名で特定の関数だけを読み込むとモジュール名.関数名とかしなくてもよくなる。関数名だけでよい。

文字列の操作

  • string.title()で各単語の1文字目全てを大文字にする。
  • string.count(文字列,開始位置,終了位置)である区間の文字列の個数を数える。
  • string.find(文字列,開始位置,終了位置)で文字列が何文字目かを返す.rfindで後ろから始める。
  • .findと.indexは似ているが、見つからなかったときに-1で返すか、エラーで返すかが違う。
  • string.replace(検索文字列,置換文字列,個数)で個数を指定すると最初に見つかった個数だけリプレース。以後はそのまま。
  • string.strip()で空白だの改行コードだのを除去可能
  • string.rstrip(".,\n")で末尾のピリオド、改行コードをまとめて除去可能
  • string.rstrip(".jpeg")で拡張子を取り除けるように見えるが、末尾の全てが対象なので"dog.peg.jp"だと"do"になるので要注意
  • string="信号の色には{}、{}、{}がある"をstring.format("赤","青","黄")とすると{}にそれぞれが代入される。{}に0からはじまる数字を入れるとその順番になる。
  • {}に入れるものが数字の場合{:,}と記すと三桁区切り表記になり、{:.1f}とすると小数点1位まで表記になる。{:,.2f}とすると3桁区切りと小数点2位までの表示となる。
  • fプリフィックスと呼ばれるfを""でくくる文字列の前に付加すると、以下のように書式指定が可能になる。
  • 数値の表記はnum=16797.9863をprint(f"{num:,.2f}")とすると16,797.99となる。

新たな気付き集(Chapter 3)

Pythonの基本書をまた1からはじめているのですが、1冊目(2冊目?)で定着しきれなかった事項を色々と備忘録的にメモしておく。

  • a//bで商のみを出す。round関数とか使わなくてもいい。
  • 文字列(文字列の変数)*nで文字列をn回繰り返して印字させられる。
  • string[4:4+5]だと文字列の5文字目以降5文字分をスライスできる。
  • string[開始:終了:ステップ]でステップをマイナスにすると後ろからに出来る。
  • string[::-1]だと文字列を完全に逆にできる。
  • !=はisnot演算
  • True = 1、False = 0
  • 複合代入演算子でa=a+bをa+=bでやれる。数値だけじゃなく文字列にも応用可能。数値に関しては+以外の演算子でも応用可能。


俺に必要だと思えないのですっ飛ばした事項

2冊目のテキスト変更

とりあえず、みんPyを一通り終えました。それで、次はMITの教科書に次は進むと言っていましたが、やっぱりどうしても基本がなっているとは思えないし、みんPyがいい教科書とも思えなかったので、これで勉強し直すことにしました。

詳細! Python 3 入門ノート

詳細! Python 3 入門ノート

スタートブックを放り投げ、みんPyを放り投げ、3冊目の入門書ですが、これでわからなかったらもう諦めます。このブログ閉鎖します。

Numpyの行列の操作

おっさん、今日は家族サービスで温泉宿に来ています。そして温泉宿でiPad Pro上のPythonistaでPythonやりつづけています。

今日はそんなわけで、Numpyの行列の操作の勉強をしました。以上。

import numpy as np
from numpy.random import *

dist1=randint(100,1000,100)         #100から999までの範囲の100の整数の乱数を作成
plt.hist(dist1)                     #ヒストグラムを作成
plt.show()                          #ヒストグラムを表示

mat1= np.matrix(dist1)              #乱数を行列に変換
dix1= mat1.reshape(10,10)           #行列を10x10に変換
print(dix1)

colsum = np.sum(dix1,axis=0)        #行列の縦の合計値を計算
print(colsum)
rowstd = np.std(dix1,axis=1)        #行列の横の標準偏差を計算
print(rowstd)
print(np.std(dix1))                 #行列の標準偏差の合計を計算
print(dix1[2,4])                    #3行目5列目の数値を表示
print(dix1[8:,7:])                  #9行目以下8列目以降を取り出した数列を作成

dix2 =np.arange(1,10).reshape(3,3)  #1-9の3x3の行列を生成
dix3 =np.arange(10,19).reshape(3,3) #10-18の3x3の行列を生成
dix4 =np.vstack((dix2,dix3))        #dix2とdix3を縦に連結
dix5 =np.hstack((dix2,dix3))        #dix2とdix3を横に連結
print(dix4)
print(dix5)

はてなはオワコンなのか?

おっさん気づいた。
もくもくとか出てると皆さんが垢を持ってるのはQiitaだということに。たしかにみんPyが意味不明だからとネットを検索するとQiitaの記事が多いことに。
はてなはIT界隈でもオワコン化してしまっているのだろうか?
おっさん、昔は金融系ブログをエキサイトブログで書いていたことがある。なぜエキブロかというと、当時イケてる金融ブロガー達はエキブロに集っていたからだ。場というものは重要で、そこに集うもの同士のネットワークができるのだ。そこで、おっさんも彼らに近づくべくエキブロでの活動を精力的にやった時期があり、そのネットワークに入り込むことができ、今でも繋がっている人々がいる。そういう記憶があるからこそネットでも場は重要だと思っている。
いずれにせよおっさん、形から入るのは大好きなのでQiitaでも垢を作ろう。

おっさんの参考書_v2

みんPyがそろそろ終わりそうなので、次はこれで学習を進めていこうと思います。

まだ全然コツがつかめない

ADDのくせに珍しくもくもく会や週末の好みのカフェ篭りを通じて、みんPyの章だけは進行しています。13章のうち11章目に突入しています。11章は標準ライブラリのあれこれを学ぶだけなのでリファレンス的に使えばいいのでもう新たな文法や記法をこの本で学ぶことはないようです。ただ、全くコーディングで自分のスキルが上がっていると思えないのには本当に凹むばかりです。例えば11章の初っ端の事例に複数のタプルを含むリストをディクショナリに変換するという事例が出てきます。

animals = [('猫','三毛'),('犬','柴'),('犬','秋田'),('猫','キジトラ'),('猫','黒')]
#上のタプルから下のディクショナリを作成
d={}                      #空のディクショナリを作成
for key, value in animals:
    if key not in d:      #キーがディクショナリに存在しない場合は追加
        d[key]=[value]
    else:               #キーが存在する場合は値を追加
        d[key].append(value)
print(d)
#{'猫': ['三毛', 'キジトラ', '黒'], '犬': ['柴', '秋田']}

from collections import defaultdict
dd = defaultdict(list) #空のリストを初期値に持つディクショナリを作成
for key, value in animals:
    dd[key].append(value)

print(dd)
#defaultdict(<class 'list'>, {'猫': ['三毛', 'キジトラ', '黒'], '犬': ['柴', '秋田']})

例えば上のコードで言えば、僕は未だにd[key]=[value]がどうして正しい記法なのかわかんないんですよ…数あるカッコの中で角カッコを使わねばならないとか、d[key]=[value]とすることで、辞書に追加の意味が付加されるとかの作法が本当にわからない。そもそもイコールでなんでつなぐの?もうマジで意味わかんない。だから僕ははるか昔、C言語で挫折したんですよ。
defaultdict(list)で殻のリストを初期値に持つディクショナリが出来るのが意味がわからない。list関数を入れる意味がわからない。
改めて思うんですよ。やっぱりいつか自然言語で要件定義すればプログラムが走るようになる時代は来るべきだと思います。