避難訓練はなぜ重要か?
先々週の「中課題1.」と呼んでいた課題は、 じつは配点5点の「小課題」でした。 混乱するので名前は変えないことにします。 本日の課題は本当の「中課題 (20点)」です。
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
の部分には、
0 < b
のかわり別の条件式を入れてもよい。
そのような条件式の例をひとつ挙げよ。
さらに上の結果を使って、今度は掛け算を実現することを考える。 以下のプログラムは与えられた整数 p と q に対して p × q を計算する。
p = int(input("p=")) q = int(input("q=")) a = 0 while 0 < q:(変数 a に p の値を足す)q = q - 1 print(f"answer={a}")
ここで (変数 a に p の値を足す) の部分に 上の add.py の処理を埋め込むと、以下のようになる:
p = int(input("p=")) q = int(input("q=")) a = 0 while 0 < q: b = pwhile 0 < b: a = a + 1 b = b - 1q = q - 1 print(f"answer={a}")
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}")
今回は、数値だけを使ってアニメーションを表示してみる。
import time # 変数を定義する。 img0 = 1000000000000000000000000000 img1 = 1000000000110000110000000000 img2 = 1000000000110000110000000000 img3 = 1000000000000000000000000000 img4 = 1000001100000000000011000000 img5 = 1000000110000000000110000000 img6 = 1000000011000000001100000000 img7 = 1000000000111111110000000000 img8 = 1000000000000000000000000000 img9 = 1000000000000000000000000000 # 30回繰り返す。 t = 0 while t < 30: 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 = 1000000000000000000000000000 img1 = 1000000000110000110000000000 img2 = 1000000000110000110000000000 img3 = 1000000000000000000000000000 img4 = 1000001100000000000011000000 img5 = 1000000110000000000110000000 img6 = 1000000011000000001100000000 img7 = 1000000000111111110000000000 img8 = 1000000000000000000000000000 img9 = 1000000000000000000000000000 # 30回繰り返す。 t = 0 while t < 30: 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
実はプログラムの多くの部分はコンピュータに対してではなく、
おもに人間に向けて書かれている。
そのため、たいていのプログラミング言語では動作を説明するための注釈、
あるいは コメント (comment)を入れることができる。
Python では「#
」記号がコメントを表す。
コメント (注釈文) とは、プログラムのわかりにくい部分を説明するための
日本語の文である。コメント部分は、なにも実行されない。
# コメント
「#
」から行末までがコメントとみなされる。
# 挨拶する。
print("hello")
print("hello") # 挨拶する。
#print("hello")
文の先頭をコメントにすると、何も実行されない。
このような実行されない部分を「コメントアウトされた部分」などと呼ぶ。
上のプログラム anim.py
を入力し、実行せよ。
プログラムを変更し、違った動きをするように改造せよ。
time.sleep(0.1)
の部分を
コメントアウトすると、なにが起こるか?
print
文、if
文、while
文、
四則演算の機能を使ってよい。
input
関数は使わない)。