制御構造2
Back to index page
複数の条件が同時に成立しないといけないような場合には論理演算子を使用することがあります.複数の条件が同時に成立する場合に必要な演算子としては論理積(and)があり,複数の条件のどれか一つが成立すればよいのであれば論理和(or)を使用します.
| 条件A | 条件B | A and B | A or B |
|---|---|---|---|
| 真 | 真 | 真 | 真 |
| 真 | 偽 | 偽 | 真 |
| 偽 | 真 | 偽 | 真 |
| 偽 | 偽 | 偽 | 偽 |
if 文の中に if 文を入れることも可能です.うるう年を判定するプログラムを考えてみましょう.うるう年とは基本は西暦年が4で割り切れるときですが,100では割り切れない年です.ただし,400で割り切れる年はうるう年ということになっています.
from random import randint
year = randint(2000, 2200)
# year = 2000
# year = 2100
print(f'Year {year} is ', end = '')
if year % 4 == 0:
if year % 400 == 0:
print('a leap year.')
elif year % 100 == 0:
print('not a leap year.')
else:
print('a leap year.')
else:
print('not a leap year.')
|
上のプログラムは論理演算子を使用すると少しだけ短く書けます.
from random import randint
year = randint(2000, 2200)
# year = 2000
# year = 2100
print(f'Year {year} is ', end = '')
if year % 4 == 0:
if year % 100 == 0 and year % 400 != 0:
print('not a leap year.')
else:
print('a leap year.')
else:
print('not a leap year.')
|
演習問題
特定の処理を繰り返し実行する反復処理には for 文と while 文があります.どちらも同じように使用できますが,反復回数が決まっている単純な繰り返しの場合には for 文が,回数が決まっていないような処理には while 文が適しています.
処理を繰り返すその流れが周回することから,ループとも呼ばれます.
for ループと while ループ
while 文の書き方は基本的には以下のようになります.
while 式:
文
|
式が真のときに文を実行します.ループにするためには,なんらかの変数の値が変わっていくような条件にしていきます.例えば,素因数分解だと以下のような例になります.
from random import randint
num = randint(100, 999)
print(f'Decomposition of {num} into prime numbers: ', end = '')
i = 2
while num > 0:
if num % i == 0:
print(i, end = ' ')
num //= i
else:
i += 1
else:
print()
|
3桁の正の整数を乱数により1つ発生させ,その素因数分解を行います.実行すると,例えば以下のようになります.
Decomposition of 144 into prime numbers: 2 2 2 2 3 3 |

演習
A number with 5 digits: 81243 Each digit of places: 8 1 2 4 3 |
考え方
基準となる数 base = 10000 を定義する num を base で割ると万の位を取り出せる 例えば 54321 // 10000 --> 5 num を base で割った余りが次の千の位の準備になる 54321 %= 10000 --> 4321 base を10で割った値に更新しておく 10000 //= 10 --> 1000 それを base が 0 になるまで続ける |