今回は、今まで学んできたfunction()の新しい出力方法 returnを学んで、
計算機を作る授業。
今まではfunctionの使い方は
def dothis():
do something()
do something()
something = do somethings()
print(something)
みたいな感じで何か複数の行動をまとめたり、
その結果を出力するものとして学んできたけれども
returnを使うと、defの中だけで終わっていたデータを
他のものにも流用ができるようになる。
今回の計算機でいうと、
def add(n1, n2):
return n1 + n2
というfunctionをつくると、
add(3,4)
add(5,9)
とか流用もできるし、
def subtract(n1, n2):
return n1 - n2
これは引き算のfunctionをつくったのだけど
n1 = 5
n2 = 2
n3 = 1
print(subtract(n1, add(n2,n3)))
みたいなこともできる。
もちろん数字だけじゃなくて文字や変数でも使える。
returnの練習として計算機を作る。
簡易計算機の流れとしては、
1・最初の数字を入力してもらう。
2・足す・引く・かける・割るのどれを使うか選択する。
・上記の4つ以外をタイプした場合はクリアしてやり直す。
3・次の数字を入力してもらう。
4・計算結果をプリントする。
5・計算を続けるかを確認する。
・続けない場合はクリアしてやりなおす。
6・続ける場合は計算結果からさらに計算を続ける。
こんな感じ。
まずは4つの計算方法を先程の足す引くのように入力する。
def add(n1, n2):
return n1 + n2
def subtract(n1, n2):
return n1 - n2
def multiply(n1, n2):
return n1 * n2
def divide(n1, n2):
return n1 / n2
1・最初の数字を入力してもらう。
これは簡単ですね。
num1 = float(input("What's the first number? : "))
2・足す・引く・かける・割るのどれを使うか選択する。
・上記の4つ以外をタイプした場合はクリアしてやり直す。
これは前回使った辞書型のリストを使ってkeyだけを呼び出すといい。
なぜリスト型かというと、inputでそれぞれの計算を入力すると、
それぞれのfunctionが動くようにしているから。
+ を答えると、add(n1, n2)が動く。
operations = {
"+" : add,
"-" : subtract,
"*" : multiply,
"/" : divide
}
for operation in operations:
print(operation)
・上記の4つ以外をタイプした場合はクリアしてやり直す。
これも簡単でifを使う。
if select == "+" or select == "-" or select == "*" or select == "/":
続きはここからインデントして全部かいていく。
クリアしてやり直す部分は、あとで。
3・次の数字を入力してもらう。
これも普通にinputで。
num2 = float(input("What's the next number?"))
4・計算結果をプリントする。
ここで、入力してもらった計算方法をリスト表記で入力することで、
リスト型の表記なんだけど計算ができるようになる。
result = operations[select](num1, num2)
記述的にわかりづらい場合は一旦変数にした方がいいのかもしれない。
calc_func = operation[select]
result = calc_func(num1, num2)
で、結果がわかったので計算方法と一緒に出力する。
print(f"{num1} {select} {num2} = {result}")
5・計算を続けるかを確認する。
・続けない場合はクリアしてやりなおす。
これもinputで聞いて、ifで分岐させる。
continue_calc = input(f"Type 'y' to continue calculating with {result}, or type 'n' to start a new calculation: ").lower()
6・続ける場合は計算結果からさらに計算を続ける。
if continue_calc == "y":
num1 = result
elif continue_calc == "n":
end_calc = False
clear()
calc()
終わらない限り続ける、というのは whileを使うといいので、
計算方法を聞くところから最後までをwhileでくくっちゃう。
終わらせるための変数も end_calcというのを作っておく。
end_calc = True
while end_calc:
select = input("Pick an operation: (+ - * /) : ")
if select == "+" or select == "-" or select == "*" or select == "/":
num2 = float(input("What's the next number?"))
result = operations[select](num1, num2)
print(f"{num1} {select} {num2} = {result}")
continue_calc = input(f"Type 'y' to continue calculating with {result}, or type 'n' to start a new calculation: ").lower()
if continue_calc == "y":
num1 = result
elif continue_calc == "n":
end_calc = False
clear()
calc()
else:
clear()
print("wrong type. clear")
calc()
クリアして計算を始める、というのが触れていなかったけど
表記としては
clear()
calc()
というのが出ている。
今までの流れだと繰り返しができないので、
計算機そのものをcalc()として囲うのと、
clear()というのでコンソールを消去する機能がいる。
clear()の機能はosというのをインポートして、
自作でコンソールクリアというのを作らなければいけない。
もちろん自分で作れるレベルではないので、
ググってコピペ。
だいたいわからないことは先人が残してくれている。w
先頭に追加して、
import os
def clear():
command = 'clear'
if os.name in ('nt', 'dos'): # If Machine is running on Windows, use cls
command = 'cls'
os.system(command)
最初の数字を聞くところから最後までをdef calc():で囲っちゃう。
最終的なソースはこれ。
PyCharm便利。。。(これもAngela Yu先生が教えてくれた、無料。)
import os
def clear():
command = 'clear'
if os.name in ('nt', 'dos'): # If Machine is running on Windows, use cls
command = 'cls'
os.system(command)
def add(n1, n2):
return n1 + n2
def subtract(n1, n2):
return n1 - n2
def multiply(n1, n2):
return n1 * n2
def divide(n1, n2):
return n1 / n2
operations = {
"+" : add,
"-" : subtract,
"*" : multiply,
"/" : divide
}
def calc():
num1 = float(input("What's the first number? : "))
for operation in operations:
print(operation)
end_calc = True
while end_calc:
select = input("Pick an operation: (+ - * /) : ")
if select == "+" or select == "-" or select == "*" or select == "/":
num2 = float(input("What's the next number?"))
result = operations[select](num1, num2)
print(f"{num1} {select} {num2} = {result}")
continue_calc = input(f"Type 'y' to continue calculating with {result}, or type 'n' to start a new calculation: ").lower()
if continue_calc == "y":
num1 = result
elif continue_calc == "n":
end_calc = False
clear()
calc()
else:
clear()
print("wrong type. clear")
calc()
calc()
returnの使い方や、functionの()の中の変数の使い方とかを学びましたとさ。