【初心者向け】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
解説: resultcalculate()関数内で定義されたローカル変数なので、関数外では参照できません。


問題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. ifelseの順番が逆になっている

正解: 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 / 22.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: の次の行は必ず同じ深さでインデントする必要があります。

セイ・コンサルティング・グループの新人エンジニア研修のメニューへのリンク

投稿者プロフィール

山崎講師
山崎講師代表取締役
セイ・コンサルティング・グループ株式会社代表取締役。
岐阜県出身。
2000年創業、2004年会社設立。
IT企業向け人材育成研修歴業界歴20年以上。
すべての無駄を省いた費用対効果の高い「筋肉質」な研修を提供します!
この記事に間違い等ありましたらぜひお知らせください。