見出し画像

Lesson5(GoogleColabではじめるPython)-関数とモジュール-


前回のレッスン【Lesson4(GoogleColabではじめるPython)】に引き続き、今回は変数とデータ型についてのレッスンとなります。実際に手を動かしながらプログラミングを行うことが近道です!ぜひ実践しましょう!

レッスンの構成は以下のとおりです。前回の内容をもとに作成しておりますので、分からない部分に関してはこれまでのレッスンを参照してください。


Lesson1: Pythonとは?GoogleColaboratoryの使い方
Lesson2: 変数とデータ型
Lesson3: 演算子と制御構造
Lesson4: コレクション
Lesson5: 関数とモジュール(今回)
Lesson6: 文字列とファイル操作
Lesson7: クラスとオブジェクト指向


関数

関数とは

関数とは、一連の処理をまとめて名前をつけたものです。

実はprintやrangeなどは組み込み関数と言ってPythonで用意されている関数です。

さらに、オリジナルの関数を作成することをできます。このことを関数を定義すると言われています。

関数の定義の方法

以下のプログラムをご覧ください。

レストランでドリンク名を入力することで好きなドリンクを選択するためのプログラムです。

ちなみに、

変数名=input("メッセージ")

とすることで、プログラムを実行すると入力欄が現れ、文字列を変数に代入できます。

例えば、このプログラムで、2人、3人が注文する場合、その都度ドリンクメニューを表示するとプログラムが無駄に長くなってしまいますよね。

ドリンクメニューとしてコンパクトに表示したい!
と考えます。

そこで関数の登場です。

def文で定義し、関数名で呼び出します。関数は、引数と呼ばれる入力値を受け取り、return文で出力値を返すことができます。

引数と返り値は必要がなければ省略可能です。

関数は、defというキーワードに続けて関数名括弧()コロン(:)を書きます。

まとめると以下の形になります。


(ハンズオン1)実際に動かしてみましょう!

作成例1 引数なし、返り値なしの関数

独自の関数drink_menuを作成すると以下のようになります。

defのブロックはプログラムのどこに置いても大丈夫ですが、プログラムの最初の方にあると、プログラムを編集するときにどのような関数があるのか把握しやすくなります。

ここでは、

def drink_menu():

で関数drink_menuを定義しています。引数や返り値はありませんので省略しています。

関数を呼び出すときは

drink_menu()

です。

↓必要に応じてコピーして使ってください

def drink_menu():
  print("アイスティー")
  print("コーヒー")
  print("コーラ")
  print("メロンソーダ")
  print("水")


print("好きなドリンクを選んでください。")
drink_menu()

selected_menu=input("ドリンク名を入力: ")

print(selected_menu,"を選びました。")


作成例2 引数あり、返り値なしの関数

このプログラムを改良して、入店した人の名前を入力し、関数drink_menu内で「〇〇さんへのおすすめ」と改良してみます。

〇〇という文字列を引数として関数drink_menuに渡してあげます。

Aliceという名前を入力し、その名前から「Aliceさんへのおすすめ」と表示することができました。

プログラムの説明です。

person = input("あなたの名前を入力してください: ")

input関数を用いてpersonに文字列を代入しています。

drink_menu(person)

personに代入された文字列を関数drink_menuに渡してあげます。

def drink_menu(person_name):

受け取った文字列は引数としてperson_nameに代入されます。

このように、関数に文字列や値を渡すことができます。
関数に値を渡すための変数名と引数の変数名は同じである必要はありません

↓コピー用

def drink_menu(person_name):
  print(person_name,"さんへのおすすめ")
  print("アイスティー")
  print("コーヒー")
  print("コーラ")
  print("メロンソーダ")
  print("水")

person = input("あなたの名前を入力してください: ")

print("好きなドリンクを選んでください。")
drink_menu(person)

selected_menu=input("ドリンク名を入力: ")

print(selected_menu,"を選びました。")


作成例3 引数あり、返り値なしの関数

最後に、関数drink_menu内でドリンクを選び、返り値として選んだドリンク名を返すようにしたいと思います。

① 「Alice」と入力し変数personに代入します。

② drink_menu(person)で関数drink_menuに引数personの値を渡します。

③ 関数drink_menu内でドリンク名「コーラ」を入力し変数drinkに代入しました。

④ return drinkで返り値として文字列を返します。

⑤ 返された文字列はselected_menuに代入されます。


↓コピー用

def drink_menu(person_name):
  print(person_name,"さんへのおすすめ")
  print("アイスティー")
  print("コーヒー")
  print("コーラ")
  print("メロンソーダ")
  print("水")

  drink=input("ドリンク名を入力: ")

  return drink


person = input("あなたの名前を入力してください: ")
print("好きなドリンクを選んでください。")
selected_menu = drink_menu(person)

print(selected_menu,"を選びました。")


このプログラムの動きをまとめると以下のような図になります。


さらにプログラムを改良してfor文と組み合わせることにより複数のお客さんに対応できるようにします。

プログラムの説明

for文を使用して繰り返しを行っています。ここではrange(3)としているので0〜2までの数値を繰り返します。詳しくはLesson3: 演算子と制御構造にて説明してありますのでご覧ください。

3回繰り返すことにより3人のお客さんに対応できます。ドリンクメニューもその都度表示されます。※メニューの内容を少し減らしました

実行結果は以下のとおりです。

このように関数によって応用する際にプログラムを改良する際の手間も大幅に削減できます

この例では関数によってメニューの内容の変更が1箇所ですみましたが、関数がない場合は変更する箇所が増えてしまう可能性があります。

↓コピー用

def drink_menu(person_name):
  print("----------Drink Menu----------")
  print(person_name,"さんへのおすすめ")
  print("コーヒー")
  print("コーラ")
  print("水")
  print("----------------------------------")

  drink=input("ドリンク名を入力: ")

  return drink

for i in range(3):     #3回繰り返す 
  print("あなたは",i+1,"番目のお客様です")
  person = input("あなたの名前を入力してください: ")
  print("好きなドリンクを選んでください。")
  selected_menu = drink_menu(person)
  print(selected_menu,"を選びました。")

作成例4 2つ以上の引数

引数が2つ以上の場合も,(コンマ)で区切ることによって対応できます。
例えば、2つの値を関数addに渡し、その合計が返ってくるプログラムを作成しました。

このプログラムはaとbに代入された値をaddの引数xとyにそれぞれ渡しています。

通常は
sum = a + b
としますが、複数の計算処理があったときは関数を用いると便利です。

↓コピー用

def add(x,y):
  return x+y

a = 2
b = 3

sum = add(a, b)

print(sum)

モジュール

モジュールとは、関数や変数やクラスなどをまとめたファイルです

モジュールは、importというキーワードを使って他のファイルから読み込むことができます。
importに続けてモジュール名を書きます。

モジュール名は、ファイル名から拡張子(.py)を除いたものです。


(ハンズオン2)実際に動かしてみましょう!

例えば、以下のコードは、mathモジュールからsqrt関数を読み込んでいます。
sqrt関数は数値の平方根を返します。

このプログラムの説明です。

import math でPythonのライブラリmathを読み込みます。

mathライブラリにはsqrtの他、円周率piや最大公約数を求めるgcdなどが用意されています。他にもはPython公式サイトに掲載されています。

num = float(input("数値を入力してください:"))

input関数で入力した値はすべて文字列として扱います。そのため、float関数を用いて小数の値にしています。

float(値)・・・値を小数(float型)にするための関数
int(値)・・・値を整数(int型)にするための関数

【補足】
num = input("数値を入力")
この場合、3を入力するとnumには文字列の「3」が代入されます。文字列の場合は足し算などの計算ができなくなります(エラーが発生します)。

そのため、数値入力の際は以下のようにintに変換します。
num = int(input("数値を入力"))

また、fromキーワードを使って、モジュールから特定の要素だけを読み込んだり別名をつけたりすることができます。


いかがでしたか?

以上が第5回の講座内容です。

Pythonは多くのライブラリが用意されています。是非、興味のあるものにチャレンジしてみてはいかがでしょうか?

機械学習ではOpenCV、音声認識のWhisperなど流行りのライブラリもありますよ!
PyPI(パイパイ)というPythonのライブラリ等を検索するサイトがあります。以下にリンクと検索方法を掲載しますので参考にしてください。

例) 画像認識を行ってみたい場合

PyPIで「画像認識」と検索

Tensorflow Imageがあるのでクリック

パッケージのインストールを行います。

GoogleColabでは!pip install <パッケージ名>

と入力するとインストールができます。

実行するとインストールが始まります。

プログラムで使用する際は

import tensorflow_image

とすることで使用できます。

ライブラリの使用方法はPyPIサイトにありますので最初はコピー&貼り付けをして動作確認をしてみましょう。

ここまでお疲れ様でした!

次回は、文字列とファイル操作などについて学びます。



この記事が気に入ったらサポートをしてみませんか?