1.プログラミングの準備

1.1 プログラミング環境(エディタ,ターミナル(コマンドプロンプト),統合開発環境(IDE))について

プログラミングのためには通常エディタターミナルの2つが必要となります.プログラミングはコンピュータと人間が会話するための言語ですから人間がコンピュータに命令を伝えるためにプログラムという文章を編集する必要があります.プログラムを編集するためのソフトをエディタと言います(Windowsのメモ帳やMacのmi,LinuxのvimやEmacsなど). 次に,作成したプログラムをコンピュータに伝える必要があります.この人間がコンピュータに伝えるシステムをターミナルと呼びます.

このターミナルに指示を出して,皆さんが書いたプログラムを実行します.ところで,皆さんはいつもコンピュータを使うときにターミナルを使わずマウスでアイコンをクリックしてますよね?実はコンピュータに命令を伝える方法は2つあって1つが「ターミナルにコマンド(文字による命令)を打つ方法」,もう一つが,「マウスでアイコンをクリックする方法」です.前者をCUI(Characteristic User Interface)と言い,後者をGUI(Graphycal User Interface)と言います.CUIに慣れるまでは大変かもしれませんが,プログラミングを打ってるうちに慣れますのであまり怖がらないように.

さて,エディタとターミナルがあればプログラミングは誰でも出来るのですが,エディタとターミナルの機能を備えさらにプログラミングを作成・実行する上でとても便利な環境(ソフト)が用意されている場合があります.この環境の事を統合開発環境(Integrated Development Environment, 略してIDE)と呼びます.この講義ではPyCharmというIDEを使います.

3つのウインドウに分割されてます.左上のウインドウに作成したプログラムが保存されるフォルダが表示されています. インストール時に設定したので,"python"というフォルダが見えてるかと思います.その中に,作成したプログラムが保存されます.右上のウインドウはエディタが配置されるウインドウです.早速,プログラムを書いてみましょう.

1.2 プログラムファイルを作成し,ターミナル上でPythonプログラムを実行する方法

PyCharmの左上[File]→[New]クリック 現れたウインドウから[Python File]を選択しクリック ファイル名は"it01_01"としましょう.[OK]をクリック

右上のウインドウに今作成した"it01_01.py"が表示されたはずです.これがエディタとなってますので,この中でプログラムを作成していきます.それでは早速プログラムを作りましょう.エディタ上で

print("Hello world !")

と書いて下さい(書くたびに保存されるので保存ボタンはありません).これは,「"Hello world !"を表示しなさい」というプログラムです.「"print( )"は( )内を表示しなさい」という命令を表す「関数」です(「関数」については後ほど詳しくやります).次に,下のウインドウ(ターミナル上で)で下記のようにコマンドを打ち実行してください(コマンドを打ち最後にリターンキーです).

python it01_01.py

無事 "Hello world !"が表示されたかと思います.これがプログラム作成から実行までの流れになります.

1.3 インタラクティブシェルによるPythonプログラムの実行方法

Pythonプログラムの実行方法はもう一つあります.対話しながらPythonを操作できる機能の事でインタラクティブシェルと呼ばれます.今度は,ターミナルのみを用います. ターミナル上で

python

と打って実行してください.下記のような表示になったと思います.

これがPythonのインタラクティブシェルと呼ばれるものです.この画面では先ほどのように「ファイルを作成し」,「エディタを立ち上げ」,「プログラムを書き・保存し」,「プログラムを実行する」という手間が必要ありません.先ほどと同じことをターミナル上で実行します.

In [1]:
print("Hello world !")
Hello world !

インタラクティブシェル上では"print( )"を省略することができます.

In [2]:
"Hello world!"
Out[2]:
'Hello world!'

手間いらずで非常に簡単ですね.インタラクティブシェルは直接プログラム言語を読み取り実行し実行結果を返す機能を持っています. 通常,本格的なプログラム(大きなプログラム)を書く場合は「プログラムファイル(.py)を作成し,ターミナル上で実行」します。簡単なプログラム(小さなプログラム)や大きいプログラムを作る際に一部分を実験的に動かす場合などでは「インタラクティブシェルによりプログラムを実行」します.  このように「エディタ」と「インタラクティブシェル」が一体となっているIDEはとても便利ですが,Pythonではもっと便利なプログラム作成援用ツールjupyter notebookがあります。

1.4 jupyter notebookの使い方

本講義ではjupyter notebookを使ってpythonのプログラミングを行います.「習うより慣れろ」という事で早速やってみましょう. コマンドライン上で

と打ってください.するとWebブラウザが立ち上がり以下のページが現れます.

右上の「New」をクリックし現れた選択肢から「Python3」をクリックします.すると以下のウインドウが現れます.

左に緑の縦線があり「in [ ]:」と書かれている部分がインタラクティブシェルになります(青の縦線の場合,一度「Enter」を押して左の縦線を緑色にして下さい).先ほどと同様に"Hello world"と打ち最後に「Shift + Enter」を押してください.プログラムが実行されます.プログラムを実行するだけならこれだけで良いのですが,jupyter notebookはプログラミングを学ぶ上で便利な機能を幾つか備えてます.例えば,PythonだけでなくMarkdown言語(html,TeXも含む)も使用できるので,Markdownを用いてメモを加えながらプログラミング学習を進めることが出来ます.本講義でもぜひ自分でメモを取りながらプログラミング学習を進めて下さい。

青もしくは緑で囲まれた領域を「セル(Cell)」と呼びます.セルは「コマンドモード(青)」,「エディットモード(緑)」の2つに場合分けされます。「Enterキー」で「コマンドモード」→「エディットモード」の切り替えを行い,「Escキー」で「エディットモード」→「コマンドモード」の切り替えを行います.

コマンドモード

エディットモード

コマンドモードではセルの追加や削除を行ったり,セルで記述する言語としてPythonとMarkdownのどちらを用いるのか選択できます.コマンドモードで「a」を押すと今選択しているセルの上に新しいセルが追加されます.「x」を押すとセルを削除します.また,「Python」→「Markdown」の切り替えは「m」を押します.「Markdown」→「Python」の切り替えは「y」を押します. エディットモードではPythonやMarkdownで記述するだけです.実行する際には「Shift + Enter」を押してください. このように昨日の切り替えを行う簡単なキーのことをショートカットキーと呼びます.慣れるとマウス操作よりはるかにキーボード操作スピードが上がるのでショートカットキーを使うようにして下さい.その他にも,様々なショートカットキーがあります.興味のある人はコマンドモードで「h」を押してください.jupyter notebookのショートカットキーのヘルプが現れます.

さて,続いてノートブックの保存方法です.一番上の「jupyter」の横がこのノートブックの名前になります.今は「Untitled」となっていると思います.そこをダブルクリックすると名前を変更できます.今回は「IT_01」としましょう.保存は左上のボタンです.

最後にjupyter notebookの終了方法です.下記のようにホームに移動し起動している(緑色の)ノートブックにチェックを入れ,左上のshutdownボタンを押して下さい.

続いて,jupyter notebookを起動したPyCharmのコマンドラインで「Ctrl+c」を押してください.これで,jupyter notebookが正常に終了されます.決して,ブラウザの右上のバツボタンでいきなり終了しないようにして下さい。

1.4 簡単なプログラム(1) お絵かき

昔は,"Hello world !"書いたら,あとは粛々とプログラミングを学んだものですがせっかく現代的な言語を学んでいるのでお絵かきしながら慣れましょう. インタラクティブシェルに次のプログラムを書き1行ずつ実行してみてください."#"の後ろはコメントとなり実行されません("#"を外したらエラーが出ます).

In [18]:
from turtle import * # 取りあえず,現段階ではお絵かきするための「おまじない」だと思ってください
In [27]:
t01=Turtle() # 動くペン先`t01`を用意(正確には「turlleオブジェクトを作成」詳しい意味はそのうちやります)
In [20]:
t01.forward(300) # ペン先の向きに前へ100進む
In [21]:
t01.left(120) # ペン先を左へ120°回転
In [22]:
t01.forward(300)
In [23]:
t01.left(120)
In [24]:
t01.forward(300)
In [28]:
exitonclick() # 画面をクリックしたら閉じる(プログラム終了)

正三角形が書けたかと思います.例えば,次のような関数があります.

関数(正確にはメソッド) 動作
forward(10) 前へ10進む
backward(10) 後ろへ10進む
left(30) ペン先が左へ30°回転する
right(30) ペン先が右へ30°回転する
circle(50, 120) 半径50,中心角120°の円弧
pencolor('red') 線の色を赤にする
fillcolor('red') 図形内を赤に塗りつぶす(図形内を塗りつぶしたいときには塗りつぶす前にこのメソッドを用意すること)
begin_fill( ) 塗りつぶしの始まり
end_fill( ) 塗りつぶしの終わり
`penup()` ペン先をキャンバスから離す
`pendown()` ペン先をキャンバスに置く
setpos(x, y) 任意の座標まで移動する
pensize(5) 線の太さを変更する
write("こんちは") 現在位置のすぐ上に文字列を描画

色の種類は'red'以外にも'cyan', 'yellow', 'green', 'magenta'などなどたくさんあります.詳細は下記のURLを参考に.

http://www.tcl.tk/man/tcl8.4/TkCmd/colors.htm

turleモジュールはもっと多くのことが出来ます。詳細は下記を見て自分で調べてみて下さい. https://docs.python.jp/3/library/turtle.html

レポート課題1

上のメソッドを用いて一筆書きで自由にお絵かきしなさい. プログラムをノートブックに書き「it01_01_学籍番号.ipynb」としてメールに添付して提出しなさい.コメントは必ず書くこと.また,他人と異なるプログラムを作ること.

宛先:akilecture[at]musashino-u.ac.jp(八島)

〆切:10/9(月)

レポートの提出方法

 レポートはpythonファイルとして提出してもらいます.以下にレポート提出までの簡単な手順を説明します.

  1. jupyter notebook上で新しいレポート用のノートを作成しプログラムを作成しファイル名を「it01_01_学籍番号」とし保存する.

  1. 保存したファイル(C:\Users\ユーザー名\Documents\workspace\pythonにあります)「it01_01_学籍番号.ipynb」をメール添付しayashima[at]musashino-u.ac.jpへ送ること.

1.5 簡単なプログラム(2) 計算(電卓??)

続いて簡単な計算をやってしまいましょう。

In [33]:
2 + 4 # 足し算 
Out[33]:
6
In [34]:
2 - 4 # 引き算
Out[34]:
-2
In [35]:
2 * 4 # かけ算
Out[35]:
8
In [36]:
2 / 4 # わり算
Out[36]:
0.5
In [14]:
2 ** 4 # べき乗 この場合2の4乗をあらわす
Out[14]:
16
In [37]:
4 % 3 # 余り(剰余)
Out[37]:
1
演算子 説明
+ 足し算をする
- 引き算をする
\* 掛け算をする
/ 割り算をする
% 割り算の余りを求める
** 累乗を計算する

注意:インタラクティブシェルでは"2+4"と入力すれば"6"と出力されましたが,エディタに"2+4"と打ち プログラムファイルtest.pyを作り、ターミナル上で python test.py を実行しても何も出力されません.エディタには"print(2+4)"と書きtest.pyを実行すれば"6"が出力されます.

また,()のあるなしで計算順序が変わるので計算結果も変わります.

In [38]:
2 + 3 * 5
Out[38]:
17
In [39]:
(2 + 3) * 5
Out[39]:
25

2「変数」と「データ型」(その1)

 プログラムを作るには「材料」と「道具」が必要になります. 「トマトソースパスタ(ポモドーロ)」を作るときには,「材料」として「麺」「にんにく」「トマトソース」「オリーブオイル」「水」「塩」「黒コショウ」が必要でしょうし,「道具」として「鍋」「ボウル」「コンロ」「包丁」は必要でしょう.同じように,プログラムを作るときにも「材料」として「データ(リテラル)」が必要とされ,道具として「関数」「演算子」「変数」が必要になります.  それでは具体的にまずは「データ」と「変数」について考えます.

2.1 数値の変数(int(整数型),float(浮動小数点型))

変数xを用意し,そこにデータ3を代入します.料理と対応付けると「切った野菜=データ」で「(切った野菜を入れる)ボウル=変数」ですね.

In [57]:
x = 3 # xに3を代入
print(x) # 変数xの値を表示
3

x, y = 1, 2のように書いて,複数の代入を一度に行うこともできます。

In [58]:
# 何をやってるプログラムでしょうか?
x, y = 2, 3 # xとyに2, 3を代入
x, y = y, x # 何をやってる??
print(x, y)
3 2

数学と異なり,等号=は右辺を左辺へ代入することを表します(右辺と左辺が等しいことを示すときには==を用います.後でやります).1行目でx3を代入し2行目でxを表示してます. もう少し,変数計算をしましょう.

In [48]:
x = 2 #xに2を代入
In [49]:
x = x+1# 右辺でxに1が足され,左辺のxへ代入
In [50]:
print(x)
3

x3となりました.上と同じ内容は下記のようにも書けます。

In [51]:
x = 2 # xに2を代入
In [52]:
x += 1 # x = x +1と同じ意味
In [53]:
print(x)
3

+=を複合演算子と呼びます.他にも-=, *=, /=, %=, **=など他にもあります(それぞれの動作については各自試してください). 変数名は分かり易い名前にするのが基本です.

In [72]:
# 円の面積を求める1 変数名が分かりにくい
a = 3.14
b = 10
c = a * (b ** 2)

print(c)
314.0
In [73]:
# 円の面積を求める2 変数名が分かり易い
pi = 3.14   # 円周率の設定
radius = 10 # 半径の設定
area = pi * (radius ** 2) # 円の面積の計算
print(area)
314.0

さて,今まであまり意識していなかったですが,「変数」には代入するデータの性質の違いに応じて「データ型」というもので分類されてます.数値の場合,「整数型(int」と「浮動小数点型(float」に分類されます.「変数」の型はデータを変数に代入した時に決定されます.例えば,上のプログラムの例ではradiusは整数型であるのに対しpi, areaは浮動小数点型です.type()という関数は()内の変数のデータ型を教えてくれます.

In [74]:
print(type(radius))
<class 'int'>
In [75]:
print(type(pi))
<class 'float'>
In [76]:
print(type(area))
<class 'float'>

2.2 文字列の変数(str(文字列型))

「数値(データ)」を変数へ代入して取り扱ったように,「文字(データ)」も変数へ代入して取り扱います.通常,文字は1文字だけではなく連なっているので「文字列」と呼びます.早速,文字列を変数へ代入してみましょう.数値と異なり「文字列」は" "(ダブルクオテーション)もしくは' '(シングルクオテーション)で囲みます.

In [77]:
a = "Hello !" # 文字列は""で囲む
In [78]:
print(a)
Hello !

嬉しいことに,日本語もOK.

In [79]:
japanese = "こんにちは" # 日本語文字列の代入
In [80]:
print(japanese)
こんにちは

" "で囲むと数値(データ)も文字列(データ)扱いされる.

In [81]:
a = "19"
In [82]:
print(type(a))
<class 'str'>

+ を用いて文字列同士を連結することもできます

In [83]:
eng, japan = "Hello", "こんにちは" # engとjapにそれぞれ"Hello", "こんにちは"を代入
In [84]:
print(eng)
Hello
In [85]:
print(japan)
こんにちは
In [86]:
print(eng + japan) #文字列を"+"すると連結される
Helloこんにちは

ちなみに数値と文字列を+演算することはできません

In [87]:
eng = "Hello" # engは文字列型
In [88]:
nenrei = 19 # nenreiは整数型
In [89]:
print(eng + nenrei) # 文字列型と数値型を"+"演算することはできない
---------------------------------------------------------------------------
TypeError                                 Traceback (most recent call last)
<ipython-input-89-11d787a29f06> in <module>()
----> 1 print(eng + nenrei) # 文字列型と数値型を"+"演算することはできない

TypeError: Can't convert 'int' object to str implicitly

問題 

それでは,数値でも「整数型(int)」と「浮動小数点型(float)」は四則演算できるでしょうか?そして,計算結果のデータ型はどうなっているでしょうか、自分で自由に計算して確認してください.

文字列型を数値型にまたは数値型を文字列型に型変換することができる.

In [90]:
a = "19"
print(type(a))
<class 'str'>
In [91]:
b = int(a) # int( )を用いてaの型を文字列型から整数型へ変更した.
print(type(b))
<class 'int'>
In [92]:
a = str(b) # str( )を用いてbの型を整数型から文字列型へ変更した.
print(type(a))
<class 'str'>

2.3 変数とデータ型のまとめ

データ型の違いにより演算などの取り扱いが変わることなども実感したと思います.データ型は実はたくさんある(…というか,自分で作ることもできる)のですが,プログラムの中でよく利用されるデータ型は初めから用意されており「組み込み型」と呼びます.整数型や文字列型も「組み込み型」の一つです.pythonの組み込み型として,よく使うものは下記のとおりです.

説明
数値 int 整数型.整数を表現するために利用するデータ型です. -10、10
float 浮動小数点型.小数を含めた実数を表現するために利用するデータ型です。 -0.1234、10.0
文字列 str 文字列型.文字を順番に並べたテキストデータです。 "abc"、'abc'、"10"
リスト list リスト型.数値や文字列など、複数の要素を順番に並べて利用するためのデータ型です。要素をあとから追加したり、削除することができます。 [1,2,3]、["Tokyo","有明",3,"丁目",12,"番地"]
タプル tuple タプル型.リストと同様に、複数の要素を順番に並べて利用するためのデータ型ですが、一度定義したら、追加や削除できない点が異なります。 (1,2,3)、("Tokyo","有明",3,"丁目",12,"番地")
ディクショナリ dictionary 辞書型.リストの様に、複数の要素を入れることができるデータ型ですが、要素を順番ではなく、キーと呼ばれる索引を使ってデータを取り出します。 {'鈴木':'090-1093-xxxx','山本':'080-6553-xxxx'}

「リスト型」,「タプル型」,「ディクショナリ型」についてはもう少し学んでから説明します.

レポート課題2

今日学んだ,「演算」「変数(整数型・文字列型)」を用いて,簡単なプログラムを作成してきなさい. プログラムをノートブックに書き「it02_学籍番号.ipynb」としてメールで提出しなさい.(他の人と異なるプログラムを評価します) 〆切:10/9(月)

例 ・あるものを買ったときに,消費税を計算するプログラム ・体重と身長からBMIを測定するプログラム ・様々な幾何図形の面積などを計量するプログラム ・為替テートを計算するプログラム などなど・・・