4.1 制御構造¶
4.1.1 比較演算子¶
# ひとまず、以下のように3つ変数に値を代入してみてください。
x = 3
y = 12
z = 1
# xはyより大きいか等しい
# xはyより大きくも等しくもないので"False"と出力される。
x >= y
False
# xとyは等しくない
#"Trueと出力される。
x != y
True
その他、Pythonの比較演算子には以下のようなものがあります。いくつか試してみたください。
演算子 | 記述例 | 意味 |
---|---|---|
== | x == y | xがyに等しい |
!= | x != y | xがyと等しくない |
> | x > y | xがyより大きい |
>= | x >= y | xがyより大きいか等しい |
< | x < y | xがyより小さい |
<= | x <= y | xがyより小さいか等しい |
4.1.2 論理演算子¶
以下の論理演算子を用いて2つの条件に関して真偽を判定することができます。
演算子 | 記述 | 意味 |
---|---|---|
and | x and y | xとyの両方がTrueの場合True |
or | x or y | xとyのどちらかがTrueの場合True |
not | not x | xがTrueのときFalse、FalseのときTrue |
# 論理積: 両者が真であればTrue
x < y and x > z #True
True
# 論理和: どちらかが真であればTrue
x < y or x < z #True
True
# 否定: 式が偽であればTrue
not y < x #True
True
4.1.3 if文¶
# ひとまず、以下のように代入してみてください。
x = 1
y = 2
# 以下がPythonのif文です。
# ifの後ろに条件を書き、条件が終わったら:(コロン)
# そこでEnter
# 処理はタブで下げる(Jupyter notebookでは自動でタブが挿入されます)
if x < y:
print("Yes!")
# ifの後ろの条件がTrueであればその下の処理が実行され、
# そうでなければ処理は実行されません。
Yes!
# ifの後ろの条件がFalseの場合、elseの下の処理が実行される。
x = 5
y = 3
if x < y:
print("x is smaller than y.")
else:
print("x is not smaller than y.")
x is not smaller than y.
# if文の練習
# 入力された値の大小を判定する。
a = input("Input any number you like:")
b = input("Input any number you like:")
# input()で得られた入力は文字列なので数値に変換する
a = int(a)
b = int(b)
if a < b:
print (str(a) + " is smaller than "+ str(b))
elif a == b:
print (str(a) + " is equal to " + str(b))
else:
print (str(a) +" is larger than " + str(b))
Input any number you like:12 Input any number you like:33 12 is smaller than 33
4.1.4 forとifの組み合わせ¶
- forの処理の中にif文を書く。
L = [10,95,15,25,35,50,45,60,80,30]
# 50点以上は合格、50点未満は不合格
for i in L:
if i < 50:
print(i,"不合格")
else:
print(i,"合格")
10 不合格 95 合格 15 不合格 25 不合格 35 不合格 50 合格 45 不合格 60 合格 80 合格 30 不合格
4.1.5 多重ループ¶
- for文の中にfor文を書く。
L = [[10,44,27,32,56,72,34,90],[19,10,89,61,25,66]]
# 2つの組の平均点の計算
for i in L:
n = 0
for j in i:
n += j
print(n/len(i))
45.625 45.0
演習問題¶
問題1¶
以下の文字列は暗号です。xを取り除くことで暗号が解読できます。forとifを組み合わせて解読しなさい。
text = "xxexxnxxxxxxcxxxxxxxxxxxxxxxxxxxyxxxxxxxcxxxloxxxxxpxxxxxexxxdxxxxxxxxxixxxxxaxxxxxxxxxxxxxxx"
問題2¶
fizzbuzzです。ルールは以下です。
- 1から100までの数字で
- 3で割り切れる時には"Fizz!"と表示
- 5で割り切れる時には"Buzz!と表示
- 3でも5でも割り切れる時には"Fizz! Buzz!"と表示
- それ以外の数字はそのまま表示
for文を使って出力してみましょう。
問題3¶
2928円の品物を買う際に一万円札を出すとお釣りは7072円で、五千円札が1枚、千円札が2枚、50円だまが1枚、10円玉が2枚、1円玉が2枚必要です。任意の商品の代金を入力し、10000円で支払った場合に必要なお釣りの紙幣、硬貨の枚数を出力するコードを書きなさい。
練習問題¶
問題1¶
ある整数のそれぞれの桁の値を大きい順に並べ替えた整数とそれぞれの桁の値を小さい順に並べ替えた整数の差を求めることをカプレカ操作と言います。371のカプレカ操作は731 - 137 = 594です。0を含む場合に最小の整数を求めるときは0を最上位の桁の値とします(205 → 025 → 25)。また、カプレカ操作によって、元の値と等しくなる数をカプレカ数と言います。
3桁の整数にカプレカ数はいくつあるでしょうか。
問題2¶
自然数nの約数の総和を$\sigma(n)$と表すとき、$\sigma(n)$と$2n$が等しい自然数を完全数といいます。約数は自分自身も含まれるので、自分自身以外の約数を真の約数と言います。12の約数は1, 2, 3, 4, 6, 12ですが、12の真の約数は1,2,3,4,6,です。$\sigma(n) - n$が真の約数の総和です。
6の真の約数は、1, 2, 3なので、1 + 2 + 3 = 6で6は完全数です。同様に、28も完全数です。28の約数の総和は、1 + 2 + 4 + 7 + 14 = 28。
10000以下の完全数をすべて見つけましょう。