Presentation is loading. Please wait.

Presentation is loading. Please wait.

プログラミング 田浦健次朗.

Similar presentations


Presentation on theme: "プログラミング 田浦健次朗."— Presentation transcript:

1 プログラミング 田浦健次朗

2 動機 なんとなくコンピュータに計算をさせる際の「 考え方」「ノリ」はわかった(ことにしよう)
そうであっても,機械語でプログラムを作る(CPU の命令を実際に並べる)のはひどく大変!

3 何が大変? x5の例: やるべきことはこれだけ(紙と鉛筆)
y = 1 y = y * x y = y * x y = y * x y = y * x y = y * x 答え y x y 3 1 3 3 3 9 3 27

4 それがこんなことに... ある値を覚えておく場所を自分で覚え ておかなくてはならない(○○は100番地, ○○はRX, ○○はRY, …)
*, + などお馴染みの記法が使えない レジスタとメモリで(レジスタしか演算 できないという理由で)値を移さないと いけない load [100],RX add 0,1,RY mul RX,RY,RY store RY,[101] halt

5 プログラミング言語 人間に易しくプログラムを表現する記法(「言語 」) 言語処理系
その言語のプログラムを「対応する機械語に読 み替えて」実行してくれる 「読み替えて実行してくれる」のもまたプログ ラム!

6 いくつかの言語の実例(固有名詞) C, C++, Pascal, Fortran, Java, JavaScript, Python, Ruby, Perl, PHP, Lisp, Scheme, Haskel, ML, OCaml, Prolog, … 用途に応じて無数に提案されている 本講義では,シンプルさ(学習障壁の少なさ)を理由 に,Pythonで演習を行う

7 大部分のプログラミング言語に共通の事項(1)
変数(x, y, z, ...): 「方眼紙のマス目」に相当 「番地」を覚える必要は無く「自分の好きな名 前」をつけられる 式: 数学で良く使う記法や関数を自然にかける 計算方法は「処理系」が考えてくれる

8 大部分のプログラミング言語に共通の事項(2)
条件による分岐や,繰り返しをすっきりと書く記 法 if文,while文,for文 関数: プログラムの一部に相当 複数の関数を組み合わせてまた別の関数を作る ことができる

9 本質的な「ノリ」は同じ 方眼紙と鉛筆のアナロジー,繰り返しが重要,etc. 結局すべて「機械語の命令列を書きやすくした もの」だからある意味では当然

10 プログラミング言語の学び方 第一段階: 例から学ぶ どんな問題にどのような手段(変数,繰り返し,関数 ,...)が用意されているか
第二段階: 文法と規則をしっかり意識する (残念ながら)特に最初は,「プログラミング」 「間違いとの戦い」 プログラムを書いていて遭遇するエラーへの対 処ができるように

11 Pythonプログラミングを始める プログラムの作成・編集: テキストエディタ(mi, emacs, …) .py で終わるファイル名で保存

12 最初の例: 以下をa.py として作成 print 12345679 * 63 print 12345679 * 72
端末(コマンドライン)で以下を実行 結果 print * 63 print * 72 python a.py

13 起きたこと(プログラムの実行規則)の説明
プログラムは一般には,文を羅列したもの printも文の一種(print文) プログラムをpythonコマンドで実行すると,かか れた文を順に「実行」していく print 式を実行すると式の値が計算され,結 果が表示される

14 関数 (最重要コンセプト) プログラムは,あるまとまった計算をする断片を 「関数」という単位で書くのが基本
実行結果 def f(x, y): return 3*x+4*y print f(10, 20) 関数定義(def文) 110

15 def f (x, y): return 3*x+4*y
関数にまつわる文法と用語 パラメータ 関数への入力を受け取る変数名 関数名 def f (x, y): return 3*x+4*y print f(10, 20) 関数定義 本体(中身) 文の羅列(この例では一つ) 関数呼び出し

16 def文の実行規則 関数定義も文の一種(def文) def文を「実行」すると,その名前で関数が定義さ れる
後からそれを使う(「呼び出す」)ことができる 注:def文はあくまで関数を定義するだけ. その場 で本体が実行されるわけではない

17 関数呼び出し式の実行規則 関数呼び出しの値が計算される際, その「本体」(文の羅列)が実行される パラメータに値が渡される
return ...も文の一種(return文)

18 return文の実行規則 関数の本体を実行中, return文 return 式 が実行されると, 式が計算され
その関数呼び出しが終了し, 式の計算結果がその関数呼び出しの計算結果 となる return 式

19 式について 数(1, 2, 3, …) 演算子(3 + 4, 2 + 3 * 4, 123**10)
変数(x, y, hensu, etc. 関数の入力や代入文の左辺 に現れた名前) 関数呼び出し (def文で)定義したもの 組み込み関数: Pythonに元々備わっているもの (abs, sin, cos, log, random, etc.) 複素数の実部・虚部 式.real, 式.imag

20 組み込み関数を使う場合の注意 from math import *
数学関数(cos, sin, log, exp, など)を使えるように するためのおまじない 「mathから全部持ってくる」 from random import * 乱数関数(random, randint)などを使えるようにす るためのおまじない

21 プログラムの「雛形」 from math import * from random import * def f(x, y): …
def g(x, y, z): … print f(10, 20) g(100, 200, 300) おまじない(必要ならば) 関数の定義. ここが中心. 本題 実際の「実行」

22 残り(文の全容) if文 代入文 繰り返し while文 for文 print文についてもう少し

23 if文 条件式が真ならthen節,偽ならelse節を実行 条件式は任意の式 then節,else節は任意個の任意の文
def my_abs(x): if x < 0: return -x else: return x def my_abs(x): if x < 0: return -x else: return x 条件式 then節 else節 if文

24 代入文 右辺の式を計算し,左辺の変数名の,「以降の値」 をそれに設定
def gojo(x): y = y = y * x y = y * x y = y * x y = y * x y = y * x return y 代入文(yという「余白」に1と書く) 右辺(任意の式) 左辺(変数名)

25 繰り返し(while文) 条件式を計算.偽ならば終了.真ならば本体を実行し てもう一度繰り返し
言い換え: 条件式が偽になるまで本体を何度でも実 行 def njo(x, n): y = ato_nankai = n while ato_nankai > 0: y = y * x ato_nankai = ato_nankai – return y 条件式 while文 本体

26 繰り返し(for文) 指定された範囲の値を順に変数に代入して本体 を実行
何回繰り返すかが繰り返しの開始時にわかる場 合はwhileよりもforを使う方が簡単 def njo(x, n): y = for i in range(0, n): y = y * x return y 範囲 for文 本体

27 print文についてもう少し 一般的な文法 print 式, 式, ... 複数の式を表示可能(空白で区切られる)
式として文字列(”hello”など)も許される 結果 print 式, 式, ... print x, ”+”, y, ”=”, x+y = 30

28  Python文法の特徴・注意点 要所でコロン(:) 要所で改行(コロン後に改行,1行に1文) 要所で「字下げ」
(def文の本体, ifのthen/else節, while/forの本体の 始まり) それらの文は同じだけ「字下げ」 def njo(x, n): y = a = n while a > 0: y = y * x a = a – return y while a > 0: y = y * x a = a – 1 while a > 0: y = y * x a = a – 1

29 やってしまいがちなミス 何がやってしまいがちかよりも, 「やってしまうと何が起きるか」を理解するこ と(エラーメッセージの解読)
エラーメッセージを見て直せること ミスをしないことは不可能

30 from math import * 忘れ print cos(1.57) 結果
どこで何をしようとしたときにエラーが起きたのか Traceback (most recent call last): File "c.py", line 2, in <module> print cos(1.57) NameError: name 'cos' is not defined 直接の問題(cosが定義されていない)

31 変数名,関数名の綴り間違い def f(x): return z + 1 print f(10) 結果
Traceback (most recent call last): File "c.py", line 4, in <module> print f(10) File "c.py", line 2, in f return z + 1 NameError: global name 'z' is not defined

32 関数のreturn忘れ def f(x): x + 20 print f(10) print f(10) + 40.5 結果 None
Noneは関数呼び出しがreturnを実行せずに終了した場合に自動的に変えされる値 Noneがprint文でprintされている None Traceback (most recent call last): File "c.py", line 4, in <module> print f(10) + 40 TypeError: unsupported operand type(s) for +: 'NoneType' and 'float' None を実行しようとして失敗

33 無限whileループ def njo(x, n): y = a = n while a > 0: y = y * x return y 結果(し~ん)


Download ppt "プログラミング 田浦健次朗."

Similar presentations


Ads by Google