Python入門

コンピュータは「0」、「1」の機械言語を使って動いています。人がコンピュータに会話するために、人間と機械両方が分かる「プログラミング言語」が必要です。

コンピュータが発明されてから、多くの言語が作られています。Python言語のほかに、有名なものでは、Fortran言語、C言語、Java言語、Javascript言語などがあります。

本日は以下のPython言語の基礎概念を解説します。

  • 変数(変数の役割、変数の使用方法)
  • 制御構文(for文)

(教科書「Python超入門」のChapter 1,3に参照してください。)

補足

CESに限らず、Windows, MacOS, Linuxの中で、Pythonコードを実行することも可能です。教科書の4-5ページを参考しなさい。34-39ページにもコードの実行方法の説明があります。

1. Python言語の変数

プログラミングの変数は、プログラムで利用するデータを一時に保存する入れ物のようなものです。

「x=5」のようなプログラムでは、「=」の右辺の値5を左辺の変数「x」に代入します。 「=」は「代入演算子」と呼ばれています。

以下の例では、変数x,y に他の値を代入してみましょう。変数の値を確認するために、「print()」という関数を使って値を出力して確認することができます。

In [8]:
# 例 ( x,y に他の値を代入してみましょう。)
x=51
print(x)

y=x+100
print(y)

x=1000
print(x)
51
151
1000

1.1 変数の役割

コンピュータのプログラミングでは、機械的な考え方が必要です。「値を必ず何の変数に格納すること」を意識してください。

例:変数の値の入れ替え

以下、二つの変数の値の入れ替えの例によって、変数の役割を体験してみます。

下記のコードでは、変数x,yはそれぞれ値を持っています。二つの変数の値を入れ替えることを行います。

In [13]:
x=100
y=200

以下の失敗の例を実行してみて、値の入れ替えが正しく出来ていない理由を考えてください。

In [14]:
x=100
y=200

#失敗の例1
x=y
y=x
print(x,y)
200 200
In [74]:
x=100
y=200

#失敗の例 2
y=x
x=y
print(x,y)
100 100

変数の値がなくならないように、第3変数を用意することが必要です。以下は値の入れ替えの成功の例です。

In [17]:
x=100
y=200

#成功の例
z=x # xの値を一時にz変数に格納します。
x=y
y=z # zが保持している元々のxの値をyに代入します。
print(x,y)
200 100

補足

a) 変数に関わる用語
変数に関する処理には一般的に「プログラミング用語」が使用されます。以下の用語を覚えてほしいです。 - 変数を作成して、(初めて)値を代入することを**初期化**と言います。 - 変数を作成すること -> 変数を「**宣言**」する。変数を「**定義**」する。 - 値を変数に入れること ->変数に値を「**代入する**」。変数が値を「**格納する**」「**保持する**」
b) 変数名のルール
変数名の名前付けでは、以下のルールがあります。 - 大文字・小文字のアルファベットと数字、"_"(アンダーバー)の組み合わせ - 数字から始まらないこと - Python言語の文法ですでに使用している単語(「予約語」)でないこと。例えば、「if」。

演習1

変数a,b,c,dはそれぞれ値を持っています。変数の値を以下のように入れ替えてください。

$$ \left(\begin{array}{c} a \rightarrow b \\ b \rightarrow c\\ c \rightarrow d\\ d \rightarrow a\end{array} \right) $$ 例えば、最初に$a=1,b=2,c=3,d=4$の場合、入れ替え後、$b=1,c=2,d=3,a=4$となります。

In [75]:
# 演習の答えをここに書いてください。
a=1; b=2; c=3; d=4

1.2 変数の「型」

Python言語では、数字を扱えることができます。数字でも「整数(int)」、「浮動点小数(float)」の区別があります。

数字以外に、文字列(str)、リスト(list)などの変数の型があります。「type()」を使って、変数のタイプを調べることができます。

In [18]:
a=100
type(a)
Out[18]:
int
In [19]:
b=10.1
type(b)
Out[19]:
float
In [20]:
c="計算機演習"
type(c)
Out[20]:
str
In [30]:
d=[1,2,3]
type(d)
Out[30]:
list

変数自身のタイプによって、同じ演算子でも変数に関わる演算は変わります。

以下の二つの例では、「+」という演算子は異なる意味を持っています。 最初の例では、「+」は「足し算」を意味しています。2番目の例では、「+」は「文字列の結合」を意味しています。

In [76]:
a=100
b=10.01
print(a+b)
110.01
In [77]:
c1 = "計算機演習"
c2 = "A"
print(c1+c2)
計算機演習A

キャストを使った型の変換

文字列と数値を結合する場合、同じ型にしないとはいけないです。以下コードでは、course_name と score は異なるタイプであるので、実行するとエラーとなります。

In [ ]:
course_name = "計算機演習の成績="
score = 100
course_name + score

「str()」という関数を使って、scoreを文字列に変換すれば、問題が解消します。

In [35]:
course_name + str(score)
Out[35]:
'計算機演習の成績=100'

代わりに、"100"のような文字列を数字に変換することも可能です。

In [78]:
score = int("100")
print(type(score), score)
score = float("90.5")
print(type(score), score)
<class 'int'> 100
<class 'float'> 90.5

補足

以下の例では、a,bはそれぞれ整数ですが、割り算のとき、a,bを一度小数(float)に変換して、値を計算しています。

In [79]:
a = 1
b = 2
x = a/b
print(type(x), x)
<class 'float'> 0.5

1.3 リストの使用

リスト(list)はデータの並びを扱うための型です。以下の例では、リストの初期化ができます。

In [82]:
name_list = ["taro", "jiro","saburo"]
age_list = [12,7,4]

リストに値を追加するために、appendという関数を使います。

In [83]:
name_list.append("shirou")
age_list.append(3)
print(name_list)
print(age_list)
['taro', 'jiro', 'saburo', 'shirou']
[12, 7, 4, 3]

リストの各要素をインデックス番号によってアクセスできます。特に、リスト内の要素は0から数え始めます。

In [84]:
print(name_list[0])
print(name_list[1])
print(name_list[2])
taro
jiro
saburo

リストの各要素を順番にアクセスするために、for文のルールが使用されています。

In [85]:
for name in name_list:
    print(name)
taro
jiro
saburo
shirou
In [86]:
for age in age_list:
    print(age)
12
7
4
3

rangeの使用

連続の数字の並びを作成するために、range関数は便利です。

In [67]:
numbers = range(4)
for x in numbers:
    print(x)
0
1
2
3

rangeの使用例

以下のコードの表示結果を確認してください。

In [70]:
# 名前を順番に出力します。
for index in range(4):
    print(name_list[index])
taro
jiro
saburo
shirou
In [71]:
# 年齢を順番に出力します。
for index in range(4):
    print(age_list[index])
12
7
4
3
In [73]:
for index in range(4):
    print("The age of " + name_list[index] + " is " + str(age_list[index]) + ".")
The age of taro is 12.
The age of jiro is 7.
The age of saburo is 4.
The age of shirou is 3.

演習 2

forループによって、以下のような結果を出力してください。

The age of taro is 12.
The age of jiro is 7.
The age of saburo is 4.
The age of shirou is 3.
In [88]:
# ここに回答を書いてください。

演習3

range()を使って、以下のような数列のリストを作成してください。

[1, 4, 9, 16, 25, 36, 49, 64, 81, 100]
In [89]:
# ここに回答を書いてください。

レポートの提出について

本授業の演習1、2、3を解いて、新しいNotebookで演習の内容と回答を書いて、提出してください。