ホーム 戻るll
ああ歓びも 悲しみも 苦しみも胸に秘め 胸に秘め ベルが鳴る鳴る 幕開きだ 昨日を今日に 実らせよ 生きとし生ける この世なれ
(森繁劇団の毎日開幕の前と、開幕の後にみんなで歌う劇団歌)
20150505
第三章 数と計算
1・ 単純に計算 2・ 数の定義 3・ 算術演算子 4・ その他の演算子 5・ 数を扱う組込関数
6・ 変数に数を代入
7・ インクリメント、デクリメント 8・ 数の書式表現 9・ lambda式 10・ 使用する関数 11・ 計算するパターン(現実の抽象化)
http://www.dimensions-math.org/Dim_JP.htm ←数学の話
用語
数値: Pythonの組み込み型の一つ。数値型は整数型、長整数 型、浮動小数点型、および複素数型。 数値は長さや数といった数字を扱う。 文字列との違いは計算が行えること。 組み込み型 数値型 整数 integer 82, -39 小数点を持たない数値
長整数 120000000000000000000L 長い整数 浮動小数点 float 3.142, 小数点を持つ数値 複素数(虚数) 3.14j, 10j http://www.kaijo.ed.jp/education/subjects/mathematics/pdf/2012summer_1Miyazaki.pdf 複素数 四則演算:
演算子 operater * 乗算 5 * 3 asterisk / 除算 8 / 2 slash + 加算 3 + 6 plus
- 減算 5 - 2minus 演算の対象の数値が異なる型の場合は、まず 複雑な型へ変換が行われる。 除算を行う場合注意。 除算を行う演算子は「/」の他に「//」がある。 「//」演算子は小数点以下は切り捨てられる。 integer division >>> 1 // 2 0
>>> 3 // 2
1 floatにも適用 17.0 // 5 3.0 演算子追加 % 剰余.余り percent remainder >>> 10 % 3 1 >>> 9 % 3 0
** べき乗
2乗 5 ** 2 25 3乗 2 ** 3 8
演算子の優先順位: order of operation 算数と同じ PEMDAS 括弧()を使った優先順位の変更: 括弧で囲まれた要素は先に演算が 行われる。
文字列及び数値を整数に変換(int) :
数値と数値の間では演算を行うことができる。 数値と文字列では四則演算を行うことは出来ない。 10 + "12" # TypeError 文字列を数値に変換することで 演算が可能。 「int」関数を使用。
「int」関数は文字列に含まれる数字と同じ数値を新しく作成して返す。 >>> a=int("24") >>> b=int("30") >>> a+b 54 数値を整数へ変換:
「int」関数は数値を整数に変換する。
int(16.8) 16
int(-7.2) -7
pythonの式
式: 結果を得られるまでの処理。
式の結果を得ることを「評価する」という。 ・単純に計算する
>>> 路線価=20 >>> 面積=80 >>> 評価額=路線価*面積 >>> 評価額 1600
等号=は変数に式を代入するときに使う。 >>> x=y=z=0 代入は複数の変数に同時にできる。 >>> x 0 >>> y 0 >>> z 0
>>> 3 * 3.75 / 1.5 演算対象の型が混合していた場合、整数は浮動小数点に変換。 7.5 整数と浮動小数点数を相互に変換する関数 float(),int() 対値に変換する abs()
>>> 消費税率=8/100 >>> 購入価格=10000 >>> 消費税込価額=購入価格*消費税率+購入価格 >>> 消費税込価額 10800.0 参照
http://www.pasteur.fr/formation/infobio/python/index.html
3・ 数の定義
整数:integer負から正までの値を表し端数はない。 浮動小数点: float 同じ値の二つの値が(==)等しくないと判断され る場合がある。近似値であるため。比較するときは端数を丸めてから使う。 数字のリテラルとはpythonでそのまま読み込めるデータ
4・演算子
代入演算子 =
左側に名前 name 右側にオブジェクト
名前 = オブジェクト
単項演算子
−4
−の前に数値、計算式がない。
等値演算子 ==
左右が等値かどうか判定する print (10==5) print (10==10)
False True
比較演算子
> より大きい greater-than
< より小さい less-than
<= 入り小さいかイコール less-than-equal
>= より大きいかイーコール less−greater−equal
!= 等しくない
>>> 1 > 0.5 True >>> 12 > 2 True
>>> 12 < 3 False >>> 12 == 3 False >>> 3 != 12 True
複合代入演算子
>>> a = b = c = 15 >>> a += 5 aに5を足してからその結果をaに代入。
>>> a
20
>>> b += 5
>>> b
20
>>> c += 5
>>> c
20
論理演算子
プール値boolean:真Trueと偽Falseの二つの値をとる。
A and B 両方が真なら真 A or B いずれかが真なら真 A == B 同等.double-equal same value A != B 等しくない A <> B 同上 not B 否定 Bが真でないとき真
演算子:ひとつ以上の値から別の値を引き出す
None:ヌル値を渡す。何のデータもない。変数に割り当てがな い場合と異なる。
真偽値:真キーワードTrue 偽のキーワードFalse 4 < 0
False
3 + 4 > 10
False
>>> a=None >>> a 空白 >>> print(a) None
>>> c = 1 >>> print(a+c) タイプが異なる
Traceback (most recent call last): File "<pyshell#5>", line 1, in <module> print(a+c) TypeError: unsupported operand type(s) for +: 'NoneType' and 'int'
>>> a="戸張" >>> b="戸張" >>> a is b False *メモリ上の値が共有されていない。 >>> a==b *同等である True
>>> s1 = 'pig' 英字文字列
>>> s2 = 'pig'
>>> s1 == s2 同等
True
>>> s1 is s2
True メモリ上の値が共有されている
is関数の結果が 漢字と英文字で相違する。 A and B 両方が真なら真 A or B いずれか、真なら真 not B
>>> (1 == 1)and(2 == 2)
True
>>> (1 == 1)and(2 == 3)
False
>>> (1 == 1)or(2 == 2)
True
>>> (2 == 1)or(7 > 10)
False
>>> not (1 == 2)
True
>>> ('now') == ('now')
True
>>> ('2009/05/20')==('2009/05/21')
False
5・ 数を扱う組込関数
mathモジュールをimportして使う
import math math.floor(x) 少数点以下切捨て
>>> import math >>> math.floor(1.234) 1
算術関数:三角関数など計算できる。 >>> import math
>>> math.pi,math.e (3.1415926535897931, 2.7182818284590451)
>>> sum([1, 2, 3, 4, 5]) リストの要素の合計 15 >>> sum((1, 2, 3, 4, 5)) タブルの要素の合計 15
6・変数に数を代入して使う 変数は、はじめに値が代入された時点で作成される。初期化。 変数を使って式を書くと、演算にはその変数に代入された値が使用される。 値が代入されていない変数を式で使用することはできない。 値を代入せず、変数の名前だけを宣言することはない。 変数 :メモリ上のデータを論理的に参照する機能。 変数名: 変数名で参照できる。i j x ポピュラーな名前
>>> a = 3
>>> b = 5 >>> a + 1, a - 1 (4,2)
2っの式がカンマで区切られて与えられたので答えはタプル >>> b + 3, b / 2 (8, 2) >>> a % 2, b ** 2 (1, 25)
>>> b / 2 + a 5 >>> print (b / (2.0 + a))
1.0
7・ インクリメント、デクリメント
インクリメント:回数を増やすための方法 デクリメント:回数を減らすための方法 :
演算子 += 1を加算する -= 1を減算する
>>> zan=0 >>> zan+=100 >>> print (zan) 100 >>> zan-=50 >>> print(zan) 50
デクリメント例 試行できる回数を超過したらエラーにする 実行例 デクリメントパターン 初期値 Count = 3 1回目
暗証番号を入力する 暗証番号が正しければ 入金、出金ができる もし正しくなければ Count = Count - 1
もし Countが0であれば入金、出金ができなくする そうでなければ、次にすすみ、暗証番号を入力する 2回目
暗証番号を入力する 暗証番号が正しければ 入金、出金ができる もし正しくなければ Count = Count - 1
もし Countが0であれば入金、出金ができなくする そうでなければ、次にすすみ、暗証番号を入力する 8・ 数の書式表現 求めるもの: 文字列と計算結果を出力 データ : 入力 方法 : 算術演算子 %d %d % 条件: 書式
>>> print ( '合計は', 23+56) データの区切りにカンマをつけ、文字列を加える。
合計は 79
>>>print("%d と %d の和は %dである" % (8, 9, 8 + 9)) %:書式化文字 d;十進法 8 と 9 の和は 17である
書式化文字
%s 文字列 %0.2f 浮動小数点以下2桁の浮動少数点数 %4d 数値の前をスペースで埋めて4けたにする %04d 数値の前を0で埋めて4けたにする
%書式化文字の使用例
>>> print ("%0.2f " % 123.456) 123.46 >>> print ("%0.2f" % 123.4) 123.40
>>> print ("%9.2f" % 123.456) 123.46 >>> print ("%0.7f" % 123.456) 123.4560000
10・lambda式 数値処理を簡単にする
lambda式
lambda式を使うと、引数をもとに単純な処理を行う関数のような働きを持つ。処理を 簡潔に記述できる。map()やfilter()を組み合わせることで、内包表記と同様な処理 を記述できる。
lamda式:プログラムの中に簡単な関数を組み込む。 行うべき処理を組み込んだリストやディクショナリを作成する。
lamda式はボディにreturn文がひとつだけ含まれる特別の無名関数。 求めるもの: 加算 データ : 入力 変数 x y z 方法 : def return lambda 条件:
>>> def 加算(x,y,z): return x + y + z
>>> 加算(3,4,5) 12
lambda式で記述
lambda 引数リスト : 引数を使った式 変数を使った代入文は使用できない
>>> 加算 = lambda x,y, z :x + y +z 1行で書ける >>> 加算(7,8,9) 24
求めるもの: lambda式を使った和の計算をする データ : 引数 方法 : def return lambda 変数 y x act a n 条件:
>>> def action(x): return (lambda y:x+y)
>>> act = action(99) >>> act(5) 104 >>> act(10) 109
>>> a = lambda x:2*x >>> a(5) 10
>>> b = lambda x,y:x/y >>> b(65,5) 13.0
処理を組み込んだディクショナリ
求めるもの: 処理を組み込んだディクショナリを作る
データ : 入力 方法 : ディクショナリ作成 lambda 式 [key]() 条件:
>>> key = 'a' ディクショナリのキーを指定 >>> d ={'a':(lambda:3*2),'b':(lambda:6/2),'c':(lambda:8+9)} 辞書作成 >>> d[key]() キーで値を呼び出す 6 >>> key ='b' >>> d[key]() 3.0 >>> key='c' >>> d[key]() 17
求めるもの: リストの合計値 データ : リスト 方法 : sum関数 条件:
>>> sum([1, 2, 3, 4, 5]) <リストの要素の合計 15 >>> sum((1, 2, 3, 4, 5)) <タブルの要素の合計 15
10 使用する関数
abs()絶対値
pow(x, y, z) x**y/zの計算 xのy乗をzで割 った余り
pow()第一引数の第2引数乗
int() 整数:少数を含まない数値。
round(x、2):丸め精度を与える。 2 右に2単位 ー2 左に2単位 float(): 浮動小数点数値
divmod(x,y) : xをyで割って、商と余りを算出
cmp(x、y):ひとつ目の数値が二つ目の数値より大きいか
等しいか、小さいかをー1,0,1で表示する。 max最大値を求める
min最小値を求める
sum([ ]) リストの合計値を求める。
abs()絶対値、pow()第一引数の第2引数乗
>>> abs(-42), 2 ** 4, pow(2,4) (42, 16, 16) int() 整数:少数を含まない数値。 round(x、2):丸め精度を与える。 2 右に2単位 ー2 左に2単位
>>> int(2.567), round(2.567), round(2.567,2) (2, 3.0, 2.5699999999999998)
>>> int(12.0) 12
float(): 浮動小数点数値
>>> float(12) 12.0
round(x、2):丸め精度を与える。 2 右に2単位 ー2 左に2単位 >>> round(12.456,2) 12.46 >>> round(123.45,-2) 100.0 >>> round(12.456) 12
divmod(x,y) : xをyで割って、商と余りを算出
>>> divmod(1, 7) (0, 1) >>> divmod(8, 7) (1, 1) >>> divmod(15, 7) (2, 1) >>> divmod(22, 7) (3, 1) >>> divmod(29, 7) (4, 1)
7で割ると余りはすべて1となった。
>>> divmod(7,3) (2, 1)
>>> divmod(7,2) (3, 1)
pow(x, y) はx**yと同じ. (x, y) >>> pow(2, 3) 8 >>> pow(2, 3, 2) 0 >>> pow(2, 3, 3) 2
cmp(x、y):ひとつ目の数値が二つ目の数値より大きいか
等しいか、小さいかをー1,0,1で表示する。比較関数 cmp
>>> (cmp(1,2),cmp(2,2),cmp(3,2))
(-1, 0, 1)
>>> cmp(7,8) -1 >>> cmp(9,6) 1 >>> cmp(5,5) 0
abs絶対値、max最大値、min最小値を求める
>>> a=abs(-12) >>> a 12 >>> max(1,2,3)
3
>>> min(1,2,3) 1
求めるもの: 足し算の結果を表示する データ : 入力 方法 : print %d %d % 条件: 書式
(a)和
print("%d と の和は %dである" % (8,9,8+9))
8 と 9 の和は 17である
(b)積
数列の数
求めるもの: ある範囲の整数の数 データ : 入力 方法 : def print input 変数 m n a b 条件: 書式
(c)def 数1(): print('数mから数nまでの整数数列の数はいくつですか?') m = input('mの数>') n = input('nの数>') a = (int(m) - (int(m) - 1)) b =(int(n) - (int(m) - 1)) print('m - (m - 1) =', a) print('n - (m-1) =', b) print('1から数えて終点はbですから,') print('整数数列の数は',b,'です。') >> 数1() 数mから数nまでの整数数列の数kはいくつですか? mの数>35 nの数>567 m - (m - 1) = 1 n - (m - 1) = 533 1から数えて終点はbですから, kの数は 533 です。
偶数の数
求めるもの: ある数からある数の範囲の偶数の数 データ : 数入力 方法 : def偶数 変数 m n m1 n1 input int print 条件: 書式
def 偶数(): print('数mからnまでの間に偶数は何個ありますか?') m=input('数m>') n=input('数n>') m1=int(m) / 2 n1=int(n) / 2 print(n1-m1+1,'個です。')
>>> 偶数() 数mからnまでの間に偶数は何個ありますか? 数m>32 数n>456 213.0 個です。
求めるもの: 自動車番号関数を作る データ : 入力 方法 : def print input if else int == 条件: 答えは算出しておく 3桁アルファベットと3桁の数字
def 自動車番号(): print('三文字のアルファべト') print('三桁の数字で') print('自動車ナンバーが決まる') print('何通りの番号があるか?') 答 = input('>?') if int(答) == 17576000 : print('正しい') else: print('間違い')
>>> 自動車番号() 三文字のアルファべット 三桁の数字で 自動車ナンバーが決まる 何通りの番号があるか? >?17576000 正しい >>> 自動車番号() 三文字のアルファべット 三桁の数字で 自動車ナンバーが決まる 何通りの番号があるか? >?10000000 間違い
求めるもの: 加算のクラスをつくる データ : 入力 変数 a b c 方法 : class input print int 条件: 書式
class クラスを作る class 加算: a = input('数値入力>') b = input('数値入力>') c = int(a) + int(b) print('a + b =', c)
数値入力>25 数値入力>35 a + b = 60
例
求めるもの: 最大値のクラスをつくる データ : 入力 変数 a b 方法 : class input if else int print 条件: 書式
class 最大: a = input('数値入力a>') b = input('数値入力b>') if int(a) > int(b): print('a は b より 大きい') else: print('b は a より 大きいか等しい')
数値入力
a>36 数値入力
b>25 a は b より 大きい
求めるもの: 購入金額の合計を算出して消費税込の金額を計算する データ : 変数 税込率 りんご みかん バナナ a b c x y z r 方法 : class input int print 条件:
#消費税 #購入計 = 価格 * 数 * 税込率 #価格 > りんご,みかん,バナナ #税込率 = 1.05 class 消費税: 税込率 = 1.05 りんご = 100 みかん = 200 バナナ = 150 a = input('りんご 数>') b = input('みかん 数>') c = input('バナナ 数>') x = int(a) * りんご y = int(b) * みかん z = int(c) * バナナ q = ((x + y + z) * 税込率) r = int(q) print('購入計は', r ,'円です。')
りんご 数>12 みかん 数>24 バナナ 数>36 購入計は 11970 円です。
11 計算するパターン(現実の抽象化)
(1)類型のパターン
類型:これまでの値に新しい値を加える def torihiki() : 類型のパターン zan=0 変数の初期化 nyu=0 de=0 n=0 nyu=10000 入金取引 de=5000 出金取引 zan=zan+nyu-de 残高計算 n=n+1 回数を1増やす nyu=150000 de=200000 zan=zan+nyu-de n=n+1 nyu=130000 de=10000 zan=zan+nyu-de n=n+1 print(n ,"kai ","zan",zan) 回数と残高を出力
>>> torihiki() 3 kai zan 75000
(2)換算のパターン 換算 求めるもの: フィート換算関数を作る データ : メートルを入力 方法 : 変数 m m1 f f1 f2 i 関数 def input print flosat int 関数名フィート換算 条件: 1メートル 3,281フィート 1フィートは123インチ
def フィート換算(): print ("1メートルは3.281フィート") print("1フィートは12インチ") m=input("メートルで長さを入力してください。>") m1=float(m) m1 f=m1*3.281 f f1=int(f) f2=f-f1 i=f2*12 print(m );print("メートルは") print(f1);print ("フィート") print(i);print("インチです。")
>>> フィート換算() 1メートルは3.281フィート 1フィートは12インチ メートルで長さを入力してください。>5 5 メートルは 16 フィート 4.86 インチです。
換算
指数
求めるもの: 一年を秒数に換算する データ : 1分 一時間 一日 年 の秒数を入力 変数 a b c d
方法 : def input int print 関数 条件: 書式
def 指数(): a=input('一分は何秒?') b=input('一時間は何分?') c=input('一日は何時間?') d=input('一年は何日?') print('一年は',int(a) * int(b) * int(c) * int(d),'秒です。') >>> 指数() 一分は何秒?60 一時間は何分?60 一日は何時間?24 一年は何日?365 一年は 31536000 秒です。
比率を求めるパターン
比率=部分 / 全体
求めるもの=結果:パーセントで表す 方法:割り算 浮動小数点 float int input print データ:人数入力 結果:男子生徒、女子生徒、子供の構成比 def percent(): a=int(input("boy>")) b=int(input("girl>")) c=int(input("child>")) d=a+b+c x=float(a / d)*100 y=float(b/ d)*100 z=float((c/ d)*100) print("boys ", x, "%") print("girls ",y ,"%") print("childs ",z ,"%")
>>> percent() boy>45 girl>76 child>35 boys 28.8461538462 % girls 48.7179487179 % childs 22.4358974359 %
為替換算の問題
自分の通貨を1とすると相手の通貨はいくらか ドルから円:自分の通貨ドルを1とする 円からドル:自分の通貨円を1とする
求めるもの:1円は何ドルか、1ドルは何円か データ:換算率 方法:割り算 換算率 円 ドル を入力 結果:円>ドル、ドル>円
def kawase(): 関数定義 a=int(input("1ドルは何円か>")) ドル円換算率を入力 b=int(input("何ドルを円に換算するか>")) 換算元のドル貨を入力 c=int(input("何円をドルに換算するか>")) 換算元の円貨を入力 x=int(b*a) ドル円換算式 print(b," ドルは ",x," 円") 結果出力 y=float(c*1/a) 円ドル換算式 print(c ," 円は",y," ドル") 結果出力
1ドルは何円か>90 何ドルを円に換算するか>1000 何円をドルに換算するか>10000 1000 ドルは 90000 円 10000 円は 111.111111111 ドル
スケール変更のパターン
求めるもの:摂氏、華氏の変換を求める データ:変換式、変換図 方法:割り算 換算率 結果:摂氏>華氏、華氏>摂氏
華氏 水の凝固点32度 水の沸点212度 摂氏 水の凝固点 0度 水の沸点100度
212−32 =180 180 / 100 = 1.8 華氏 = 32 + 摂氏*1,8 摂氏=(華氏ー32)/1.8
def kasisetsi(): a=int(input("摂氏>")) b=a*1.8+32 print("摂氏 " ,a ,"は","華氏 ",b) c =int(input("華氏>")) d=(c-32)/1.8 print("華氏 ",c,"は","摂氏 ",d)
摂氏>38 摂氏 38 は 華氏 100.4 華氏>69 華氏 69 は 摂氏 20.5555555556
求めるもの:円柱の面積 条件 :計算式 v:体積 π:3.14159 r: 底面の半径 h:円柱の高さ v=3.1459 *r*r*h
def 円柱面積(): 底面半径=int(input('底面の半径>')) 円柱高さ=int(input('円柱の高さ>')) 円柱面積=3.1459*底面半径*底面半径*円柱高さ print('円柱面積',円柱面積) >>> 円柱面積() 底面の半径>5 円柱の高さ>10 円柱面積 786.475
誤差
>>> 1/3 0.33333333333333331
浮動小数点数には、コンピュータ誤差がある。 桁数が少なければ無視できる。
A man snatches the first kiss ,pleads for the second ,demands the third ,takes the forth ,accepts the fifth
and endures all the rest
H.Rowland
ホーム 戻る |