Pythonプログラムの修正方法:インデントエラーと未定義変数の解決策
エラーの原因
このプログラムには、主に2つの問題があります。
1. インデント(字下げ)の欠落
太字部分で発生している最初の問題は、インデントされていないブロックによるものです。Pythonでは、if文の中で実行したい処理は、必ずインデント(通常は半角スペース4つ)で字下げする必要があります。該当する行にインデントを1つ追加してください。
2. 変数「name」が定義されていない
2つ目の問題は、name変数が定義される前に使用されていることです。Pythonでは、代入されていない変数を参照すると NameError が発生します。name = "Daniel" のように、変数を使用する前に必ず定義しておきましょう。
修正版コード
以下が、インデントと変数定義を修正したコードです。
print("Come-on in. Need help with any bags?")
bag = input('(1) Yes please (2) Nah, thanks (3) Ill get em later TYPE THE NUMBER ONLY')
if bag == '1':
print("Ok, ill be right there!")
if bag == '2':
print("Okee, see ya inside. Heh, how rude of me? I'm Daniel by the way, ya?")
name = "Daniel"
print(name + ": Um, Names " + name)
print("Dan: K, nice too meet ya " + name)
if bag == '3':
print("Heh, Ya remind me of someone I know... *cough* me *cough*")
print("Oh... Nearly forgot. Names Daniel, Ya?")
print(name + ": Eh... " + name)
print("Dan: Cool, I now a" + name)
より安全な書き方のポイント
さらに堅牢なコードにするために、次のポイントも押さえておきましょう。
- elif を活用する:条件が互いに排他な場合は
if / elif / elseを使うと、処理の流れが明確になり、不要な判定も減らせます。 - 変数を事前に初期化する:分岐の前に
name = ""と定義しておけば、どの分岐を選んでも NameError を防げます。 - 入力値の余分な空白を除去する:
bag = input(...).strip()とすれば、ユーザーが誤って空白を入力しても正しく比較できます。
Pythonではインデントそのものが構文の一部であり、単なる見た目の問題ではありません。エディタの自動インデント機能を利用したり、PEP 8(半角スペース4つの字下げ)といったスタイルガイドに従うことで、この種のエラーを未然に防ぎやすくなります。
-
Pythonでリストのすべてのサブリストを生成して出力する方法
リストが与えられたとき、そのリストに含まれるすべてのサブリスト(部分リスト)を生成して出力するプログラムを紹介します。要素数 n のリストの場合、空のリストを含めるとサブリストの総数は n×(n+1)/2+1 個になります。 実行例 入力 : list = [1, 2, 3] 出力 : [], [1], [1, 2], [1, 2, 3], [2], [2, 3], [3] アルゴリズム 考え方はシンプルです。開始位置 i と終了位置 j の組み合わせをすべて試し、スライスで部分リストを取り出します。 ステップ1 : 対象となるリストを用意します。 ステップ2 : 結果を格納するため、最
-
Pythonで氏名のイニシャルを出力するプログラムの書き方を解説
氏名のイニシャル(頭文字)を表示するプログラムは、Pythonの組み込み関数を組み合わせることで簡単に実装できます。この記事では、split()、upper()、title()という3つの組み込み関数を使って、氏名を「イニシャル+苗字」の形式に変換する方法を解説します。 処理の流れ 基本的な処理の手順は以下のとおりです。 split()関数を使って、氏名の文字列を単語ごとのリストに分割します。 リストを最後から2番目の単語まで走査し、各単語の先頭文字をupper()関数で大文字に変換します。 最後の単語(苗字にあたる部分)は、title()関数を使って先頭のアルファベットを大文字にしたままそ