【PyQで勉強】「Python初級」のメモ書き

Python

PyQの”Python初級”をコンプリートしました。

引き続きPyQでPythonの勉強を進めています。

初回はプログラミングはじめの一歩をコンプリートし、前回はPythonはじめの一歩をコンプリートし、メモ書きを紹介しました。

【PyQで勉強】”プログラミングはじめの一歩”のメモ書き

【PyQで勉強】”Pythonはじめの一歩”のメモ書き

 

その後すぐに取り掛かったのが”Python初級”です。

 

結論をいうと、Pythonはじめの一歩以上に時間を要しました。

何とか理解しようと何度もトライしながら学んだ結果、無事にコンプリートはできましたが、コンプリートするのに一週間ほどかかりました。

 

何より、Python初級の最後の課題が、初心者にとってはなかなか大変でした。

 

しかし、Python初級を学び、課題をクリアしたことで、充実感でいっぱいです。

成長していることを実感できるのは本当に嬉しいことです。

 

 

今回も勉強するなかで、新しく出てきた内容をメモ書きをして残しています。

このメモ書きを理解できれば、それはPython初級のレベルはすでに超えていることを意味します。

 

ぜひ参考までにメモ書きを確認してみてください。

 

 

 

関数とは。

関数とは、処理に名前を付けたものです。

値を渡すと、結果を返してくれる、それが関数です。

渡す値のことを引数(ひきすう)、結果として戻ってくる値を戻り値と言います。

 

関数はいくつか種類がありますが、これまで”プログラミングはじめの一歩”や”Pythonはじめの一歩”をコンプリートした際に学んだ内容にもたくさんの関数が含まれていました。

 

Pythonに限った話ではありませんが、プログラミングをするうえで関数は避けて通れない機能です。

関数を攻略できれば、作業の幅、効率、スピード、全てが飛躍的に改善されます。

 

じっくり時間をかけて勉強し、深く理解しましょう。

 

 

組み込み関数

関数にはいくつか種類があると言いましたが、その中で最も初心者に馴染みのある関数が、組み込み関数と呼ばれるものです。

組み込み関数は最初からPythonに組み込まれている関数で、Pythonの公式ドキュメントにいけば組み込み関数の一覧を確認できます。

Python公式ドキュメントの組み込み関数一覧はこちら。

 

文字を表示させるために使用していたprint()も関数の一つです。

()内に入力するのが引数です。

引数を渡すと、その引数を表示してくれる、というのがprint関数の機能です。

 

関数によっては、引数がない関数、戻り値がない関数、引数も戻り値もない関数も存在します。

print関数は、引数を表示するという処理をするだけで、何か新たな値を作り出すということはなく、戻り値はない関数です。

 

モジュールを呼び出すことで使える関数

モジュールを呼び出すことで利用できるようになる関数もあります。

例えばramdomモジュールを使うと、以下のような関数を利用することができます。

 

randint関数

randint(a, b)と書き、aやbには整数を入力します。 e.g. randint(1, 100)

実行すると、aとbの間にある整数のうちどれかをランダムに抽出することができます。

 

choice関数

choice関数は、リストなどのインデックスによってアクセスできるオブジェクト(シーケンス)を引数に指定するとその中の1つをランダムに返します。 e.g. choice(リスト名)

 

shuffle関数

リストのインデックスの順番をシャッフルします。 e.g. shuffle(リスト名)

 

関数を定義しよう

関数の素晴らしい点は、自分にとって必要な関数を自分で定義して作成することができるという点です。

 

例えば、数字を入力すると、自動で1を足して返してくれるような関数を作成したい場合は、以下のようなコードとなります。

 

関数を定義するときは”def”を使います。

def 関数名(引数):

関数名と引数の変数名は基本的に自由です。(ただし組み込み関数などで既に使用されている名称は使えません。)

:(コロン)が付いているので、その下以降の行はインテンド(半角スペース4個分)を空ける必要があります。

上記コード例ではadd_oneが関数名、xが引数の変数名です。

 

今回は引数に1を足し、その結果を戻す必要があるので、returnを使って戻り値を獲得します。

 

戻り値はカンマで分けて複数使用できます。

以下が例です。

 

このコードを解説すると、

まず、div_and_mod関数にはx, yという二つの引数が用意されています。

そして関数内にdivとmodという変数を作成し、x, yそれぞれを使って計算式が記入されており、divとmodの結果をreturnで戻しています。

 

そして、div1, mod1という変数を用意し、div_and_mod関数にx=100, y=23を代入しています。なぜdiv1とmod1という二つの変数を用意することに少し疑問がわくかもしれませんが、これはdiv_and_mod関数はdivとmodの計算式の結果をそれぞれ返してくれるので、帰ってくる結果の数だけ変数を用意しておく必要があるためです。

 

そしてdiv1, mod1をprint関数を使って表示すれば完了です。

div2, mod2でも同様の作業がされています。

 

少しややこしいですが、returnの後に戻り値を複数並べることが可能ということを覚えておきましょう。

 

■追加情報

sum(リスト名) →リスト要素の合計値を算出

len(リスト名) →リスト要素の個数を算出

 


本気のプログラミングスクール【ウェブカツ】

 

別のファイルの関数を利用しよう

別のファイルで定義した関数を利用するには、モジュールを呼び出すときと同じようにimportを使って呼び出す必要があります。

 

from ファイル名 import 関数名, 関数名, 関数名・・・

 

同ファイルから関数を複数呼び出したいときは、コンマを付けて関数名を並べて記入すればOKです。

 

また別ファイルから関数を呼び出す際に、呼び出し元のファイルで一工夫が必要です。

上記のようにimportを使って別ファイルから関数を呼び出すとき、関数の外側の処理も読み込まれてしまうという現象がおきます。

関数の定義だけ読み込みたいのに、関数の外側の処理まで読み込まれてしまうと、不要な処理が実行されて求めている結果を得ることができません。

 

そこで必要になってくる一工夫が以下のコードです。

if __name__ == ‘__main__’:

関数の外側の処理を、このif文の中に入れることで、不要な処理まで読み込まなくて済むようになります。

 

 

実践では上記のように使用するケースが多いです。

main関数を定義し、その関数内に処理内容を全て入れてしまい、if __name__ == ‘__main__’: 以下にmain関数を置きます。

こうすることで、定義した関数(上記でいうcheck_even_odd関数)を他ファイルで呼び出した時に関数の定義のみ読み込むことができるようになります。

 

ひとまずこういうものがあると丸ごと暗記しておき、この謎のコード if __name__ == ‘__main__’:の意味については、もう少し学んでPythonの理解が深まってからでも良いようです。

ということでここではスルーしておきます。(詳しく知りたい方はこちらのPyQのブログ記事をご覧ください。)

 

 

変数のスコープとは?

変数のスコープとは、変数を使用できる範囲のことを意味します。

 

基本的には、ローカルスコープとグローバルスコープの2種類が存在します。

そしてローカルスコープ内にある変数をローカル変数、グローバルスコープ内にある変数をグローバル変数と呼びます。

 

ローカル変数とは、関数内で定義された変数であり、関数の外側で使用することはできません。

一方、関数の外側で定義された変数はグローバル変数であり、どこでも使用することができます。

 

上記を例にすると、gはグローバル変数、aとbはローカル変数です。

ローカルスコープである関数内でグローバル変数であるgを使用することはできますが、グローバルスコープにおいてaやbのローカル変数を使用することはできません。

 

 

また、ローカルスコープでグローバル変数を使用することはできますが、グローバル変数の値を変更することはできません。(リストや辞書などは書き換え可能)

上記でいうgの値を100から他の数字に変えたい場合、グローバルスコープで変更処理をする必要があります。

 

もしどうしても関数内でグローバル変数を変更する必要があればglobal文を使うことで可能です。

 

しかし、global文を使って変数の値を変更することはあまりおすすめされていません。

後ほど学ぶクラスを利用する方が良いとされています。

 

 

タプルの使い方を学ぼう

タプルとは、リストに似たシーケンス型のオブジェクトです。

リストと同様、インデックスで要素を参照します。

 

リストと異なる点は、一度生成されたタプルは要素の変更・追加・削除が出来ないという点です。

 

タプルは、リスト同様、アンパック代入が可能です。

アンパック代入とは、要素を複数の変数へ代入する書き方で、以下の例のような形式です。

 

 

 

タプルは辞書のキーとして使用することができます。(リストはキー)

使い方はさまざまですが、例えば、タプルに(緯度, 経度)を入れて、値を都市名などにすると、座標から都市名を取り出せるようになります。

 

エスケープシーケンス

\(バックスラッシュ)※環境によっては円記号\と表示されるを、特定の文字の前に置くことで、特別な意味を表すことができます。

 

\n: 改行

\t: タブ

 

改行をするには、\nの他に、三重引用符”’ —- ”’や””” — “””を利用する方法もあります。

三重引用符で囲むと、囲まれた文字列内の改行も文字列の構成要素になり、表示される文字も改行されて表示されます。

 

もし\nなど、特殊文字を実際に表記したい場合は、rを付けましょう。

print(‘Hello\nWorld’)だと、HelloとWorldが改行されますが、print(r’Hello\nWorld’)だとHello\nWorldがそのまま表示されます。

 

str.join()を利用しよう

‘文字列’.join([文字列のリスト])と書くことで、文字列のリストの各要素を、文字列を間に挟んで結合することができます。

例えば[‘a’, ‘b’, ‘c’]というリストがあり、-で結合したいときには、’-‘.join([a, b, c])と書くことで、a-b-cと表示することができます。

 

str.replace()を利用しよう

‘文字列’.replace(‘元文字列’, ‘置き換え文字列’)と書くことで、文字列の中にある<元文字列>を、<置き換え文字列>に置き換えることができます。

 

上記コードでは、<名前>の部分を’木村’に置き換えており、表示結果は以下のようになります。

木村様
この度はアンケートへ回答いただきありがとうございます。 次回ご来店時に100円offクーポンを発行しますので、ご依頼ください。

 

文字列内の文字を複数置き換えたい場合は、

‘文字列’.replace(‘A’, ‘a’).replace(‘B’, ‘b’)

といったように、.replace()をつなげて書くことで対応できます。

 

str.format()の構文

文字列の中の{}にformat()の引数の値を代入することができます。

例えば、'{},{}!’.format(‘Hello’, ‘World’)と記入することで、Hello,World!という結果を得ることができます。

 

また{}内に番号を入力することで、何番目の引数を代入するかを指定することもできます。

‘{1},{0},{1}!’.format(‘Hello’, ‘World’)と記入すれば、結果はWorld,Hello,World!となります。

 

また文字列内の{}に名前を指定し、指定した名前に代入する文字列を指定することもできます。

 

 

上記コードの場合、card内に{name}{job_title}{mail}と名前の指定された文字列があり、引数にあるname, job_title, mailで代入する値を指定することができます。

 

上記コードの結果は以下です。

株式会社ビープラウド
エンジニア
佐藤太郎
MAIL: taro@beproud.jp
TEL: 03-9999-9999 FAX: 03-9999-9998 内線: 1234
URL: https://www.beproud.jp

 

また、{:d} と指定することで10進数として表示、{:f}と指定することで小数第六位まで表示など、数値の場合は書式を指定することもできます。

 

{:d} 10進数

{:f} 小数第六位

{:nd} n桁の領域で右詰

{:0nd} n桁の領域で右詰。余った桁は0で埋める

{:.nf} 小数第n位まで

{:,d} 3桁ごとにカンマで区切る

 

%を使った書式指定

文字列中に%sや%dを入力することで、入力する文字列や整数を、%と変数を使って指定することができる。

 

%s : 文字列

%d : 10進整数

 

以下が例です。

 

 

私は10才です。
こんにちは山田さん
山田さんは10才です。

 

文字列の中で”%d才”と記入しても、表示結果は%d才ではなく10才となります。

その理由は% ageと指定し、10(age = 10)が返されるためです。

 

% 変数で指定するのは、’文字列’の直後です。

%の変数が複数の場合は、タプルを使って指定することができます。

print(‘%sさんは%d才です。’ % (name, age))

 

 

文字列の存在確認

ある文字列内に特定の文字列が入っているか否かを確認する場合、if文を用いて以下のように確認することができます。

 

if 特定の文字列 in 文字列:

 

文字列内に特定の文字列が含まれていれば、Trueが返されます。

 

 

また文字列の先頭の文字が、特定の文字列となっているか否かを確認する場合は、.startswithを使用することができます。

 

if 文字列.startswith(特定の文字列):

 

特定の文字列が、文字列の先頭の文字となっている場合はTrueが返されます。

 

 

また、特定の文字列が、文字列内で何文字目から開始しているかを返すのが.findです。

 

文字列.find(特定の文字列) == 0:

 

上記の場合、特定の文字列が開始するのが1文字目という意味であり、.startswithと同じ役割を果たすことになります。

 

文字列をリスト化する際に

改行で要素を分ける場合、.split(\n)と記入することもできるし、.splitlines()を利用することもできます。

.splitlines()は.split(\n)と全く同じ役割を果たします。

 

 

数値型について

数値型には、整数、浮動小数点数、複素数の3種類があります。

整数:int型

浮動小数点数:float型

複素数:complex型

 

計算の途中に浮動小数点数が含まれると、回答も浮動小数点数になります。

また、割り算をした場合、使用した数字が整数で、かつ回答が整数だとしても、回答はfloat型となります。

 

絶対値、最大値、最小値

絶対値はads()、最大値はmax()、最小値はmin()を使用して判別することができます。

 

ads()の場合、カッコ内に数値を入力することで、絶対値を返すことができます。

max()やmin()は、カッコ内にリスト名などを入れ、要素の中の最大値、最小値を返すことができます。

 

除算の商と余りを返すdivmod()

divmod(引数1, 引数2)は、引数1÷引数2の商と余りを返すことができます。

これまでに習った//や%を使っても実現可能ですが(a // b, a % bといった感じで)、divmodを使ったほうがコードを簡潔にできるので、覚えておくと便利です。

 

データ型を判定するtype()

type()でカッコ内に判定したい値を入力すると、値のデータ型を返してくれます。

print()を使って表示すると以下のように表示されます。

整数の場合:<class ‘int’>

小数の場合:<class ‘float’>

文字列の場合:<class ‘str’>

 

Noneとis演算子

Noneとは、ある値を期待して関数を呼び出したときに、期待されている値がないときに返される結果です。

Noneは値が存在しないことを意味し、空の値と存在しない値の区別をつけるために必要です。

 

条件が満たされるまで繰り返すwhile文

これまで繰り返しを利用する場合はすべてfor文を利用してきましたが、状況によってはwhile文を利用するほうが簡潔にコーディングできるケースがあります。

 

while文は、設定した条件を満たす限り繰り返しが続けられるという性質があります。

while 条件式:

繰り返す内容

 

具体的には以下のようなコードです。

 

val < 10という条件式を満たす限り繰り返されるという構文になっています。

valは初期値が1であり、val += 2によって、繰り返されるたびに2がプラスされていき、valが10以上となったら繰り返し終了です。

 

for文はリストなどを用いて、すべての要素が終わるまで繰り返されるという特徴がありましたが、whileは条件を設定して、条件を満たさなければ繰り返しをストップすることができます。

forと同じくらい実用的な機能なので必ず習得必要です。

 

使い分けとしては、繰り返し回数が決まっていればfor文、繰り返す回数はわからないが終了条件が明確な場合はwhile文と認識しておきましょう。

 

繰り返しを終了させるbreakとスキップさせるcontinue

for文やwhile文で繰り返しを行う場合に、ある条件に当てはまれば実行を強制終了させることができるのがbreakです。

通常breakはif文と併用します。

 

for文やwhile文内で、ある条件を満たすと(if文がtrueになると)breakするように設定することで、繰り返しを強制終了できます。

 

また、continueを使うことで、その回の繰り返しを中断してスキップし、次の繰り返しを開始させることができます。

 

具体的には以下のように利用します。

 

1
2

numberが3になった時点でbreak。実行終了です。

そのため実行結果は1と2のみ表示されます。

 

1
2
4
5

numberが3の時にif文以降の実行をスキップし、次の繰り返し(number = 4)を開始するので、表示結果は3以外の1245となります。

 

まとめ

難しいレッスンでした。

難しいからこそ、メモ書きに書く内容がとても多い。

 

自分自身のためのメモであり、このサイトを見てくださるほかの方にとっては、とても見づらいサイトになってしまっています。申し訳ないです。

 

今回紹介した内容について、実際に手を動かしながら学びたいのであれば、ぜひPyQに挑戦してみてください。

 

 

さて、次はPython中級です。

初級では出てこなかった、さらにレベルの高い内容を学べると思うと、不安もありつつとても楽しみです。

 

それでは頑張りましょう。

 

コメント

タイトルとURLをコピーしました