【初心者向け】Pythonのデバッグ問題
問題1:文字列の連結ミス
name = "Yusei"
age = 25
print("Name: " + name + ", Age: " + age)
エラーの原因は?
A. +演算子の使い方が間違っている
B. ageが整数型で文字列と連結できない
C. print関数の文法が間違っている
正解: B
解説: Pythonでは文字列と整数は直接+で連結できません。str(age)で文字列化する必要があります。
問題2:ループ中の変数スコープ
for i in range(3):
value = i * 2
print(value)
このコードの出力は?
A. エラーが出る
B. valueはループの外なので参照できない
C. valueは最後のループの値(4)になる
正解: C
解説: Pythonではforループのスコープは関数レベルではないため、valueはループ終了後も使用可能。
問題3:変数のスコープエラー
def calculate():
result = 10 + 20
print(result)
エラーの原因は?
A. resultがグローバル変数ではないため参照できない
B. printの文法ミス
C. resultが定義されていない関数内で使われている
正解: A
解説: resultはcalculate()関数内で定義されたローカル変数なので、関数外では参照できません。
問題4:型エラーによる比較
number = 10
text = "10"
if number == text:
print("Same")
このコードの出力は?
A. Sameと表示される
B. エラーが発生する
C. 何も表示されない
正解: C
解説: 整数10と文字列"10"はPythonでは異なる型なので比較結果はFalseとなり、何も出力されません。
問題5:インデントエラー
if True:
print("Hello")
エラーの原因は?
A. printの文法ミス
B. 条件式にエラーがある
C. インデントが正しくない
正解: C
解説: Pythonではコードブロックにインデントが必要です。printの前にスペースを入れる必要があります。
問題6:条件分岐の文法ミス
score = 85
if score >= 90:
print("Excellent")
elif score >= 70 and < 90:
print("Good")
else:
print("Average")
このコードの文法エラーはどこ?
A. elif行で不完全な条件式になっている
B. scoreの値が文字列になっている
C. ifとelseの順番が逆になっている
正解: A
解説: elif score >= 70 and < 90: は文法エラーです。正しくは elif 70 <= score < 90: のように記述します。
問題7:append()の戻り値の勘違い
my_list = [1, 2, 3]
new_list = my_list.append(4)
print(new_list)
出力は?
A. [1, 2, 3, 4]
B. [1, 2, 3]
C. None
正解: C
解説: list.append()は戻り値を返さない(Noneを返す)メソッドです。my_listは更新されますが、new_listにはNoneが入ります。
問題8:整数除算と割り切れない除算
a = 5
b = 2
result = a / b
print(result == 2)
このコードの出力は?
A. True
B. False
C. エラーになる
正解: B
解説: 5 / 2 は 2.5 を返します。Python3では / は浮動小数点除算です。整数除算したい場合は a // b を使います。
問題9:try-exceptの構文ミス
try:
print("Start")
x = 1 / 0
except:
print("Something went wrong")
エラーの原因は?
A. try文の中にエラーがない
B. exceptの行のインデントが間違っている
C. ZeroDivisionErrorをキャッチできていない
正解: B
解説: Pythonのtry-exceptブロックでは、exceptの中身もインデントする必要があります。
問題10:strip()の使い方の誤解
text = "###Hello###"
cleaned = text.strip("#")
print(cleaned)
出力は?
A. Hello
B. ###Hello###
C. Hello###
正解: A
解説: strip()は先頭と末尾にある指定文字を除去します。この場合、先頭と末尾の # をすべて除去し、Hello が残ります。
問題11:ループとbreakの挙動
for i in range(5):
if i == 3:
break
print(i)
else:
print("Loop finished")
出力は?
A. 0 1 2 3 Loop finished
B. 0 1 2
C. 0 1 2 Loop finished
正解: B
解説: for文のelseは、ループが途中でbreakされなかったときに実行されます。この場合、breakが実行されたため、elseブロックは実行されません。
問題12:リスト内包表記のスコープ
squares = [x**2 for x in range(5)]
print(x)
このコードの出力は?
A. 4
B. NameErrorになる
C. [0, 1, 4, 9, 16]
正解: B
解説: Python 3 ではリスト内包表記内の変数 x はローカルスコープであり、外からはアクセスできません(Python 2系では違う挙動)。
問題13:Noneとの比較ミス
value = None
if value == None:
print("It's None!")
このコードの改善点として適切なのは?
A. value = null と書くべき
B. if value is None: を使うべき
C. value == None は必ず False になる
正解: B
解説: None との比較には == よりも is を使うのが Pythonic です。is はオブジェクトの同一性を比較します。
問題14:再帰関数の停止条件ミス
def countdown(n):
print(n)
countdown(n - 1)
countdown(3)
このコードの問題点は?
A. printが無限に呼ばれる
B. 再帰の停止条件がないため RecursionError が起きる
C. nがリストでないため TypeError
正解: B
解説: この関数には停止条件(ベースケース)がないため、再帰が終わらず RecursionError を引き起こします。例えば if n == 0: return を追加する必要があります。
問題15:文字列フォーマットの誤り
name = "Yusei"
print("Hello, {name}")
このコードの出力は?
A. Hello, Yusei
B. Hello, {name}
C. エラーになる
正解: B
解説: Pythonの .format() を使っていないため、波括弧はそのまま出力されます。
正しくは:print("Hello, {}".format(name))
または:print(f"Hello, {name}")(f文字列)
問題16:クラス属性 vs インスタンス属性の混同
class Dog:
name = "Pochi"
d1 = Dog()
d2 = Dog()
d1.name = "Shiro"
print(d2.name)
このコードの出力は?
A. Pochi
B. Shiro
C. エラーになる
正解: A
解説: nameはクラス変数ですが、d1.name = "Shiro" によりインスタンス変数が d1 に追加されただけです。d2 には影響しません。
問題17:タプルの変更
items = (1, 2, 3)
items[0] = 100
このコードのエラー内容は?
A. IndexError
B. TypeError
C. SyntaxError
正解: B
解説: タプルはイミュータブル(変更不可)なデータ型です。要素の変更を試みると TypeError が発生します。
問題18:文字列の分割結果の型
data = "apple,banana,grape"
fruits = data.split(",")
print(fruits[3])
このコードのエラーは?
A. ValueError
B. IndexError
C. TypeError
正解: B
解説: split(",") により ['apple', 'banana', 'grape'] という長さ3のリストになります。インデックス3は存在しないため IndexError。
問題19:ネスト構造の構文ミス
for i in range(3):
if i % 2 == 0:
print(i)
else:
print("Odd")
エラーの原因は?
A. else文の条件式がない
B. print("Odd") のインデントが不足している
C. range(3)が正しくない
正解: B
解説: Pythonではインデントが文法の一部です。else: の次の行は必ず同じ深さでインデントする必要があります。
このデバッグ問題セットは非常によく構成されており、Python初心者がつまずきやすい典型的なエラー(型の違い、スコープ、インデント、関数の戻り値など)を幅広く網羅しています。ただし、以下の観点で補完するとさらに学習効果が高まります:
問題20:辞書のキー存在チェックミス
person = {"name": "Yusei", "age": 25}
print(person["gender"])
エラーの原因は?
A. genderが未定義の変数になっている
B. personにgenderキーが存在しないためKeyErrorになる
C. genderは数値であるべきなのに文字列で書かれている
正解: B
補足: .get("gender")を使えば、エラーを防げる。
問題21:ミュータブルなデフォルト引数の落とし穴
def add_item(item, item_list=[]):
item_list.append(item)
return item_list
print(add_item("apple"))
print(add_item("banana"))
出力は?
A. ["apple"], ["banana"]
B. ["apple"], ["apple", "banana"]
C. エラーになる
正解: B
補足: デフォルト引数にリストなどミュータブル型を使うと、関数呼び出し間で共有される。
問題22:イミュータブルとミュータブルの混同
x = (1, 2, [3, 4])
x[2].append(5)
print(x)
出力は?
A. (1, 2, [3, 4, 5])
B. エラーになる(タプルに変更を加えようとした)
C. [3, 4, 5]
正解: A
補足: タプルはイミュータブルだが、内部にミュータブルな要素があるとその要素は変更可能。
問題23:文字列と数値の混在による意図しない結果
value = "10"
result = value * 2
print(result)
出力は?
A. 20
B. 1010
C. エラーになる
正解: B
補足: 数値の掛け算ではなく、文字列の繰り返しになる。
問題24:is と == の違い
a = [1, 2, 3]
b = [1, 2, 3]
print(a == b)
print(a is b)
出力は?
A. True, True
B. True, False
C. False, False
正解: B
補足: ==は値の比較、isはオブジェクトIDの比較。
セイ・コンサルティング・グループの新人エンジニア研修のメニューへのリンク
投稿者プロフィール
- 代表取締役
-
セイ・コンサルティング・グループ株式会社代表取締役。
岐阜県出身。
2000年創業、2004年会社設立。
IT企業向け人材育成研修歴業界歴20年以上。
すべての無駄を省いた費用対効果の高い「筋肉質」な研修を提供します!
この記事に間違い等ありましたらぜひお知らせください。
最新の投稿
山崎講師2025年11月2日Pythonの「なるほど!」と思えるユニークな機能④
山崎講師2025年11月2日Pythonの「なるほど!」と思えるユニークな機能③
山崎講師2025年11月2日Pythonの「なるほど!」と思えるユニークな機能②
山崎講師2025年11月2日Pythonの「なるほど!」と思えるユニークな機能①