define(定義する)から来ている「関数 def」について解説します。使用しているキーボードから入力してその値を使って計算して結果を表示させます。
関数 def と キーボード入力 input()
関数 def
def 関数名 (引数1, 引数2, 引数3, …):
計算式など
計算式など
……
……
……
……
関数名 (引数1, 引数2, 引数3, …) ※関数を呼び出し
プログラムの中で同じプログラムを使う時や、プログラムの整理などに活用されます。
関数と関数内で使用する数値や変数を定義します。関数を使用したいところで関数名と引数(値または変数)を定義して、関数を使用することを宣言します。
キーボード入力 input()
input() ※文字列
int(input()) ※整数
float(input()) ※浮動小数点数
input()での入力値は文字列になります。数値として扱うにはint()やfloat()を使って数字に変換する必要があります。
defとinputを使った動作確認

面積を求めるプログラムと洗濯機の動作をイメージしたプログラムを書いてみました。
面積を求める
コード
下記のコードをThonnyに貼り付けてローカルで動作させて下さい。ファイル名の指定はありません。
#三角形
the_base = 0
height = 0
kai1 = 0
#台形
the_upper_base = 0
the_lower_base = 0
kai2 = 0
#円
r = 0
pai = 3.14
kai3 = 0
#形状指定
shape = 0
def triangle_area (the_base, height):
kai1 = the_base * height / 2
print('the_base= ', the_base)
print('height= ', height)
print('kai = ', kai1, '\n')
def trapezoid_area (the_upper_base, the_lower_base, height):
kai2 = (the_upper_base + the_lower_base) * height / 2
print('the_upper_base= ', the_upper_base)
print('the_lower_base= ', the_lower_base)
print('height= ', height)
print('kai = ', kai2, '\n')
def circle_area (r):
kai3 = (r **2) * pai
print('r = ', r)
print('kai = ', kai3, '\n')
while True:
print('どの計上の面積を計算しますか?')
print('1:三角形、2:台形、3:円')
shape = input()
if (shape == '1'):
print('底辺?')
the_base = int(input())
print('高さ?')
height = int(input())
triangle_area (the_base, height)
elif (shape == '2'):
print('上底?')
the_upper_base = int(input())
print('下底?')
the_lower_base = int(input())
print('高さ?')
height = int(input())
trapezoid_area (the_upper_base, the_lower_base, height)
elif (shape == '3'):
print('半径?')
r = int(input())
circle_area (r)説明
三角形、台形、円の面積を求めます。
実際に触ってみてもらうと分かると思いますが、求めたい面積の形状を選択して必要な値を入力すると面積が求められます。
洗濯機
洗濯機の制御をイメージしてプログラムを組んでみたいと思います。少し長いですが中身はシンプルですので、コピー&ペーストして動作させてみて下さい。ファイル名の指定はありません。
import time
#変数
mode = '0'
mode_step = 0
#時間
time_flood = 0 #注水時間
time_wash = 0 #洗い時間
time_rinse = 0 #すすぎ時間
time_dehydrate = 0 #脱水時間
time_drain = 0 #排水時間
#注水
def flooding (time_flood ):
print('注水中' )
time.sleep(time_flood)
mode_step = 1
print('注水完了' )
time.sleep(0.5 )
#洗い
def washing (time_wash ):
print('洗濯中' )
time.sleep(time_wash)
mode_step = 2
print('洗濯完了' )
time.sleep(0.5 )
#すすぎ
def rinsing (time_rinse ):
print('すすぎ中' )
time.sleep(time_rinse )
mode_step = 3
print('すすぎ完了' )
time.sleep(0.5 )
#脱水
def dehydration (time_dehydrate ):
print('脱水開始' )
time.sleep(time_dehydrate )
mode_step = 4
print('脱水完了' )
time.sleep(0.5 )
#排水
def drainage (time_drain):
print('排水開始' )
time.sleep(time_drain)
print('排水完了' )
time.sleep(0.5 )
while True:
print('モードを選択して下さい。')
print('1:自動、2:洗い、3:すすぎ、4:脱水、5:排水')
mode = input()
if (mode == '1'):
flooding (2) #注水
washing (3) #洗い
drainage (1) #排水
dehydration (0.5 ) #脱水
flooding (2) #注水
rinsing (3) #すすぎ
drainage (1) #排水
dehydration (0.5 ) #脱水
flooding (2) #注水
rinsing (2) #すすぎ
drainage (1) #排水
dehydration (3 ) #脱水
time.sleep(1 )
print('全行程終了' )
elif (mode == '2'):
flooding (2) #注水
washing (3) #洗い
drainage (1) #排水
dehydration (3 ) #脱水
time.sleep(1 )
print('全行程終了' )
elif (mode == '3'):
flooding (2) #注水
rinsing (3) #すすぎ
drainage (1) #排水
dehydration (3 ) #脱水
time.sleep(1 )
print('全行程終了' )
elif (mode == '4'):
drainage (1) #排水
dehydration (3 ) #脱水
time.sleep(1 )
print('全行程終了' )
elif (mode == '5'):
drainage (1) #排水
time.sleep(1 )
print('全行程終了' )説明
洗いから脱水まで一通り自動で行える自動モードと、各単体動作を選択出来るモードを用意してみました。洗いはモータなどを動かす動作、注水や排水はバルブなどを操作する開閉動作などがありますが、信号の出力先が無いので省略しています。
注水や排水、脱水などは、何度も出てきます。これらを関数にしておくと関数名と引数を定めるだけで動作させることができdefがとても便利です。また、defを並べるだけでステップ制御が成立します。


コメント