# 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") ``` ## 『ローカル変数』と『グローバル変数』 この2つの定義の違いをプログラムで示しましょう。次のプログラムは、グローバル変数「x」とローカル変数「y」を定義したものです。 ```python= def print_y(): y = 100 # ローカル変数 print("y:", y) x = 50 # グローバル変数 print("x:", x) print_y() ``` 『ローカル変数』と『グローバル変数』 というものの違いは何かというと、定義する場所なのです。 ![](https://i.imgur.com/vZytKou.png) 『ローカル』と『グローバル』、この2つの変数の違いは、ものすっごい大事です。 ### 引数のある関数 関数以外の変数を使用する場合は、パラメーターとして渡す必要があります ```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))) ``` ## 関数内の関数を使用する 次の機能が存在するプログラムを作成してください。(なるべく機能毎に関数にすること) - 機能1:ユーザーに数値を入力させ、指定した段数のみを表示できるようにすること - 機能2:九九掛け算表の全てを表示させること 「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 ```