Python
 Computer >> コンピューター >  >> プログラミング >> Python

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つの字下げ)といったスタイルガイドに従うことで、この種のエラーを未然に防ぎやすくなります。

  1. 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 : 結果を格納するため、最

  2. Pythonで氏名のイニシャルを出力するプログラムの書き方を解説

    氏名のイニシャル(頭文字)を表示するプログラムは、Pythonの組み込み関数を組み合わせることで簡単に実装できます。この記事では、split()、upper()、title()という3つの組み込み関数を使って、氏名を「イニシャル+苗字」の形式に変換する方法を解説します。 処理の流れ 基本的な処理の手順は以下のとおりです。 split()関数を使って、氏名の文字列を単語ごとのリストに分割します。 リストを最後から2番目の単語まで走査し、各単語の先頭文字をupper()関数で大文字に変換します。 最後の単語(苗字にあたる部分)は、title()関数を使って先頭のアルファベットを大文字にしたままそ