ゆずまの○○日記がシンプルでいいと思います!

プログラミングを中心に書いていこうと思ってます。

07 関数を使う

  • 関数とは入力に対して出力を返す仕組みのこと。
  • 関数を呼び出すとき
    • 関数名(引数1, 引数2 …)
  • abs
    • 絶対値を求める関数
  • 引数
    • 関数を呼び出すとき、丸カッコの中に数値や文字列のようなデータを入れます
    • 関数に幾つの引数を渡すかも、関数ごとに決まっています。
  • 戻り値
    • 関数が処理した結果、関数から出力するデータのことを言う
    • 関数の中には戻り値がない関数もある。print()
    • def文で定義した関数から戻り値を返すには、return文を使います。
  • 関数を定義するときは、def文を使います。
  • 関数名をつけるコツ
    • 英語の動詞 + 名詞(目的語)
  • ローカル変数
    • 関数の外で引数を使おうとするとエラーになる
    • 関数の外にでると、関数内世界は消えてしまいます。
    • 関数内世界が消えた後は、ローカル変数も一緒に消えて位使えなくなる。
# coding: utf-8

# In[1]:

the_list = [101, 123, 152, 123]

# 合計するための変数を作成しておく
summary = 0;

for item in the_list:
    summary = summary + item;

summary


# In[2]:

sum(the_list)


# In[3]:

abs(10)


# In[4]:

abs(-200)


# In[5]:

int("100")


# In[6]:

int("100", 2)


# In[7]:

# 文字列を16進数の数値に見立てて変換する
int("100", 16)


# In[16]:

# 引数のない関数を定義する
def destiny_tank():
    tanks = ["IV号戦車D型" , "III号戦車J型", "チャーチル MK.VII",
             "MAシャーマン", "P4O重戦車",    "T-34/76"]
    num = input("好きな数字を入力してください。")
    
    # 入力値をリストのインデックスに変換して、長さで割ったあまりを計算している。
    idx = int(num) % len(tanks)
    
    print("あなたの運命の戦車は?")
    print(tanks[idx])

    
destiny_tank();


# In[17]:

# 引数を持つ関数の定義
def destiny_tank2(num):
    tanks = ["IV号戦車D型" , "III号戦車J型", "チャーチル MK.VII",
             "MAシャーマン", "P4O重戦車",    "T-34/76"]
    
    # 入力値をリストのインデックスに変換して、長さで割ったあまりを計算している。
    idx = num % len(tanks)
    
    print("あなたの運命の戦車は?")
    print(tanks[idx])

num_str = input("好きな数字を入力してください:")
num = int(num_str)
destiny_tank2(num);


# In[20]:

from random import randint
num = randint(0, 10)
destiny_tank2(num)


# In[23]:

# 引数を持つ戻り値を返す関数の定義
def destiny_tank3(num):
    tanks = ["IV号戦車D型" , "III号戦車J型", "チャーチル MK.VII",
             "MAシャーマン", "P4O重戦車",    "T-34/76"]
    
    # 入力値をリストのインデックスに変換して、長さで割ったあまりを計算している。
    idx = num % len(tanks)
    
    return tanks[idx]

from random import randint
num  = randint(0, 10)
tank = destiny_tank3(num)
print("今日あなたが乗るべき幸運の戦車は、", tank ,"です")


# In[24]:

def test_func(arg1):
    inner_var = 100
    print(arg1 + inner_year)

test_func(10)

# 関数内で定義した変数はエラーになる
inner_year


# In[28]:

# ローカル変数おw関数の外で使う
monk_fish_team = [158, 157, 163, 157, 145]

total    = sum(monk_fish_team)
length   = len(monk_fish_team)
mean     = total / length
variance = 0

for height in monk_fish_team:
    variance += ( height-mean)**2

variance = variance / length

volleyball_team = [143, 167, 170, 165]

total2    = sum(volleyball_team)
length2   = len(volleyball_team)
mean2     = total2 / length2
variance2 = 0

for height in volleyball_team:
    variance2 += (height - mean2)**2

# 足した数値を要素数で割って分散を求める
variance2 = variance2 / length2

print(variance)
print(variance2)


# In[30]:

def calc_variance(a_list):
    total    = sum(a_list)
    length   = len(a_list)
    mean     = total / length
    variance = 0
    
    for height in a_list:
        variance += ( height-mean)**2
        
    variance = variance / length
    
    return variance

print ( calc_variance([158, 157, 163, 157, 145]) )
print ( calc_variance([143, 167, 170, 165]) )


# In[31]:

monk_fish_team  = [158, 157, 163, 157, 145]
volleyball_team = [143, 167, 170, 165]
pravda_team     = [127,172,140, 160, 174]

monk_fish_variance  = calc_variance(monk_fish_team)
volleyball_variance = calc_variance(volleyball_team) 
pravda_vairiance    = calc_variance(pravda_team)

print(monk_fish_variance**0.5)
print(volleyball_variance**0.5)
print(pravda_vairiance**0.5)


# In[ ]:


06_if文で条件分岐をする

条件に従って処理の内容を分けることを条件分岐と呼ぶ。 - 数値を比較する - 計算の結果を変数に入れて比較する - 関数が結果として返す数値を比較する - 文字列を比較する - == (等しい), != (異なる) - 文字列を検索する - 文字列の中に、特定の文字列が含まれている以下どうかを調べる in演算子 - リストも比較できる. - == , != , in - else文はある - switch文はない。elifで対応する。elseifの省略系。

他に気づいたところ。

# coding: utf-8

# In[1]:

if 2*2*2+2 == 10:
    print('2*2*2+2は10')
if 2+2*2+2 == 10:
    print('2+2*2+2は10')
if (2+2)*2+2 == 10:
    print("(2+2)*2+2は10")


# In[2]:

# 数値を比較する

if 1 == 1:
    print("1番目はTrue")
if 5^(4-4)+9 == 10:
    print("2番目はTrue")
if 2 < len([0, 1, 2]):
    print("3番目はTrue")
if sum([1, 2, 3, 4]) < 10:
    print("4番目はTrue")


# In[3]:

# 文字列を比較する
# == (等しい), != (異なる)

if "AUG" == "AUG" :
    print("1番目はTrue")
if "AUG" == "aug" :
    print("2番目はTrue")
if "あいう" == "あいう":
    print("3番目はTrue")


# In[4]:

# 特定の文字列が含まれているか in演算子

if "GAG" in "AUGACGGAGCUU" :
    print("1番目はTrue")
if "恋と戦いはあらゆることが正当化されるのよ" in "正当化" :
    print("2番目はTrue")
if "stumble" in "A horse may stumble though he has four legs" :
    print("3番目はTrue")


# In[5]:

# リストを比較する
if [1, 2, 3, 4] == [1, 2, 3, 4]:
    print("1番目はTrue")
if [1, 2, 3] == [2, 3] :
    print("2番目はTrue")
if [1, 2, 3] == [ '1', '2', '3']:
    print("3番目はTrue")


# In[6]:

# リスト内の要素を調べる~その1
if 2 in [2, 3, 5, 7, 11]:
    print("1番目はTrue")
if 21 in [13, 17, 19, 23, 29]:
    print("2番目はTrue")
if 'アッサム' in ['ダージリン', 'アッサム', 'オレンジペコ']:
    print("3番目はTrue")


# In[7]:

# リスト内の要素を調べる~その2
if 1 in [0, 1, 2, 3, 4]:
    print("1番目はTrue") 
if [1, 2] in [0, 1, 2, 3, 4]:
    print("2番目はTrue")
if [1, 2] in [0, 1, [1, 2], 3, 4]:

    print("3番目はTrue")


# In[8]:

# ^ は XOR で排他的論理和。優先順位は、 - と + よりも低い。

if 2^3-2+4 == 10:
    print("式1は10")
else :
    print("式1は10にならない")

if 2**3-2+4 == 10:
    print("式2は10")
else :
    print("式2は10にならない")


# In[13]:

2^3


# In[14]:

2^3-2


# In[15]:

2^1


# In[16]:

3-2+4


# In[17]:

2^5


# In[18]:

#  if - else をつかう。

a_year = 2080
if a_year >= 1993:
    if a_year == 1993:
        print(a_year, "年、れに誕生")
    else :
        print(a_year, "年、れに", a_year-1993, "歳")


# In[21]:

# if -elif をつかう

a_year = 2080
if a_year == 1993:
    print(a_year, "年、れに誕生")
elif a_year > 1993:
    print(a_year, "年、れに", a_year-1993, "歳")


# In[22]:

# 素数判定
a_num = 57;

for num in range(2, a_num):
    if a_num % num == 0:
        print (a_num, "は素数ではありません")
        break


# In[ ]:



05_for文でループを使う

  • forとシーケンスの間には、繰り返し変数と呼ばれる変数を置きます。
  • ループで実行したい処理は、for文の後にインデントして記述します。
  • ループで処理するコードの範囲を、インデントして示す。
  • forで始まる行の最後には、コロンを1つ書く。
  • 決まった回数のループを実行したい場合は、組み込み関数のrange()を使う。
    • range(10)で、0から9のループを実行する。
# coding: utf-8

# In[1]:

# for文の使用例
mcz = ['れに', 'かなこ', 'しおり', 'あやか', 'ももか']
for member in mcz:
    print(member)


# In[2]:

mcz


# In[3]:

# 分散を計算する
# 標準偏差 = 分散の平方根

# 分散の求め方
"""
(1) リストの値と平均との差を二乗して足す
(2) 全ての値について、(1)を繰り返す
(3) (2)で得た合計を要素数で割る
"""


# In[11]:


monk_fish_team = [158, 157, 163, 157, 145]

################## 平均値を求める ################## 
# 合計を求める
total = sum(monk_fish_team)

# 要素数を求める
length = len(monk_fish_team)

# 平均値を求める
mean = total / length

# 分散を求めるための変数
variance = 0;
################## 分散を求める ##################
for height in monk_fish_team:
    # リストの値と平均との差を二乗して足す
    variance += (mean - height)**2

# で得た合計を要素数で割る
variance = variance / length

#  分散を表示する
variance


# In[13]:


# 平方根 は 2分の1の累乗で求めることができる。
standard_deviation = variance**0.5
standard_deviation


# In[ ]:




# In[17]:

# 別のリストの標準偏差を計算する
volleyball_team = [143, 167, 170, 165]

total2  = sum(volleyball_team)
length2 = len(volleyball_team)
ave    = total / length

variance2 = 0;

for height2 in volleyball_team:
    variance2 += (height2 - ave)**2

variance2 = variance2 / length2

variance2**0.5


# In[18]:

# range()関数を使って、決まった回数のループを実行する。

for cnt in range(10):
    print(cnt)


# In[19]:

# 複利計算 元金に対して一定の利率をかける処理

# 例 100万円の資金を年間利率5%の投資商品に預けるとする。

savings = 100
for i in range(15):
    savings += savings*0.05

savings


# In[ ]:



04_リストを使う

リストは、複数のデータを並べて管理し、効率的に扱うために使う。
リスト型を定義するには、角カッコ( [~] )を使う。
リストのように複数の要素を持つデータ型シーケンスと呼ぶ。

  • リストの参照方法
    • リスト名[要素のインデックス]
  • リストの要素同士で引き算ができる
  • リストの最後の要素を指定する。
    • リスト名[-1]
  • リストを連結することができる
  • リストの要素の置き換え
    • =代入演算子を使う。リスト名[インデックス] = ‘何か’
  • リストの要素の削除
    • del文を使う。 del リスト名[インデックス]
  • Pythonのリストにはスライスという機能がある
    • スライスとは、リストに入っている要素のうち、連続した複数の要素を指定する記法です。
    • スライスの記法。 リスト名[最初の要素のインデックス:最後の要素のインデックス+1]
    • スライスは、元のリストは変更されず、元のまま残ります。
    • 左側を省略した場合は、最初の要素を指定していることになる。
    • 右側を省略した場合は、最後の要素までを指定していることになる。
  • リストのリスト(2次元配列)を定義することもできる。
  • リストの合計
    • 組み込み関数の sum()
  • リストの最大値
    • 組み込み関数の max()
  • リストの最小値
    • 組み込み関数の min()
  • リストの長さを調べる
    • 組み込み関数の len()
# coding: utf-8

# In[1]:

tokyo_temps = [15.1, 15.4, 15.2, 15.4, 17.0, 16.9]
tokyo_temps


# In[6]:

get_ipython().magic('matplotlib inline')
# 別名を定義して、省略をして使えるようにimport
import matplotlib.pyplot as plt

# グラフの表示
plt.plot(tokyo_temps)


# In[7]:

# インデックスを指定して要素を取り出す 
# リスト名[要素のインデックス]

tokyo_temps[0]


# In[8]:

# リスト要素の引き算
tokyo_temps[5] - tokyo_temps[0]


# In[9]:

# リストの連結をする
e_tokyo_temps = [13.6, 13.5, 14.2, 14.8, 14.8]
tokyo_temps2  = e_tokyo_temps + tokyo_temps
tokyo_temps2


# In[10]:

plt.plot(tokyo_temps2)


# In[12]:

# 要素を置き換える

# リストの定義をする
mcz = ['れに', 'あかり', 'かなこ', 'しおり', 'あやか', 'ゆきな']
mcz

# 5番目の要素を書き換える。(0番目が存在するため。)
mcz[5] = 'ももか'
mcz


# In[13]:

# リストの要素を削除する.
# del文を使う。

del mcz[0]
mcz


# In[14]:

# リストのスライス記法

momotamai = mcz[1:3]
momotamai


# In[15]:

# スライスで左側を省略した場合
mcz[:2]


# In[16]:

# スライスで右側を省略した場合
mcz[1:]


# In[23]:

# リストのリスト 2次元配列
city_temps = [
    [14.8, 14.8, 15.1, 15.4, 15.2, 15.4, 17.0, 16.9] , # 東京
    [10.0, 10.4, 11.5, 11.2, 10.9, 10.6, 11.8, 12.2] , # 秋田
    [16.0, 15.5, 15.9, 16.4, 15.9, 15.6, 17.5, 17.1]   # 熊本
]
city_temps


# In[24]:

# 秋田の平均気温を表示する
city_temps[1]


# In[25]:

# 平均気温の比較 熊本の2000年と熊本の1920年の比較をする
city_temps[2][7] - city_temps[2][0]


# In[26]:

# 3年の平均気温のグラフを描画する
plt.plot(city_temps[0])
plt.plot(city_temps[1])   
plt.plot(city_temps[2])


# In[27]:

# リストの合計を計算する
monk_fish_team = [158, 157, 163, 157, 145]
sum(monk_fish_team)


# In[28]:

# リストの最大値
max(monk_fish_team)


# In[29]:

# リストの最小値
min(monk_fish_team)


# In[30]:

# リストの長さを調べる
len(monk_fish_team)


# In[31]:

# 平均値を出力をする
monk_sum  = sum(monk_fish_team)
monk_len  = len(monk_fish_team)
monk_mean = monk_sum / monk_len
monk_mean


# In[34]:

# 棒グラフを表示する
plt.bar([0, 1, 2, 3, 4], monk_fish_team)
plt.plot([0, len(monk_fish_team)], [monk_mean, monk_mean], color = 'red')


# In[ ]:

03_文字列を使う

文字列を使う

  • 文字列を定義するには、ダブルクォーテーション(“〜”), シングルクォーテーション(‘〜’)と言う引用符を使う。PHPと違って、"と'では違いがなさそう。
  • 引用符で囲まれている文字列の部分は色付けされている部分は、シンタックスカラーリング
  • シングルクォーテーションで、表示しているデータは文字列である
  • クォーテーションを3つ連ねると、改行を含む文字列を定義することができる。
  • 複合演算子 +=, -=, *=, /=
  • 違うデータ型を演算することはできない。(型を揃える。)
  • Pythonで型変換をするには、関数を使う。
# coding: utf-8

# In[ ]:

spam = "spam"


# In[5]:

a_lylic = "でもね私のエネルギーは"
a_lylic = a_lylic + "すでにインフィニティだよ。"
a_lylic


# In[6]:

a_lylic2  = "ずっと笑顔ばかりを選んで"
a_lylic2 += "泣き顔見せるのを迷ってた"
a_lylic2


# In[8]:

a_lylic = "でもね私のエネルギーは"
a_lylic = "a_lylicすでにインフィニティだよ。"
a_lylic


# In[9]:

lylic3 = """強い人になろうとして
弱い僕を封じ込めて
一人ぼっちになった"""
lylic3


# In[10]:

day     = 24
str_day = str(day)
date    = str_day + '日'
date


# In[17]:

# 数字文字列をint型に変換する。
int('200')


# In[16]:

# 数字と小数点のみで構成された文字列を、float型に変換する。
float('3.14159265358979')


# In[ ]:

02_変数を使う

変数名の付け方

  • 数字で始まっていなければどんな文字列もPythonの変数名として使える。(日本語も使える。)
  • アルファベット,数字,アンダースコア(_)を組み合わせて作る
  • 特別扱いしたい変数を定義する時は、大文字だけの変数名を持つ変数を定義して、定数のように扱う。
  • 始めの1文字はアルファベット
  • 30個ほど、変数名に使えない単語がある。(予約語)
# coding: utf-8

# In[1]:

champernowne = 0.12345678910


# In[2]:

champernowne_19 = 0.1234567891011121314


# In[3]:

pi = 3.141592
diameter = 12756.274
pi*diameter


# In[4]:

cal_per_1kg = 7200
cal_per_1minjog = 7.76
min_to_lose1kg = cal_per_1kg/cal_per_1minjog

hours_to_lose1kg = min_to_lose1kg/60
hours_to_lose1kg


# In[ ]: