STEP: 1 単純な条件分岐
単純な条件分岐
S = input()
if S == 'paiza':
print('YES')
else:
print('NO')
比較式 がまだはっきりわからないという方は「1章 数式と比較式と代入文」で先に確認しておいてください。
〜 else文がまだよくわからないという方は「1章 条件分岐・条件文・条件式・インデント」で先に学んでおいてください。
そうしないとこの先、苦行でしかありません。😅
S = input()
if S == 'paiza':
print('YES')
else:
print('NO')
比較式 がまだはっきりわからないという方は「1章 数式と比較式と代入文」で先に確認しておいてください。
〜 else文がまだよくわからないという方は「1章 条件分岐・条件文・条件式・インデント」で先に学んでおいてください。
そうしないとこの先、苦行でしかありません。😅
N = int(input())
if N <= 100:
print('YES')
else:
print('NO')
「以下」の比較式は <= です。
A, B, C = map(int,input().split())
if A * B <= C:
print('YES')
else:
print('NO')
先に A * B
が計算され、その結果が C
と比較されます。
N = int(input())
if N != 0:
print('YES')
else:
print('NO')
「以外」「○○ではない」は、!= と書きます。
例1
N = int(input())
for _ in range(N):
A = int(input())
if A == 0:
print('NO')
break
else:
print('YES')
例2
N = int(input())
A = list(map(int, input().split()))
if 0 in A:
print('NO')
else:
print('YES')
数列の先頭から 0 を探していき、0 を見つけたら NO
、0 が見つからなかったら YES
を画面に出力して終了します。
特定の値を先頭から探すのを簡単に書けるようにしたものが in です。(例2)
使用頻度極大なので早いうちにマスターしておきましょう。
in については「2章 リスト型データを使いこなす機能一覧」で学習できます。
A, B = map(int, input().split())
if A >= 10 and B >= 10:
print('YES')
else:
print('NO')
and は「○○ 且つ △△」という言い方がされ、and で繋いだ全ての条件式が True の時、最終的に True となります。
A = 12
B = 10 で、A >= 10
( A が 10 以上) 且つ B >= 10
( B が 10 以上) の時、(どちらも 10 以上の時)
if True:
となります。
C = input()
if C.isupper():
print('YES')
else:
print('NO')
条件式に限らず、関数やメソッドの戻り値でも評価にかけられます。
.isupper()メソッドは、文字列の文字が大文字かどうかを調べて、大文字の時は True を返します。反対に.islower()メソッドで小文字判定ができます。
A, B = map(int, input().split())
if A >= 10 or B >= 10:
print('YES')
else:
print('NO')
or で繋いだ条件式のどれか1つでも True であれば、最終的に True になります。
X = int(input())
if not (X >= 10):
print('YES')
else:
print('NO')
not は「True を False に」、「False を True に」変換します。not よりも比較式のほうが優先されますので ( ) は不要なのですが、わかりやすくするために付けています。
A, B = map(int, input().split())
if A >= 10 and not (B >= 10):
print('YES')
else:
print('NO')
and と not を併せて使う場合はこう書きますという例のような問題です。順不同なので前後逆にしても正しく動作します。
X, Y, Z = map(int, input().split())
if (X >= 10 and Y >= 10) or Z >= 10:
print('YES')
else:
print('NO')
『「Zが 10 以上の」場合はXとYの値にかかわらず』と問題文にありますので、Z は滑り止めみたいな感じでしょう。
or の前後の式を逆にしても正しく動作します。
ちなみに見やすくするために ( ) を付けていますけど、( ) を付ける範囲を間違えると異なる結果となる恐れがありますので十分注意してください。
N = int(input())
if N % 3 == 0:
print('YES')
else:
print('NO')
3 の倍数というのは、3 で割り切れる数のことです。
N = int(input())
if N % 3 == 0 and N % 5 == 0:
print('YES')
else:
print('NO')
3 で割り切れる数 N % 3 == 0 と 5 で割り切れる数 N % 5 == 0 を and で繋ぎます。
また、N % 3 == 0 and N % 5 == 0
は N % 15 == 0 (15の倍数)と同等でもあります。
例1
_ = int(input())
A = list(map(int, input().split()))
even = 0
odd = 0
for i in A:
if i % 2 == 0:
even += 1
else:
odd += 1
print(even, odd)
例2
_ = int(input())
A = list(map(int, input().split()))
even_odd = [0, 0]
for i in A:
even_odd[i%2] += 1
print(*even_odd)
例3
_ = int(input())
A = list(map(int, input().split()))
even_odd = [i%2 for i in A]
print(even_odd.count(0), even_odd.count(1))
数列A の中に偶数と奇数がそれぞれいくつあるかをカウントして出力するプログラムです。
例2と例3はもはや条件分岐していません。こんな書き方もできるよと、なんとなく書いただけです。辞書を使ってもいいですね。
N = int(input())
if N % 7 == 1:
print('Sun')
elif N % 7 == 2:
print('Mon')
elif N % 7 == 3:
print('Tue')
elif N % 7 == 4:
print('Wed')
elif N % 7 == 5:
print('Thu')
elif N % 7 == 6:
print('Fri')
else:
print('Sat')
また、文を使わない書き方もあります。
N = int(input())
S = ['Sat', 'Sun', 'Mon', 'Tue', 'Wed', 'Thu', 'Fri']
print(S[N%7])
解読してみてください。😽
例1
N = int(input())
if N % 3 == 0 and N % 5 == 0:
print('FizzBuzz')
elif N % 3 == 0:
print('Fizz')
elif N % 5 == 0:
print('Buzz')
else:
print(N)
例2
N = int(input())
fizz = (N % 3 == 0)
buzz = (N % 5 == 0)
if fizz and buzz:
print('FizzBuzz')
elif fizz:
print('Fizz')
elif buzz:
print('Buzz')
else:
print(N)
比較式に ( ) を付けているのは、読みやすくしているだけです。無くても正しく動作します。
例1
N = input()
print(len(N))
例2
N = int(input())
if N <= 9:
print(1)
elif N <= 99:
print(2)
else:
print(3)
ここは「条件分岐メニュー」ですので、今回は例2のやり方で書くほうがよいのですが、実際は例1のlen()関数を使ってください。
len()関数は「2章 文字列の操作を使いこなす機能一覧」で学習できます。
N, A, B = map(int, input().split())
if N+A+B and N-A+B and N+A-B and N-A-B:
print('NO')
else:
print('YES')
Python3 では 0 が False、0 以外が True となります。
全ての組み合わせで計算して、全ての計算結果に 0 が無ければ True('NO')、0 が1つでもあれば False('YES')を画面に出力します。
を使ったオーソドックスな書き方は paiza の解答コード例とその解説を参考にしてください。
N = int(input())
A = list(map(int, input().split()))
B = list(map(int, input().split()))
cnt = 0
for i in range(N):
if A[i] == B[i]:
cnt += 1
print(cnt)
要するに「A[i] と B[i] の値が同じものがいくつあるか」ということです。
A = [1, 2, 3, 4, 5]
B = [1, 20, 30, 4, 5] の時
A | B | 同じ? | cnt |
---|---|---|---|
1 | 1 | ○ | 1 |
2 | 20 | ✕ | 1 |
3 | 30 | ✕ | 1 |
4 | 4 | ○ | 2 |
5 | 5 | ○ | 3 |
例1
N = int(input())
A = list(map(int, input().split()))
sum_range = 0
for i in range(N):
if A[i] % 2 == 1:
break
sum_range += A[i]
print(sum_range)
例2
N = int(input())
A = list(map(int, input().split()))
for i in range(N):
if A[i] % 2 == 1:
print(sum(A[:i]))
break
例3
N = int(input())
A = list(map(int, input().split()))
i = 0
while A[i] % 2 == 0:
i += 1
print(sum(A[:i]))
まずは数列の先頭から「奇数を探し」て、数列の先頭からその奇数の1つ前までの数列の総和はいくつですか?ということです。終了判定は奇数の出現になります。
奇数の判定に使う条件式は A[i] % 2 == 1 を使います。ループの終了は break を使います。
例1は、偶数の値をその都度計算して、奇数が見つかったらループを抜けて総和の値を画面に出力しています。
例2は、奇数が見つかったらスライスとsum()関数を使って総和を求めています。
例3は、偶数の値はただひたすらループし、奇数を見つけたら例2と同じくスライスとsum()関数を使って総和を求めています。
n, K = map(int, input().split())
cnt = 0
while n < K:
n *= 2
cnt += 1
print(cnt)
K 以上になったら終了なので、K 未満の間はループし、その間カウントします。ループ回数が cnt
の値そのものとなり、それが結果となります。
見た目わかりにくいけど、これでも一応 の条件文の所で条件分岐してます。😅
N, K, T = map(int, input().split())
if K*T % N == 0:
print('YES')
else:
print('NO')
ここでスキルチェックの様な問題が出てきました。
T ターン歩いて最初の地点にいるかどうかは % N == 0 で判定できます。
T ターンでちょうど最初の地点に到達するためには、1ターンが N ÷ T = K メートルでなければいけません。
N ÷ T = K
↓
K ✕ T = N
N = 10
K = 2
の時、
ターン T | 1 | 2 | 3 | 4 | 5 | 6 | 7 | 8 | 9 | 10 |
K*T % N | 2 | 4 | 6 | 8 | 0 | 2 | 4 | 6 | 8 | 0 |
K ✕ 5ターン毎ならば、最初の地点にぴったりになることがわかります。
例1
N, K, T = map(int, input().split())
if N * K < T + 0.1:
print('YES')
else:
print('NO')
例2
N, K, T = map(int, input().split())
if N * K <= T:
print('YES')
else:
print('NO')
若干曖昧さを含む問題ですが、入力値が整数しか扱わないという条件ですので、単純に「 T 以下なら YES 」ということで良いと思います。(例2)
敢えて問題文に出てきた 0.1 という数を使うとしたら例1の様になると思います。
H, W = map(int, input().split())
if H % 2 == 0 and W % 2 == 0:
print('YES')
else:
print('NO')
この問題が自力で解けるようになったら、割った余りが 0 の判定はどんな時に使うものなのかがだいたいわかってきた頃かと思います。
高さ 2 のタイルが 高さ H にぴったり敷き詰められるかどうかは、H % 2 == 0 で判定できます。
同様に幅 2 のタイルが 幅 W にぴったり敷き詰められるかどうかは、W % 2 == 0 で判定できます。
A, B = map(int, input().split())
if A <= 0 <= B:
print(A * B)
else:
print(min(abs(A), abs(B)) ** 2)
まず、問題が何言ってるかネコにはわかりません。( ゚Д゚)y─┛~~
ネコ用に翻訳しながら解き方をまとめてみます。
例を挙げて説明すると、
① A = -3 , B = 5 の時、-3 ✕ 5 = -15 が最小値。(A * B)
② A = 3 , B = 5 の時、3 ✕ 3 = 9 が最小値。(A * A)
③ A = -5 , B = -3 の時、-3 ✕ -3 = 9 が最小値。(B * B)
①は if A <= 0 <= B:
の条件式。
elseの方の min(abs(A), abs(B)) ** 2
では何をしているのかというと、A と B どちらも正数または負数なら、掛け算したら正数になるわけだから(②と③)、掛け算する前に先に絶対値(負数の場合、マイナスを外して正数にする)にして、数の小さい方を2乗すればいいんじゃないかなと、当時この問題を解いてた時に無い知恵絞って捻り出したもの。
これがわかったら paiza の解答コード例のほうがわかりやすいかも・・・?(疑問形)
絶対値をとるabs()は、プログラミングではそれなりに使います。頭の片隅にでも置いておいてください。いずれ使う時が来ますから。