この資料中に説明なくページ番号が出てくる場合,教科書のページ番号を表しています.
pp.48,49を読んで理解したら,以下のセルを実行しなさい.このセルを選択した状態(左側に縦棒がついた状態)で,次のいずれか
5-5+1+9
以下のセルに,教科書で↑に続いて載っている式を一つずつ書いて実行しなさい.
↑にもうひとつセルを追加(「+」ボタン)して,p.49の累乗(べき乗)を使った式の例を書いて実行しなさい.
p.50を表も含めて読んで理解したら,以下にp.50下部の2つの式を計算するセル2つを挿入して実行しなさい.
以下にセルを作り,4649 を 18 で割った余りを求めなさい.
以下にセルを作り,2の64乗を求めなさい.
教科書ではここでは説明されていないが,除算演算子 /
は,C言語などと異なるふるまいをするので要注意.以下を実行して確認しよう.
# 例1 Python では # 以降の部分はコメントになる
5 / 3
3 / 5 # 例2
C言語の場合,演算対象の数がいずれも整数型(例えばint型)だった場合,その範囲で除算を行う = 小数点以下を切り捨てた整数値が得られた.したがって,上記の例1の結果は 1 に,例2の結果は 0 になった.
しかし Python の場合は上記のような結果が得られる.整数の範囲で除算をさせたい場合は //
という演算子を用いる.
5 // 3
3 // 5
Python がこのようなふるまいをするようになったのは実はバージョンが 3 になって以降である.Python3 が登場したのは比較的最近のことであり,以前のバージョンである Python2 もまだまだ現役で使われているので注意が必要である.
実は Python2 と 3 で互換性のないところは他にもある.興味のあるひとは教科書13章を読みましょう.
pp.51,52を読んで理解したら,以下のセルを実行しなさい.実行しても何も出力されない.
champernowne = 0.12345678910
champernowne_19 = 0.1234567891011121314
教科書では説明されていないが,次のようにprint
関数を用いることで,変数の値を出力させることができる.
print(champernowne)
上記のセルを修正して,もう一つの変数の方の値を出力させてみよう.
「champernowne って何やねん」ってひとは,Wikipediaの「チャンパーノウン定数」へ.
p.53を読んで理解したら,以下のセルを順次実行しなさい(importなんたら,NumPyがどうたら,という話は今はわからなくて構わない).
import numpy as np # 教科書と違い, NumPy という科学技術計算モジュールから π の値を得ている
pi = np.pi # np.pi が円周率 π を表す定数
print(pi)
diameter = 12756.274
pi*diameter
cal_per_1kg = 7200
cal_per_1minjog = 7.76
min_to_lose1kg = cal_per_1kg/cal_per_1minjog
hours_to_lose1kg = min_to_lose1kg/60
print(hours_to_lose1kg)
以下は,上記を応用して,脂肪を1グラム燃やすのに何分/何秒ジョギングすればよいか計算しようとしたものである. 要修正箇所を修正して,正しい結果を求めなさい.
cal_per_1g = cal_per_1kg # この行だけ修正が必要
min_to_lose1g = cal_per_1g/cal_per_1minjog
print(min_to_lose1g) # 分単位
print(min_to_lose1g*60) # 秒単位
Python の変数名のつけ方について,p.53-54 に説明がある.時間に余裕のあるひとはそこを読もう.
その最後に説明されている Python の予約語(特別な意味を持つものとして「予約」されてるので変数名に使えないもの)は,以下のセルを実行すれば確認できる.
import keyword
#keyword.kwlist # 行頭の#を削除して実行すれば,予約語を一覧できる
pp.55,56を読んで理解したら,次の2つのセルを実行しなさい.
spam = "spam"
spam
a_lylic = "でもね私のエネルギーは"
a_lylic
上記の文字列はダブルクォーテーション"
で囲んで定義されているが,教科書に説明されているように,Pythonの文字列はシングルクォーテーション'
で囲んで定義してもよい.ただし,ペアは両方同じ種類でないといけない.上記の文字列定義のどちらか一方をシングルクォーテーションを使うように書き直して実行してみなさい.
ちなみに,C言語では文字列を char
の配列として扱っていた.CとPythonでは文字列の扱い方が全く異なる.それに,C
の場合,シングルクォーテーションは1文字だけ,ダブルクォーテーションは文字列,と使い分けていた.
p.57を読んで理解したら,次のセルを実行しなさい.
a_lylic = a_lylic + "すでにインフィニティだよ。"
a_lylic
教科書ではこの部分には書かれていないが,文字列に対して*
演算子を使って自然数を掛けると,その数ぶん元の文字列を繰り返した文字列が得られる.
spam*3
100*a_lylic
この部分は教科書では「文字列を使う」の一部となっていますが,内容的には文字列以外の話を含んでいるので,この資料ではセクションを独立させて説明することにしました.
pp.58,59を読んで理解したら,次のセルを実行しなさい.
lylic2 = "ずっと笑顔ばかりを選んで"
lylic2 += "泣き顔見せるのを迷ってた"
lylic2
x = 60
x -= 1
x *= 100
x += 63
x
C言語等と違い,Python にはインクリメント演算子 ++
やデクリメント演算子 --
は存在しない.以下はエラーになる.
x++
値を1つ増やしたければ,+= 1
とする.
x += 1
x
pp.60,61を読んで理解したら,次のセルを実行しなさい.
day = 25
date = day + "日"
上記がエラーになる理由は,「変数day
が表す整数型の値」と「文字列"日"
」という,データ型が異なるもの同士を+
演算子によって加算しようとしたからである.この例の場合,変数day
が文字列を表すならばエラーにはならない.以下を実行してみよう.
day = "25"
date = day + "日"
date
C言語で変数を使う場合,int
, float
, double
, char
等の型をあらかじめ指定して宣言する必要があった.
int x
と宣言した変数x
に異なる型の値を代入しようとすると,エラーになるか,または無理やり変換される(x = 1.23
とした場合など).
しかし,Pythonの場合,変数を使う際に「この変数は○○型」とあらかじめ決めておく必要はない.上記の変数day
の使用例から分かるように,25
を代入することではじめは整数を表していた変数に,あとで"25"
という文字列を代入しても問題ない.変数day
は最初は整数型だったが,後から文字列型に変化した,ということになる.
(よだんだよん)プログラミング言語の世界では,C言語のように変数の型を宣言時に決めておく(後で変えられない)ものを静的型付け,Python のようにあらかじめ決めておかない(実行中に変えられる)ものを動的型付けという.詳しいことが知りたいひとはこちらへ:
上記は「Pythonにはデータ型の区別がない」ということを意味しているわけではないことに注意.Pythonにもデータ型の区別はある.これまでに,整数型,浮動小数点型,文字列型の3種類が登場している.
組み込み関数(Pythonに標準で用意されている関数)の int()
, float()
, str()
を使うことで,データ型を変換できる.pp.61,62を読んで理解したら,次のセルを結果がどうなるかよく考えながら実行しなさい.
int(46.49)
int("18"*3) # 文字列として *3 してから int に変換するから...
int("hoge")
float(1)
float("1.23e+1")
str(5959)
str(123/10)
次のようにすれば,day
は整数型のままで望みの結果が得られる.
day = 25
date = str(day) + "日"
date
ついでに簡単なグラフの描画も
pp.63-65を読んで理解したら,次のセルを実行しなさい.
tokyo_temps = [15.1, 15.4, 15.2, 15.4, 17.0, 16.9] # 1950, 1960, 1970, 1980, 1990, 2000年の東京都の平均気温
# 以下は,Notebook上でグラフを描くための準備.今は何やってるかわからなくてもよい
%matplotlib inline
import matplotlib.pyplot as plt
# リスト tokyo_temps の要素番号(0, 1, ...)を横軸に,要素の値を縦軸にグラフを描く.デフォルトは折れ線グラフ.
plt.plot(tokyo_temps)
pp.65-67を読んで理解したら,次のセルを実行しなさい.
tokyo_temps[0]
tokyo_temps[1]
tokyo_temps[5]
tokyo_temps[5] - tokyo_temps[0]
ここまでの話から,PythonのリストはC言語の配列に似てるように思えるかもしれません.しかし,実際には結構違うところがあります.どこが違うか考えながらこの先の学習を勧めてみましょう.
tokyo_temps[6] # このリストは要素数が 6 個だから,要素番号(インデックス)は 0 から 5 まで.だからこれは...
tokyo_temps[-1] # これはどうなる? C言語の配列だったらまともな動作はしないが...
tokyo_temps[-2]
tokyo_temps[-6]
tokyo_temps[-7]
pp.67-68を読んで理解したら,次のセルを実行しなさい.
e_tokyo_temps = [13.6, 13.5, 14.2, 14.8, 14.8] # 1900, 1910, 1920, 1930, 1940年の東京都の平均気温
tokyo_temps2 = e_tokyo_temps+tokyo_temps
tokyo_temps2
plt.plot(tokyo_temps2)
(よだんだよん) リストの話からはずれた余談.plt.plot() に2つのリストを指定すると,1つ目を横軸,2つ目を縦軸の値として使ってグラフを描いてくれる.2つのリストは要素数が一致してないといけない.
y = [1900, 1910, 1920, 1930, 1940, 1950, 1960, 1970, 1980, 1990, 2000]
plt.plot(y, tokyo_temps2)
TAさんに課題ex01Aのチェックを受ける際は,以下のセルを実行して「OK!」が出ているようにしてください.
# 以下のコードは,この notebook を(それなりに)ちゃんと実行したかどうか確認するためのものです.
# 中身の理解は不要です.
def check(key, n):
import os
import pickle
fn = '/roes/sample/takataka/aprog/cellnumbers.pickle'
if os.path.isfile(fn):
with open(fn, 'rb') as f:
data = pickle.load(f)
if key in data:
if n >= data[key]:
print('{0} n = {1} ... OK!'.format(key, n))
else:
print('どこかちゃんと実行できてない所があるようです')
else:
print('ごめんなさい,うまく確認できませんでした')
else:
print('この環境では確認できないようです')
check('01note', len(In))