では先ほどの 練習問題Q1〜Q10 のそれぞれについて、目的 → 考え方(方針) → コード → 行ごとの詳しい説明 → 実行例(追加テスト) → 注意点・よくある間違い の順でステップごとに詳しく解説します。長めですが、初心者が「なぜこう書くのか」を理解できるよう丁寧に書きます。
- Q1:整数 x が正なら "positive"、そうでなければ "non-positive" と出力する
- Q2:year が 2000 年以降なら "21世紀"、そうでなければ "20世紀以前"
- Q3:n が偶数なら "even"、奇数なら "odd"
- Q4:文字列 s が空文字("")なら "empty"、それ以外なら "not empty"
- Q5:password と input_pw を比較して一致なら "OK"、違えば "NG"
- Q6:score が 90 以上なら "A"、70 以上なら "B"、それ以外は "C"
- Q7:リスト items に "apple" が含まれていれば "あり"、なければ "なし"
- Q8:年齢 age が 20 以上なら "大人"、それ以外なら "子ども"。三項演算子で書く
- Q9:data が None なら "無"、そうでなければ "有"
- Q10:x と y が等しいなら "same"、違えば "diff"
- 最後に — 総合的なデバッグ・学習のコツ
Q1:整数 x が正なら "positive"、そうでなければ "non-positive" と出力する
目的
x が 0 より大きければ「positive」、そうでなければ(0 または負)「non-positive」を出す。
方針
条件は x > 0。if で真のときの処理、else で偽のときの処理を書く。
コード
x = 3
if x > 0:
print("positive")
else:
print("non-positive")
Python行ごとの説明
x = 3— 変数xに値を代入。ここでは例として 3 を使う。if x > 0:—xが 0 より大きいかチェック。>は「より大きい」。print("positive")— 条件がTrue(x が正)なら実行される。else:—ifの条件がFalse(x ≤ 0)の場合にここ以下を実行する。print("non-positive")— 0 または負のときに出力。
実行例
x = 3→positivex = 0→non-positivex = -5→non-positive
注意点・よくある間違い
x >= 0とすると 0 を positive に含めてしまう。要件に合わせて比較演算子を選ぶ。if x > 0のあとにコロン(:)を忘れるとエラー。
Q2:year が 2000 年以降なら "21世紀"、そうでなければ "20世紀以前"
目的
年が 2000 以上なら「21世紀」と判定。
方針year >= 2000 を条件にする。
コード
year = 1995
if year >= 2000:
print("21世紀")
else:
print("20世紀以前")
Python行ごとの説明
year = 1995— テスト値。実際はユーザー入力でも可。if year >= 2000:—yearが 2000 以上かチェック。>=は「以上」。print("21世紀")— 真なら実行。else:— 偽なら実行。print("20世紀以前")— 偽のときの出力。
実行例
year = 2000→21世紀(境界を含む)year = 1999→20世紀以前
注意点
- 西暦の区切り(2000 年が 21 世紀かどうか)は問題によって定義が異なることがある(歴史的には21世紀は2001年から)。ここでは「2000年以降」という要件に従う。
- 型:
yearが文字列"2000"の場合は数値比較できない →int(year)に変換が必要。
Q3:n が偶数なら "even"、奇数なら "odd"
目的
整数の偶奇判定。
方針n % 2 == 0 を使う(余りが 0 なら偶数)。
コード
n = 12
if n % 2 == 0:
print("even")
else:
print("odd")
Python行ごとの説明
n = 12— テスト値。if n % 2 == 0:—%は剰余演算。n % 2が 0 なら偶数。print("even")— 偶数のとき。else:— 偶数でない(奇数)のとき。print("odd")— 奇数のとき。
実行例
n = 12→evenn = 7→oddn = 0→even(0 は偶数)
注意点
nが負でも%の性質上-3 % 2は 1 となり奇数判定は正しく動く(Python の剰余は負数でも直感的)。nが小数の場合はまず整数化するかエラー処理を考える。
Q4:文字列 s が空文字("")なら "empty"、それ以外なら "not empty"
目的
文字列が空かどうかの判定。
方針s == "" で空文字を判定するか、Python の真偽値評価を使って if s: の形にする。
コード(明示的な比較)
s = ""
if s == "":
print("empty")
else:
print("not empty")
Python別解(簡潔)
s = ""
if s:
print("not empty")
else:
print("empty")
Python※ if s: は s が空文字なら False と評価される。
行ごとの説明(明示版)
s = ""— 空文字。if s == "":— 空文字か比較。print("empty")— 空なら実行。else:— 空でない場合。print("not empty")— 実行。
実行例
s = ""→emptys = "a"→not empty
注意点
- 空白のみ(
" ")は空文字ではない。s.strip() == ""を使えば空白だけの文字列も空扱いできる。 if s:の方が Pythonic(慣用的)で簡潔。
Q5:password と input_pw を比較して一致なら "OK"、違えば "NG"
目的
パスワード一致チェックの基本。
方針
文字列比較 == を使う。実際のアプリではハッシュ比較やセキュリティ対策が必要だがここは学習用。
コード
password = "pass"
input_pw = "pass"
if input_pw == password:
print("OK")
else:
print("NG")
Python行ごとの説明
password = "pass"— 正しいパスワード(例)。input_pw = "pass"— ユーザーが入力した値(ここでは固定)。if input_pw == password:— 等しいか比較。print("OK")— 一致したら。else:— 不一致なら。print("NG")— 出力。
実行例
- 同じ文字列 →
OK - 大文字小文字が違う(例:
"Pass") →NG(比較は大文字小文字を区別する)
注意点
- 実践では平文で比較しない(ハッシュ化)。
- 余分な空白が入力されると失敗することがある →
input_pw.strip()を使うと余分な空白を取り除ける。
Q6:score が 90 以上なら "A"、70 以上なら "B"、それ以外は "C"
目的
複数の閾値に基づいてランクを返す。
方針
上から順に条件をチェックする:まず 90 以上か、それ以外で 70 以上か、最後に else。
コード
score = 72
if score >= 90:
print("A")
elif score >= 70:
print("B")
else:
print("C")
Python行ごとの説明
score = 72— テスト値。if score >= 90:— 最初の条件。90 以上なら A。print("A")— 実行。elif score >= 70:— 上の条件が偽だった場合に 70 以上かチェック。70–89 がこれに当たる。print("B")— 実行。else:— 上2つの条件がどちらも偽ならここ。print("C")— 実行。
実行例
score = 95→Ascore = 85→Bscore = 60→C
注意点
elifは上から順にしか評価されない。条件の順序は重要(小さい方から書くと間違える)。- 例:
if score >= 70:を先に書くと 90 以上も B に入ってしまう。
Q7:リスト items に "apple" が含まれていれば "あり"、なければ "なし"
目的
リスト中の要素の存在チェック。
方針in 演算子を使う:"apple" in items。
コード
items = ["banana", "apple", "orange"]
if "apple" in items:
print("あり")
else:
print("なし")
Python行ごとの説明
items = [...]— リストの定義。if "apple" in items:—inはメンバーシップ演算。存在すればTrue。print("あり")— 存在する場合。else:— 存在しない場合。print("なし")— 出力。
実行例
items = ["apple"]→ありitems = []→なし
注意点
- 大文字小文字を区別する(
"Apple"は別扱い)。必要なら小文字変換item.lower()を使う。 inは文字列にも使える:"a" in "apple"→True(部分文字列として判定される)。
Q8:年齢 age が 20 以上なら "大人"、それ以外なら "子ども"。三項演算子で書く
目的
簡潔に条件に応じた文字列を得る(式として代入可)。
方針
三項演算子 A if condition else B を使う。
コード
age = 25
print("大人" if age >= 20 else "子ども")
Python行ごとの説明
age = 25— テスト値。"大人" if age >= 20 else "子ども"—age >= 20が真なら"大人"、偽なら"子ども"を返す式。print(...)— その返り値を表示。
実行例
age = 20→大人age = 19→子ども
注意点
- 読みやすさを優先するなら複雑な条件は通常の
if/elseにする(可読性の問題)。 - 三項演算子は式なので変数に代入できる:
s = "大人" if age >= 20 else "子ども"。
Q9:data が None なら "無"、そうでなければ "有"
目的None 判定(値が存在しないことの判定)。
方針is None を使う。== None でも動くが is の方が推奨される。
コード
data = None
if data is None:
print("無")
else:
print("有")
Python行ごとの説明
data = None— 値なし。if data is None:—isはオブジェクト同一性の比較。Noneを直接比較するときに推奨。print("無")— None のとき。else:— None でないとき。print("有")— 出力。
実行例
data = None→無data = []→有(空リストは None ではない)
注意点
- 空リスト
[]や空文字""はNoneとは別物。if not data:で「空か None か」をまとめて判定することもできるが、意図を明確にするなら個別判定が良い。
Q10:x と y が等しいなら "same"、違えば "diff"
目的
2 つの変数の等価比較。型も含めた比較に注意。
方針== を使う。Python の == は値の等価性を比較する。型が違えば通常 False。
コード
x = 10
y = "10"
if x == y:
print("same")
else:
print("diff")
Python行ごとの説明
x = 10— 整数 10。y = "10"— 文字列 “10”。if x == y:— 値が等しいか比較。整数と文字列は等しくない →False。print("same")— (この例では実行されない)else:— 実行される。print("diff")— 出力。
実行例
x = 10, y = 10→samex = 10, y = "10"→diff
注意点
- 型変換:
int("10")を使って比較すると同じにできるが、ユーザー入力は安全に変換する(例外処理try/except)。 - 細かい一致(浮動小数点など)には注意(例:
0.1 + 0.2の誤差など)。
最後に — 総合的なデバッグ・学習のコツ
- 小さなケースで確かめる(境界値:0, 1, -1, 最大値など)。
print()で変数の中身や条件式の評価(例:print("cond:", x > 0)) を表示して確認。- エラーメッセージをよく読む(構文エラーならコロンやインデントのミスが多い)。
- 条件が複雑なら途中で変数に分けて読みやすくする(可読性重視)。例:
is_adult = age >= 20
has_id = id_card is not None
if is_adult and has_id:
...
Python