---
# System prepended metadata

title: Python - Function(1) 上課用
tags: [Python講義]

---

# Python - Function(1) 上課用

###### tags: `Python講義`

## 1 絵を描いてください(no function)

![](https://i.imgur.com/ub2GyAw.png)


:::spoiler
```python=
# 1
for i in range(3):
    for k in range(i*2+1):
        print("* ", end = "")
    print()

for i in range(4):
    for k in range(i*2+1):
        print("* ", end = "")
    print()

for i in range(5):
    for k in range(i*2+1):
        print("* ", end = "")
    print()

# 2     
for i in range(3):
   print("* "*(i*2+1), end = "")
   print()
    
for i in range(4):
   print("* "*(i*2+1), end = "")
   print()

for i in range(5):
   print("* "*(i*2+1), end = "")
   print()
# 3   
for i in range(1, 6, 2):
   print("* " * i)
    
for i in range(1, 8, 2):
   print("* " * i)

for i in range(1, 10, 2):
   print("* " * i)
:::

## 引数と戻り値が無い関数
一緒に開発するのは簡単
:::spoiler
```python=
def fun1():
    for i in range(3):
        for k in range(i*2+1):
            print("* ", end = "")
        print()

def fun2():
    for i in range(4):
        for k in range(i*2+1):
            print("* ", end = "")
        print()
    
def fun3():
    for i in range(5):
        for k in range(i*2+1):
            print("* ", end = "")
        print()
    
fun1()
fun2()
fun3()
```
:::

## 引数のある関数
元のプログラムを見て、類似点と相違点を見つけてください
* 相違点:
![](https://i.imgur.com/QlbKui8.png)
:::spoiler
```python=
n = 3
for i in range(n):
    for k in range(i*2+1):
        print("* ", end = "")
    print()
n = 4
for i in range(n):
    for k in range(i*2+1):
        print("* ", end = "")
    print()
n = 5
for i in range(n):
    for k in range(i*2+1):
        print("* ", end = "")
    print()
```
:::

同じ部分を関数に変換し、変数をパラメーターに変換します
:::spoiler
```python=
def fun(n):
    for i in range(n):
        for k in range(i*2+1):
            print("* ", end = "")
        print()
fun(3)
fun(4)
fun(5)
```
:::

for ver.
:::spoiler
```python=
def fun(n):
    for i in range(n):
        for k in range(i*2+1):
            print("* ", end = "")
        print()
for i in range(3, 6):
    fun(i)
```
:::

## 引数を指定する

入力がない場合はエラーが発生します

エラーを回避するためにパラメーターを指定します(ポカヨケ)

```python=
def repeat_msg(msg, repeat):
    print(msg * repeat)

repeat_msg('Hello ') 
```
![](https://i.imgur.com/yLdZfOU.png)


## 自動お酒販売ロボット
![](https://i.imgur.com/O9iYWix.png)
### 

![](https://i.imgur.com/WMZi7Me.jpg)


```python
def osake_is_ok(age):
    if age >= 20 :
        print("osake OK")
    else:
        print("osake NO")
    
age = int(input("age: "))
print("Age: {}".format(age))
osake_is_ok(age)
#osake_is_ok()  #  error
```

```python
def osake_is_ok(a = 20):
    print("Age:{}".format(a))
    if a >= 20 :
        print("osake OK")
    else:
        print("osake NO")
        
osake_is_ok(25)
osake_is_ok(19)
osake_is_ok()
```

```python
def osake_is_ok(a = 0):
    print("Age:{}".format(a))
    if a >= 20 and a!= 0:
        print("osake OK")
    else:
        print("osake NO") 
        
osake_is_ok(25)
osake_is_ok(19)
osake_is_ok()
```



## 戻り値のある関数
```python
def re_add(a, b):
    sum = a + b
    return sum

a = int(input("a = "))
b = int(input("b = "))

ab_sum = re_add(a, b)
print("{} + {} = {}".format(a, b, ab_sum))
```
### bool
```python=
def osake_is_ok(age):
    if age >= 20 :
        return True
    else:
        return False

def osake_is_ok_2(age):
    flag = False
    if age >= 20 :
        flag = True
    return flag

age = 20
print("Age: {}".format(age))
if osake_is_ok(age) :
    print("osake OK")
else:
    print("osake NO")
    
if osake_is_ok_2(age) :
    print("osake OK")
else:
    print("osake NO")
```
## 『ローカル変数』と『グローバル変数』
この２つの定義の違いをプログラムで示しましょう。次のプログラムは、グローバル変数「x」とローカル変数「y」を定義したものです。

```python=
def print_y():
    y = 100     # ローカル変数
    print("y:", y)

x = 50          # グローバル変数
print("x:", x)
print_y()
```
『ローカル変数』と『グローバル変数』　というものの違いは何かというと、定義する場所なのです。
![](https://i.imgur.com/vZytKou.png)
『ローカル』と『グローバル』、この２つの変数の違いは、ものすっごい大事です。

### 引数のある関数
関数以外の変数を使用する場合は、パラメーターとして渡す必要があります
```python
def fun():
    s = sum(range(1, n+1))
    return s

n = int(input("n:"))
print("1 ~ {}: {}".format(n, fun()))
```
![](https://i.imgur.com/DST5uXg.png)

```python
def fun():
    n = 10 # xxx
    s = sum(range(1, n+1))
    return s

n = int(input("n:"))
print("1 ~ {}: {}".format(n, fun()))
```

![](https://i.imgur.com/WpDFN1h.png)


```python
def fun(n):
    s = sum(range(1, n+1))
    return s

n = int(input("n:"))
print("1 ~ {}: {}".format(n, fun(n)))

```
## 関数内の関数を使用する
次の機能が存在するプログラムを作成してください。（なるべく機能毎に関数にすること）
- 機能１：ユーザーに数値を入力させ、指定した段数のみを表示できるようにすること
- 機能２：九九掛け算表の全てを表示させること

「3.End」は、「End」と表示し終了すること


```
1.九九を 1 行だけ表示する 2.九九表 3.End

Please select function(機能を選択してください): 2
1*1= 1 2*1= 2 3*1= 3 4*1= 4 5*1= 5 6*1= 6 7*1= 7 8*1= 8 9*1= 9 
1*2= 2 2*2= 4 3*2= 6 4*2= 8 5*2=10 6*2=12 7*2=14 8*2=16 9*2=18 
1*3= 3 2*3= 6 3*3= 9 4*3=12 5*3=15 6*3=18 7*3=21 8*3=24 9*3=27 
1*4= 4 2*4= 8 3*4=12 4*4=16 5*4=20 6*4=24 7*4=28 8*4=32 9*4=36 
1*5= 5 2*5=10 3*5=15 4*5=20 5*5=25 6*5=30 7*5=35 8*5=40 9*5=45 
1*6= 6 2*6=12 3*6=18 4*6=24 5*6=30 6*6=36 7*6=42 8*6=48 9*6=54 
1*7= 7 2*7=14 3*7=21 4*7=28 5*7=35 6*7=42 7*7=49 8*7=56 9*7=63 
1*8= 8 2*8=16 3*8=24 4*8=32 5*8=40 6*8=48 7*8=56 8*8=64 9*8=72 
1*9= 9 2*9=18 3*9=27 4*9=36 5*9=45 6*9=54 7*9=63 8*9=72 9*9=81 

1.九九を 1 行だけ表示する 2.九九表 3.End

Please select function(機能を選択してください): 1

生成する数の九九を入力してください: 7
1*7= 7 2*7=14 3*7=21 4*7=28 5*7=35 6*7=42 7*7=49 8*7=56 9*7=63 
1.九九を 1 行だけ表示する 2.九九表 3.End

Please select function(機能を選択してください): 1

生成する数の九九を入力してください: 3
1*3= 3 2*3= 6 3*3= 9 4*3=12 5*3=15 6*3=18 7*3=21 8*3=24 9*3=27 
1.九九を 1 行だけ表示する 2.九九表 3.End

Please select function(機能を選択してください): 3
End
```
### 機能: 九九表を表示する
![](https://i.imgur.com/jnUb39S.png)

:::spoiler
```python
def all_99():
    for i in range(1, 10):
        for j in range(1, 10):
            print("{}*{}={:>2}".format(i, j, i*j), end = " ")
        print()
    
all_99()
```
:::

### 機能:九九を 1 行だけ表示する
![](https://i.imgur.com/3tzR3lv.png)

:::spoiler
```python
def row_99(n):
    for i in range(1, 10):
        print("{}*{}={:>2}".format(n, i, i*n), end = " ")
    print()

n = int(input("Input n: "))
row_99(n)
:::

#### 九九表 - function 

```python=
row_99(1)
row_99(2)
row_99(3)
row_99(4)
row_99(5)
row_99(6)
row_99(7)
row_99(8)
row_99(9)
```
#### 九九表 - for

```python=
def all_99():
    for i in range(1, 10):
        row_99(i)
    print()
all_99()
```


:::spoiler
```python
# function
def row_99(n):
    for i in range(1, 10):
        print("{}*{}={:>2}".format(n, i, i*n), end = " ")
    print()
    
def all_99():
    for i in range(1, 10):
        row_99(i)
    print()
    
# main 
while True:
    print("1.九九を 1 行だけ表示する 2.九九表 3.End")
    select = int(input("Please select function(機能を選択してください): "))

    if select == 1:
        n = int(input("生成する数の九九を入力してください: "))
        row_99(n)
    elif select == 2:
        all_99()
    elif select == 3: 
        print("End")
        break
```
:::
### ex 的延伸
```python=
def message(count):
    s  = ""
    if count == 0:
        s = "I'm still among you. Game have just begun."
    elif count == 1:
        s = "How much blood will you shed to stay alive?"
    elif count == 2:
        s = "Game over.\n--Trapped--"
    return s

def fun(s):
    s = "*** " + s + " ***"
    return s

answer = "pig"
count = 0
print("「Live or die, make your choice.」")

while count < 3:
    guess = input("Take a guess : ")
    if guess == answer:
        print("You must meet death in order to be reborn. Congratulations")
        break
    string = fun(message(count))
    print(string) 
    count+=1
```