everyday-study

Python:randomモジュール

2.randomモジュールの使い方

・random関数→0.0<=random<1.0の範囲で乱数を生成(float型)

・uniform関数→任意の範囲で乱数を生成(float型)

・randint関数→ 任意の範囲で乱数を生成(int型)

・choice関数→乱数でリストや文字列の要素を取得

・shuffle関数→リスト内の要素をランダムに入れ替える

shuffle関数の戻り値を変数に入れてもNoneが出力されるようだ

shuffle関数は文字列には対応しておらず、もともとのリストも変えてしまう

Python:ライブラリ/パッケージ/モジュール

ライブラリ:他のプログラムから利用されるプログラム

→さらに、標準ライブラリ(Pythonをダウンロードした際に付属)と外部ライブラリ(個人作成を頒布したもの)に分かれる

モジュール:読み込むプログラムそのもの

パッケージ:モジュールを複数まとめたもの

モジュールの例

1.モジュールの使い方

・構文


import モジュール名/ライブラリ名

モジュール名.関数()


・モジュール内の関数を確認→dir()関数

構文


import モジュール名

dir(モジュール名)


randomモジュール内に含まれている関数の一覧を表示

・モジュール内の関数の使い方を確認→help()関数

randint()関数はaとbの範囲内で乱数を生成する

・モジュールを別名で定義

一度rndでrandomモジュールを定義したので、randomという名称でrandomモジュールを使うことはできない

Python:関数

関数=複数のコードをひとつにまとめたもの

Pythonで標準で組み込まれている関数

  • print()
  • range()
  • enumerate()
  • list()
  • tuple()
  • etc.

・ユーザー定義関数

構文:


def 関数名(引数):

  関数内で処理する内容

関数名(引数) #定義した関数を呼び出す


プログラムは上から順に実行されるため、関数を定義するより前に関数を呼び出そうとするとエラーになる

・関数の作成

・関数の命名規則(PEP8推奨)

  • 関数の名前は小文字
  • 必要に応じてアンダースコア(_)で区切る
  • etc.

https://pep8-ja.readthedocs.io/ja/latest/

・関数の引数

hello関数にnameを引数として渡している

・複数の引数を渡す

この例ではhello関数にnameとageの2つの引数を渡している

引数は左から順番に渡すので上の例では型の違いによるエラーが出てしまっている
ageに"Beginner"が、nameに27が渡されている

引数に渡す変数を指定することでエラーを回避している

・引数にデフォルトの値を設定する

引数に何も渡していない変数はデフォルトで設定した値が関数に渡される

・関数の戻り値を設定する

構文


def 関数名(引数):

  関数で行う処理

  return 値

変数=関数名(引数)


returnがない状態で、変数に関数の戻り値を入れるとNoneが出力される

関数の定義のみ行い、処理内容を後で記述するときに使用される

Python:基本構文(3)

  • 基本構文(1):for
  • 基本構文(2):if,if-else,if-elif-else
  • 基本構文(3):while

3.while

構文:


while 条件式:

  条件式がTrueの間、処理される内容


条件式がTrueの間、処理が繰り返されるため必ず条件式内にある変数を増減させる処理が必要

そうでなければ永久ループに陥ってしまう

x+=1のインデントを一つ下げたので、whileループ内ではxを増加させることなく毎回print(x)を処理しているので永久ループに陥った
エラー文の3行目でどの部分のコードで止めたか分かる

永久ループから抜け出すためには、

  • IDLEのプログラム実行画面で「Ctrl+C」
  • ソースコード編集ファイルで「Shell」→「Interrupt Execution」

・処理の実行途中でループを抜ける→break

構文:


while 条件式:

  条件式がTrueの間、処理される内容

  break


・ループをスキップする→continue

構文:


while 条件式:

  条件式がTrueの間、処理される内容

  continue


continueを用いる場合は、continueより前にループ変数の処理を行うコードを書かなければ一度continue処理が入ると、永久ループに陥ってしまう

上の例ではcontinueより上にx+=1が書かれていないので、if文がTrueの条件式になってしまったらprint(x)を実行→continue→ループの先頭に戻る→if文→print(x)→・・・となる

・whileの終了時に実行される処理→else

構文:


while 条件式:

  条件式がTrueの間、処理される内容

else:

  条件式が当てはまらなくなった場合の処理


x=5の時、whileの条件式がFalseになったので、else以下が実行された

Python:基本構文(2)

  • 基本構文(1):for
  • 基本構文(2):if,if-else,if-elif-else
  • 基本構文(3):while

2.if,if-else,if-elif-else

・if

if 条件式1:

  条件式1がTrueの場合の処理


・if-else

if 条件式1:

   条件式1が Trueの場合の処理

else:

   条件式1が Falseの場合の処理


・if-elif-else

if 条件式1:

  条件式1がTrueの場合の処理

elif 条件式2:

  条件式2がTrueの場合の処理

else:

  条件式1、2どちらもFalseの場合の処理


・条件式の組み合わせ→and,or

if (条件式1 and 条件式2):

  条件式1も条件式2もどちらもTrueの場合の処理

if (条件式1 or 条件式2):

 条件式1か条件式2のどちらかがTrueの場合の処理


・条件に要素を含むかどうか→条件式にinを用いる

2つ目のif文では条件式がFalseなのでprint関数が実行されない
また、大文字・小文字の区別はされて処理される

・リスト型/タプル型でのin

・forとの組み合わせ

インデント位置の違いによる実行結果の違い

print関数がifと同じインデントになっているため、forループの度にif文とprint関数が実行される

print関数がeven.append(x)と同じインデントになっているため、if文がTrueになる度にprint関数が実行される

このようにPythonではインデントでブロックを認識しているので、インデントを把握することはかなり重要

三項演算子でif-elseを1文にまとめる

Trueの場合の処理 if 条件式 else Falseの場合の処理

条件判定は上から順に行われる

Python:基本構文(1)

  • 基本構文(1):for
  • 基本構文(2):if,if-else,if-elif-else
  • 基本構文(3):while

1.for

  • A:繰り返す回数を変数で保持する
  • B:グループ内の値を繰り返す
  • C:インデックスと値を使う

A:繰り返す回数を変数で保持する →for 変数 in range(繰り返す回数):

range()の中にある数字で繰り返す回数を指定する

・範囲指定で繰り返す→range(開始,終了)

rangeで3つ目を指定した場合は3つ目の数字でスキップを設定できる

B:グループ内の値を繰り返す →for 変数 in リスト・タプル・セット・文字列など:

特徴:Aの書き方と異なり、事前にループ回数を指定する必要がない

C:インデックスと値を使う→for 変数1,変数2 in enumerate(リストやタプルなど):

  • 変数1→繰り返す回数としてリストやタプルのインデックス番号を利用
  • 変数2→リストやタプルの要素など

複数の変数を同時に代入すること=アンパック代入

dictionary型にenumerate関数を使うと「インデックスとキー」や「インデックスとキー、値」を取り出すことができる

Python:データ型の文法まとめ(2)

  • タプル型
  • 辞書型
  • セット型

・タプル型→「()」で作成

特徴:要素の値を変更できない、作成スピードがリスト型より速い

定数のような使い方になる

・リスト型をタプル型に変更→tuple()関数

・タプル内の要素を指定→タプル[インデックス]

・タプル内の要素を範囲指定→タプル[インデックス:インデックス]

・タプル内の指定した要素のインデックスを調べる→タプル.index(要素)

・タプル内に指定した要素が存在するか確認→要素 in タプル

・タプル内にある要素数を調べる→タプル.count(要素)

・タプルの長さを調べる→len(タプル)

これらはリストと同様の書き方

・タプルの更新/削除→不可

タプルそのものの削除は可能

・辞書型→「{}」で作成

特徴:インデックスの代わりにキーで要素を指定

・辞書型の作成

  • 要素とキーを一緒に設定
  • copy()関数の使用
  • 辞書型のキーをリストから作成

・辞書型の値を読み込む→辞書[キー]、get()関数、keys()関数、values()関数、items()関数

  • keys関数→キーだけ読み込む
  • vakues関数→値だけ読み込む
  • items関数→値とキーのペアを読み込む

キーが存在しない場合やインデックスの使用はエラーになる

get()関数では値が存在しない場合はNoneが返ってくる

・キーの存在確認→キー in 辞書型

2つ目のコードはキーではなく値を指定しているため、Falseとなる

・辞書型のペア数を調べる→len()関数

・辞書型の値の更新/削除

更新→辞書型[キー]=値

削除→del 辞書型「キー」、pop()関数

キーが存在しない場合は新しいペアとして追加される

キーを指定して値とキーのペアを削除するので、値を指定しようとしたり、削除した後に再度同じキーを指定するとエラーになる

辞書型から取り出すという形で値とキーを削除する
pop関数で取り出されるのはキーで指定した「値」のみ(キーは辞書型から値を取り出すためのものでしかない)

・セット型→set関数

特徴:集合を扱う、値の重複をさせない、インデックスがない

・値の追加→add()関数

追加しようとした値がすでに存在した場合はエラーが出ず、変化は特にない

・値を更新/追加できないセット型→frozenset型

重複しない値を追加しようとしてもエラーが出る

・セット型の組み合わせ→union()関数、intersect()関数

・セット型の削除→remove()関数、discard()関数、clear()関数

  • remove関数→値がない場合にエラーが出る
  • discard関数→値がない場合にエラーが出ない
  • clear関数→値をすべて削除する