ProgateでPythonを学ぶ【コース3は関数】

スポンサーリンク

ProgateでPythonコース3

Progate pythonコース3

今回の記事ではProgateのpythonコース3で学んだことを書いていこうと思います。

pythonコース1は文字列や数式の操作、条件分岐
pythonコース2はリスト、辞書、繰り返し、型変換

を学びました。

コース2、3あたりは途中から有料になってくるので980円はらって有料会員にならないといけないですね。

いやいやプログラミングは本で勉強する。という方にはこちらの本がおすすめです。↓

といっても本は3000円くらいするのでProgateに入ったほうがいいかもしれないですね。

今回のPythonコース3では簡単なじゃんけんゲームを作っていくようですね。

それではこのコースで学んだことを備忘録的に書いていきたいとおもいます。

スポンサーリンク

関数

じゃんけんゲームとありましたが、最初はいきなり関数からまなぶようですね。pythonの場合はメソッドではなくて関数とよんでいるようですね。ここらへんの呼び方はきにしなくてもよいと思いますが、関数は処理をまとめてかけて、呼び出すときは一行だけでいいというやつですね。

他のプログラミング言語は function とか void とかありますけど、 pythonの場合は def 関数名():のように書きますね。末尾のコロンがついているのがポイントで関数定義したあともそのあとの関数処理の段落ではインテントをつけなければならないという決まりがあります。

def print_hand():
    print('グーを出しました')
print_hand()

関数のよびだしは print_hand()のようにかっこをつけるんですね。Rubyなんかだとかっこをつけなくてもよい場合がありますが、pythonは引数なしで関数名に()かっこをつけなければならないですね。

引数ありの関数

引数ありの関数を定義するには def 関数名(引数名): としますね。
引数名はなんでもよいのですがわかりやすい名前がいいですね。たとえばじゃんけんゲームとかだったら↓の例だったら引数名をhandにしてますね

def print_hand(hand):
    print(hand + 'を出しました')
print_hand("パー")
print_hand("グー")

引数ありの関数は 関数呼び出しのときに自分で値を設定しなければなりません。その値でもって関数が処理されるということですね。

複数の引数をもった関数

複数の引数をもった関数は引数をカンマ区切りでかいていけばいいですね。

def 関数名(par1, par2): のような感じですね。

それと引数を初期化できるようですね def 関数名(par1, par2 = “tanaka”):のような感じ。ちょっとややこしいですが引数を初期化した場合は関数の呼び出しのときに引数を自分で設定しなくてよいようですね。↓の例をみればわかると思います。

def print_hand(hand, name="ゲスト"):
    print(name + 'は' + hand + 'を出しました')
def print_hand2(hand, name):
    print(name + "は" + hand + "を出しました")
print_hand2("パー", "tanaka")
print_hand("グー")

関数定義のときに引数に初期値を入れると→関数呼びだしのときに引数を書かなくもよいのですが、書いてもいいんですね。もし書いた場合は初期値ではなく呼び出し側が優先されますね。その例が↓になります。

def print_hand(hand, name='ゲスト'):
    print(name + 'は' + hand + 'を出しました')
    
print('じゃんけんをはじめます')
player_name = input("名前を入力してください")
if player_name == "":
   print_hand("グー")
else:
   print_hand("グー", player_name)

じゃんけんゲーム

グー チョキ パーのリストがあったとして inputで数字を受け付けて
リストのインデックスに受け取った数字をつかうという例です。ちょっとややこしい

def print_hand(hand, name='ゲスト'):
    hands = ["グー","チョキ","パー"]
    print(name + 'は' + hands[hand] + 'を出しました')
    
print('じゃんけんをはじめます')
player_name = input('名前を入力してください:')
print("何を出しますか?(0: グー, 1: チョキ, 2: パー)")

player_hand = int(input("数字で入力してください:"))
if player_name == '':
    print_hand(player_hand)
else:
    print_hand(player_hand, player_name)

戻り値ありの関数

戻り値ありの関数は return キーワードを使って処理結果をうけとれるようにしたやつですね。returnが呼び出されるとそこで関数処理が終わります。

def 関数名(引数名):
return

とすることで戻り値をうけとれますね。

↓の例は戻り値として真偽値を受け取りますが。この場合は戻り値が真偽値なので、条件分岐の条件式に呼び出せますね

def validate(hand):
    if hand < 0 or hand > 2:
        return False
    else:
        return True
if validate(""):
    #処理
else:
    #処理

じゃんけんゲームの判定

コードの一部しかのせてませんがコンピューターが出した数字とユーザーが出した数字を比較して勝ち負けを決める例ですね。

def judge(player, computer):
    # playerとcomputerの比較結果によって条件を分岐してください
    if player == computer:
        return "引き分け"
    elif player == 0 and computer == 1:
        return "勝ち"
    elif player == 1 and computer == 2:
        return "勝ち"
    elif player == 2 and computer == 0:
        return "勝ち"
    else:
        return "負け"

モジュール

モジュールはimportという構文を使うことによっていろいろなメソッドが使えるようになる構文です。pythonにはあらかじめいろいろモジュールがあるのですが、実は自分でもモジュールを作ることも可能です。

具体的には関数を定義したファイルを作ります。たとえば関数が定義されたファイルutils.pyを作成します。

それを import utils というようにして読み込みます。関数を使う場合はutils.関数名としてなくてはなりません。

たとえばですが以下のような感じでモジュールを読みこんだり使ったりします。

関数が定義されたファイル utils.py↓

# 3つの関数のコードを貼り付けてください
def validate(hand):
    if hand < 0 or hand > 2:
        return False
    return True

モジュールを読みこんで関数を使用するファイル↓

import utils

utils.validate(1)

ライブラリ

pythonには先ほどももうしあげたようにあらかじめ大量のモジュールが用意されています。これのことをライブラリというようですね。

たとえば以下の例では randomモジュール(ライブラリ)を読みこんで 0から2までのランダムな数字を変数に格納しています。

import random
computer_hand = random.randint(0, 2)

Progate Pythonコース3まとめ

Pythonコースの3は関数関係だけでしたが、結構復習になりました。今回学んだことは以下のようなものでしょうか?

  • 関数 → 処理をまとめておくことができていろんなとこで使いまわせる
  • 引数ありの関数 → 引数は初期値をもたせることができる。その場合呼び出し元で引数の設定は省略可能
  • 戻り値ありの関数 → 関数から戻り値を受け取る場合は return文を使う。 真偽値を戻り値としてうけとる場合、呼び出しのときに条件式として使用できる
  • モジュール → 関数定義をまとめてファイルを作成することによってコードをわけることができる。モジュールを読みこむときはimport文を使う
  • ライブラリ → pythonには膨大なライブラリがあるライブラリを読み込むにははimport文を使用する

次の記事はProgateでPythonを学ぶ【コース4はオブジェクト指向】 | 初心者のプログラミング

コメント

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