英語の YouTube を見ると、日本人がやってるのとレベルが全然違う:
結論: 英語ができれば、良質な教材がタダで手に入る。
print関数と input関数を使った表示と入力。
if文) と繰り返し (while文)。
if 条件式:
条件式が真であるときに実行される文
else:
条件式が真でないときに実行される文
else: 以降は省略できる。
if 条件式:
条件式が真であるときに実行される文
x が 3 のとき、x > 2 は成り立つか?
y が 0 のとき、y < 0 は成り立つか?
z が 1 のとき、1 != z は成り立つか?
t が 7 のとき、3 > 7 は成り立つか?
Python による繰り返し (while文) の構文を思い出そう:
i = 0
while i < 10:
print(f"i={i}")
i = i + 1
print("end")
loop.py で、
最後に表示される i の値はいくつか。
if文を挿入し、
if i == 5:
print("five!")
"i=5" を表示した直後に "five!" を表示したい:
i=0 i=1 i=2 i=3 i=4 i=5 five! i=6 i=7 ...上の
if文を挿入すべき箇所はプログラム中のどこか。
「1を足す」「1を引く」だけの計算を使って、整数の和 a + b を計算する:
a = int(input("a:"))
b = int(input("b:"))
while 0 < b:
a = a + 1
b = b - 1
print(f"answer={a}")
0 < b の部分には、
別の条件式を入れてもよい。
そのような条件式の例をひとつ挙げよ。
前回の演習 2-11. 問題 b を考えてみる:
mult.py を短くしようとして
「b = p」の部分を削るとうまく動かなくなる。
なぜか考えよ。
p = int(input("p:"))
q = int(input("q:"))
a = 0
while 0 < q:
b = p
while 0 < b:
a = a + 1
b = b - 1
q = q - 1
print(f"answer={a}")
上のプログラムを見て「わざわざ変数 b なんか使う必要ないジャン」と考えて
削ったものが、以下のバージョンである:
p = int(input("p:"))
q = int(input("q:"))
a = 0
while 0 < q:
while 0 < p:
a = a + 1
p = p - 1
q = q - 1
print(f"answer={a}")
これはうまく動かないのだが「なぜ動かないのか?」を頭だけで 考えると難しいので、実際にプログラム中に測定器を入れて 動作を観察するという方法がある。
測定器とは何か? print関数である:
p = int(input("p:"))
q = int(input("q:"))
a = 0
while 0 < q:
print(f"p={p}, q={q}")
b = p
while 0 < b:
a = a + 1
b = b - 1
q = q - 1
print(f"answer={a}")
上の例では、1つめの while文の中に
p と q の値をそれぞれ表示する
print関数を入れている。
このプログラムを実行すると、次のように表示される:
p:2 q:3 p=2, q=3 p=2, q=2 p=2, q=1 answer=6
同様に、動かないバージョンにも測定器を入れてみる:
p = int(input("p:"))
q = int(input("q:"))
a = 0
while 0 < q:
print(f"p={p}, q={q}")
while 0 < p:
a = a + 1
p = p - 1
q = q - 1
print(f"answer={a}")
結果はこのようになる:
p:2 q:3 p=2, q=3 p=0, q=2 p=0, q=1 answer=6
つまり、なぜ b = p を削ってはダメだったのか?
print関数を挿入すると、
ものすごい役に立つ。
今後は動作がよくわからないプログラムに対しては、
積極的に print を入れて動きを探ってみよう。
10進数における 0〜15 までの数を 2進数の 0000〜1111 で 表した結果は以下のようであった:
| 10進数 | 2進数 | 10進数 | 2進数 | 10進数 | 2進数 | 10進数 | 2進数 |
|---|---|---|---|---|---|---|---|
| 0 | |
4 | |
8 | |
12 | |
| 1 | |
5 | |
9 | |
13 | |
| 2 | |
6 | |
10 | |
14 | |
| 3 | |
7 | |
11 | |
15 | |
Python では、もちろん +1, -1 だけではなく、実際の四則演算が可能である。
+, -, *, / などの記号を
演算子 (operator) という。
a + b | a と b を足した値 |
a - b | a から b を引いた値 |
a * b | a と b を掛けた値 |
a // b | a を b で割った値 (商) |
a % b | a を b で割った値 (余り) |
a / b | a を b で割った値 (実数) |
a ** b | べき乗 ab |
c = a + b
det = a*d - b*c det = a d - b c (演算子は省略できない) det = ad - bc (変数 ad から変数 bc の値を引くことになる)
s = n*(n+1)/2
s = n(n+1)/2 (演算子は省略できない)
print(f"result={a+b}")
以下のプログラムを実行し、 a と b にいろいろな値を入力せよ。 b = 0 とすると何が起こるか?
a = int(input("a:"))
b = int(input("b:"))
print(f"a+b = {a+b}")
print(f"a-b = {a-b}")
print(f"a*b = {a*b}")
print(f"a//b = {a//b}")
print(f"a%b = {a%b}")
print(f"a/b = {a/b}")
a = int(input("a:"))
b = int(input("b:"))
avg = (a+b)/2
print(f"average = {avg}")
total = 0 とする。
x に値を入力する。
total に加える。
x = 0 が入力されるまで繰り返す。
total = 0
x = 1
while x != 0:
x = int(input("x:"))
total = total + x
print(f"total = {total}")
2つの数の最大公約数を発見する以下のプログラム gcd.py を完成させよ:
a と b の 2つの値を入力する。
a を b で割った余り a % b を計算する。
b の値とし、2. に戻る。
b の値を表示する。
まず、簡単な例 (a=12, b=3 など) を手作業でやってみて、 同じことをするプログラムを書け:
a = int(input("a:"))
b = int(input("b:"))
c = a % b
while c != 0:
a = ???
b = ???
c = a % b
print(f"gcd = {b}")
Visual Studio Code (以下 VS Code) は高機能なテキストエディタで、 Python のプログラムを書いたり実行したりするのに使える。
まず https://code.visualstudio.com/ に アクセスし、VS Code をダウンロードする。
インストールするには、以下の方法に従う:

インストールが終わったら、左下の歯車アイコンをクリックして 「Extensions (拡張機能)」を選ぶ。

ここでさらに「Python」を選択し、インストールする。

VS Code が正しくインストールされると、 コマンド プロンプト上で以下のようにして VS Code を メモ帳のかわりに使える:
C:\Users\euske\Desktop\cs1> notepad hello.py (使用前) C:\Users\euske\Desktop\cs1> code hello.py (使用後)
さらに VS Code (+ Python 機能拡張) では、 編集中のプログラムを同じウィンドウ上でそのまま実行できる。 右上の「再生」ボタンをクリックすればよい。

今回は、数値だけを使ってアニメーションを表示してみる。
import time # 変数を定義する。 img0 = 11111111111111111111 img1 = 11111100111100111111 img2 = 11111100111100111111 img3 = 11111111111111111111 img4 = 11001111111111110011 img5 = 11100111111111100111 img6 = 11110011111111001111 img7 = 11111100000000111111 img8 = 11111111111111111111 img9 = 11111111111111111111 # 20回繰り返す。 t = 0 while t < 20: print(img0) print(img1) print(img2) print(img3) print(img4) print(img5) print(img6) print(img7) print(img8) print(img9) print() time.sleep(0.1) # すこし待つ。 t = t + 1
ここでは表示の間に「0.1秒だけ待つ」という機能を使っている:
import time はプログラムの最初に 1回だけ必要。
import time ... time.sleep(秒数)
time.sleep(60) time.sleep(1.25)
これだけでは同じ絵が繰り返し表示されるだけなので、 すこし変更を加える:
import time # 変数を定義する。 img0 = 11111111111111111111 img1 = 11111100111100111111 img2 = 11111100111100111111 img3 = 11111111111111111111 img4 = 11001111111111110011 img5 = 11100111111111100111 img6 = 11110011111111001111 img7 = 11111100000000111111 img8 = 11111111111111111111 img9 = 11111111111111111111 # 20回繰り返す。 t = 0 while t < 20: print(img0) print(img1) print(img2) print(img3) print(img4) print(img5) print(img6) print(img7) print(img8) print(img9) print()# 1桁減らす。 img0 = img0 // 10 img1 = img1 // 10 img2 = img2 // 10 img3 = img3 // 10 img4 = img4 // 10 img5 = img5 // 10 img6 = img6 // 10 img7 = img7 // 10 img8 = img8 // 10 img9 = img9 // 10time.sleep(0.1) # すこし待つ。 t = t + 1
上のプログラム anim.py を入力し、実行せよ。
img0 = img0 // 10などの部分を
img0 = (img0 // 10) + 10000000000000000000に変更し、動きがどう変化するか観察せよ。
time.sleep(0.1) の部分を
コメントアウトすると、なにが起こるか観察せよ。
コンピュータプログラムのほとんどの部分は、
実はコンピュータに対してではなく、
おもに人間に向けて書かれている。
そのため、たいていのプログラミング言語では動作を説明するための注釈、
あるいは コメント (comment)を入れることができる。
Python では「#」記号がコメントを表す。
コメント (注釈文) とは、プログラムのわかりにくい部分を説明するための
日本語の文である。コメント部分は、なにも実行されない。
# コメント
「#」から行末までがコメントとみなされる。
# 挨拶する。
print("hello")
print("hello") # 挨拶する。
#print("hello")
文の先頭をコメントにすると、何も実行されない。
このような実行されない部分を「コメントアウトされた部分」などと呼ぶ。
gcd.py」を
T2SCHOLA から提出せよ。
print文、if文、while文、
および四則演算の機能を使ってよい。
input関数は使わない)。