関数とは
これまでの講座で度々扱っている、print()やinput()といった、英単語()のようなものを関数と呼びます。
中学数学で習った、y = ax + b みたいな関数とはだいぶ違う物のように見えますね。
そうですね、ですが大まかにやっていることは同じです。数学の関数はxやyといったある値が変動することに対応し、変数の持つ値も変動します。プログラミングにおける関数も、引数と呼ばれる値が変動することで、返り値(戻り値)と呼ばれる結果が変動します。print関数も、()に入れる値や文字によって出力が変わりますよね?
確かに!
また、print()やinput()のように、元々プログラミング言語に組み込まれている関数を、組み込み関数(標準関数)と呼び、私たちが独自に定義する関数を独自関数と呼びます。
関数は引数を受け取り、定められた独自の処理を行い、その結果を戻り値(返り値)として返す命令のこと。
関数は、
・組み込み関数(標準関数) : プログラミング言語にあらかじめ組み込まれた関数
・独自関数 : 私たちが独自に定義する関数
の二種類に分けられる。
一度宣言した関数は繰り返し使用することができる為、複雑なコードを簡潔に可読性を高く(読みやすく)保つことができる。
独自関数
それでは早速、独自関数の定義方法について学びましょう。
定義方法は以下の通りです。
def 関数名(引数):
処理
return 戻り値
引数、戻り値は一つの関数内でそれぞれ複数個使用することができます。
戻り値を複数用いる場合、配列など、本講座で扱っていない内容が含まれるので割愛します。
気になった方は調べてみてください。
また、先ほどは関数の役割をイメージしやすい様に説明しましたが、引数、戻り値は必須ではありません。
引数、戻り値を使うこともできるってことですね!
・引数、戻り値は必ず必要ではない
グローバル宣言
変数はグローバル変数とローカル変数があります。
それぞれの説明は以下の通りです。
グローバル変数 | 関数の外側で宣言された変数 関数内で参照することはできるが、関数内で値を代入することはできない。 |
ローカル変数 | 関数の内側で宣言された変数 関数内で値を参照、代入することはできるが、関数の外では参照も代入もできない。 |
以下のサンプルコードの様にグローバル変数は、関数内で値を代入することができません。
global_num = 1
def add_num(num):
global_num += num
print(global_num)
add_num(3)
この様に、グローバル変数に関数内で代入を行いたい場合、global宣言を用います。
global_num = 1
def add_num(num):
global global_num
global_num += num
print(global_num)
add_num(3)
・グローバル宣言
関数内で
global グローバル変数
の様に宣言することで、関数内でグローバル変数に値を代入できるようになる。
演習問題
前回の演習問題を関数を用いて改良してみましょう。
以下の部分を改良してください。
・「グー」「チョキ」「パー」以外が入力された場合、「不正な手が入力されました」と出力する関数を用いて行う
・「グー」「チョキ」「パー」のいずれかが入力された場合の判定、結果の出力を関数を用いて行う
他の条件等は前回と同様です。
解答例
def is_hand_valid(hand):
if(hand == 'グー' or hand == 'チョキ' or hand == 'パー'):
return False
else:
return True
def zyanken():
my_hand = input('最初はグー、じゃんけん、ぽん!')
if(is_hand_valid(my_hand)):
print('不正な手が入力されました')
return
global opp_hand
print('相手の手は',opp_hand,'です')
if(my_hand == opp_hand):
opp_hand = my_hand
print('あいこです')
elif((my_hand == 'グー' and opp_hand == 'チョキ') or (my_hand == 'チョキ' and opp_hand == 'パー') or (my_hand == 'パー' and opp_hand == 'グー')):
opp_hand = my_hand
print('勝ちです')
else:
opp_hand = my_hand
print('負けです')
zyanken()
※あくまでも解答例であり、この記述法のみが正解ではありません。
コメント