1
0

More than 1 year has passed since last update.

事業企画1年目のpython学習5日目

Posted at

本記事について

とある事業会社で事業企画をやっています。
元々は、新規営業1年→エンプラ営業3年やっていました。
事業企画への異動に伴って、ルーチンワークの自動化やスクレイピングに興味を持ちpython学習をスタートしました。
目的達成までは記事を執筆予定です。どうぞよろしくお願いいたします。

開発環境

jupyterlab

使っている本

すっきりわかるpython入門
https://sukkiri.jp/books/sukkiri_python

勉強計画

週5日間ミニマム1h勉強する。
最初の1weekは1冊終わらせることをgoalに。
start@ 2022/2/21

学習時間

1.0h

学び

今日は繰り返しを学びたいと思います〜

pythonで部品を組み上げる

関数

今までの繰り返しなどを用いれば色々とプログラムを作れますが、見通しの悪いプログラム/修正難易度がかなり高いコードになっていきます。
そこで重要なのは、関数を自作することです。

関数の定義と関数の呼び出し

定義
def 関数名():
   処理
※pythonで定義されている関数(例えば、print)と重複することは許されているため、間違えて定義されている関数を定義するのは避けよう。

呼び出し
関数名()

def hello():  #関数を作成
    print('hello my name is kamon')

hello() #自作したhello関数を呼び出し
#hello my name is kamon

ローカル変数と独立性

関数の中で定義された変数は、その関数の中でしか使えない。
ローカル変数の独立性という。

##引数と戻り値

引数

関数は独立した一つの世界だが、ローカル変数を関数の外から参照したい時もある。
その際に使うのが引数。

def hello(name): #呼び出した時に渡されるデータを受け取る変数
    print('hello my name is{}'.format(name))
hello('kamon') #呼び出しと同時にkamonを渡す
hello('asakura') 

#hello my name is kamon
#hello my name is asakura

複数の引数を渡す

関数の定義
def 関数名(引数1,引数2,・・・):
       処理

引数を利用する関数の呼び出し
関数名(引数1,引数2,・・・)

コレクションを引き渡すこともできる。

def profile(name,age,hobby): #関数を定義、複数の引数を受け取る関数。
    print('my name is{}'.format(name))
    print('my age is{}'.format(age))
    print('my hobby is{}'.format(hobby))
profile('kamon','27','coffee') #profileを入力

#my name iskamon
#my age is27
#my hobby iscoffee

引数と戻り値を利用する関数の定義

def 関数名(引数1,引数2,・・・):
      処理
     return 戻り値

引数は複数の利用が可能だが、戻り値は1つのみ

def plus(x,y):
    answer = x+y
    return answer
)
answer = plus(100,50)
print('足算の答えは{}'.format(answer))

#足算の答えは150

関数の連携

めっちゃ使うよ!

def input_scores(name):
    print('{}さんのスコアを入力してください'.format(name))
    network = int(input('networkの点数は? >>'))
    database = int(input('databaseの点数は? >>'))
    security = int(input('securityの点数は? >>'))
    scores = [network,database,security]
    return scores

def calc_average(scores):
    avg = sum(scores) / len(scores)
    return avg

def output_result(name,avg):
    print('{}さんの平均点は{}です。'.format(name,avg))

kamon_scores = input_scores('kamon')
asakura_scores = input_scores('asakura')

kamon_avg = calc_average(kamon_scores)
asakura_avg = calc_average(asakura_scores)

output_result('kamon',kamon_avg)
output_result('asakura',asakura_avg)


#kamonさんのスコアを入力してください
#networkの点数は? >> 60
#databaseの点数は? >> 70
#securityの点数は? >> 70
#asakuraさんのスコアを入力してください
#networkの点数は? >> 40
#databaseの点数は? >> 50
#securityの点数は? >> 60
#kamonさんの平均点は66.66666666666667です。
#asakuraさんの平均点は50.0です。

関数の応用テクニック

###暗黙のタプルによる複数の戻り値
タプルは、()を省略できる暗黙のルールがある。
そのため、()内を1つの戻り値として返しているが複数のように見える。

def plus_and_minus(a,b):
    return (a+b, a-b)
(next,prev) = plus_and_minus(1978,1)

デフォルト引数

def 関数名(仮引数名 = デフォルト値,・・・):
処理
       return 戻り値

def eat(breakfast,lunch,dinner='curry'): #第一引数はだめ、最後から設定していくルール。
    print('breakfast is {}'.format(breakfast))
    print('lunch is {}'.format(lunch))
    print('dinner is {}'.format(dinner))

eat('panda','egg') #最後の引数はcurryと定義されているため省略可能

#breakfast is panda
#lunch is egg
#dinner is curry

eat('panda','egg','curry and rice') #なお、引数設定すれば下記の通りくる
#breakfast is panda
#lunch is egg
#dinner is curry and rice

引数にキーワードを指定した関数呼び出し

関数名(仮引数名 1=実引数1,仮引数名2 =実引数 2,・・・)

可変長変数

def 関数名 (仮引数名1,仮引数名2,・・・,*仮引数名 n):
※呼び出し時にn個以上の実引数を指定できる
※第n引数意向に指定した実引数は、1つのタプルとして受け取る
※第n実引数の指定が省略された場合は、関数は空のタプルを受け取る
※可変長引数は、末尾の仮引数にしか指定することができない。

def eat (breakfast,lunch,dinner = 'curry',*desserts):
    print('朝は{}を食べました'.format(breakfast))
    print('昼は{}を食べました'.format(lunch))
    print('夜は{}を食べました'.format(dinner))
    for d in desserts:
        print('おやつに{}を食べました'.format(d))
)
eat('トースト','パスタ','カレー','アイス','チョコ','カレー')
#朝はトーストを食べました
#昼はパスタを食べました
#夜はカレーを食べました
#おやつにアイスを食べました
#おやつにチョコを食べました
#おやつにカレーを食べました

ということでした。

グローバル変数


name = 'kamon'
def hello():
    print('hello' +  name ) #関数内にnameは定義されていないが、外に参照しに行っている。
hello()

#hellokamon

name = 'kamon'
def change_name():
    global name #この変数は、グローバルの変数であることを宣言している。
    name = 'asakura'
def hello():
    print('hello ' + name)

グローバル変数を濫用することは、可読性や混乱を招く観点でリスクが非常に高い。

今日ミスったところ

本日は特にありませんでした。
練習問題の難易度が上がって行っています。
定期的に振り返りたいと思います。

感想 

金曜日ですね。
土日は休みなので、練習問題の振り返りと6・7章の学習を進めたいと思います。運が良ければ8章までやって一周本を終わらせるかもしれません。
ところで初級編を終えた後に、実践編としておすすめの本はあるのでしょうか?
どなたかお勧めがあればご教示いただけると嬉しいです。
それでは今週もお疲れ様でした。

1
0
0

Register as a new user and use Qiita more conveniently

  1. You get articles that match your needs
  2. You can efficiently read back useful information
  3. You can use dark theme
What you can do with signing up
1
0