質問をすることでしか得られない、回答やアドバイスがある。

15分調べてもわからないことは、質問しよう!

ただいまの
回答率

90.52%

  • Python

    7944questions

    Pythonは、コードの読みやすさが特徴的なプログラミング言語の1つです。 強い型付け、動的型付けに対応しており、後方互換性がないバージョン2系とバージョン3系が使用されています。 商用製品の開発にも無料で使用でき、OSだけでなく仮想環境にも対応。Unicodeによる文字列操作をサポートしているため、日本語処理も標準で可能です。

ネームエラーが解決できません。NameError: name 'return_response' is not defined

解決済

回答 1

投稿 編集

  • 評価
  • クリップ 0
  • VIEW 123

Akira331

score 1

python学習中の初心者です。

学習のため西暦を入力すると干支を返す会話botプログラムを作成しているのですが、作成したプログラムを実行すると、「NameError: name 'return_response' is not defined 」と表示され、解決ができません。いくら見比べてもどの部分が間違っているのか気づけず、分かる方がいらっしゃいましたら、ご教授お願い致します。

下記がコードになります。平成 1991 と入力すると未と返し、干支 1991と入力すると 1991年生まれの干支は未です。と返す、予定です。
関数及びモジュール化の勉強のため、プログラムが分かれています。

メインプログラム↓(bot_kumikomi11.py)

from pybot_eto1 import eto_command

def len_command(command):
    cmd, text = command.split()
    length = len(text)
    response = '文字列の長さは {} です。'.format(length)
    return_response

def heisei_command(command):
    heisei, year_str = command.split()
    year = int(year_str)
    if year >= 1989:
        heisei_year = year - 1988
        response = '西暦{}年ハ、平成{}年デス!'.format(year, heisei_year)
    else:
        response = '西暦{}年ハ、平成デハアリマセン!'.format(year)
    return_response

with open('pybot.text', encoding='utf-8') as command_file:
        raw_data = command_file.read()
lines = raw_data.splitlines()

bot_dict = {}
for line in lines:
        word_list = line.split(',')
        key = word_list[0]
        response = word_list[1]
        bot_dict[key] = response

while True:
        command = input('python> ')
        response = ''
        for key in bot_dict:
            if key in command:
                response = bot_dict[key]
                break

        if '平成' in command:
            response = heisei_command(command)

        if '長さ' in command:
            response = len_command(command)

        if '干支' in command:
            response = eto_command(command)

        if not response:
                response = '何を言ってるかワカラナイです!'
        print(response)

        if 'さようなら' in command:
                break


モジュールのプログラム↓(pybot_eto1.py)

def eto_command(command):
    eto, year = command.split()
    eto_list = ["子", "丑", "寅", "卯", "辰", "巳", "午", "未", "申", "酉", "戌", "亥"]
    eto_number = (int(year) + 8) % 12
    eto_name = eto_list[eto_number]
    response = '{}年生生まれの干支は「{}」です。'.format(year, eto_name)
    return_response

長くなりますが、よろしくお願いいたします。
  • 気になる質問をクリップする

    クリップした質問は、後からいつでもマイページで確認できます。

    またクリップした質問に回答があった際、通知やメールを受け取ることができます。

    クリップを取り消します

  • 良い質問の評価を上げる

    以下のような質問は評価を上げましょう

    • 質問内容が明確
    • 自分も答えを知りたい
    • 質問者以外のユーザにも役立つ

    評価が高い質問は、TOPページの「注目」タブのフィードに表示されやすくなります。

    質問の評価を上げたことを取り消します

  • 評価を下げられる数の上限に達しました

    評価を下げることができません

    • 1日5回まで評価を下げられます
    • 1日に1ユーザに対して2回まで評価を下げられます

    質問の評価を下げる

    teratailでは下記のような質問を「具体的に困っていることがない質問」、「サイトポリシーに違反する質問」と定義し、推奨していません。

    • プログラミングに関係のない質問
    • やってほしいことだけを記載した丸投げの質問
    • 問題・課題が含まれていない質問
    • 意図的に内容が抹消された質問
    • 広告と受け取られるような投稿

    評価が下がると、TOPページの「アクティブ」「注目」タブのフィードに表示されにくくなります。

    質問の評価を下げたことを取り消します

    この機能は開放されていません

    評価を下げる条件を満たしてません

    評価を下げる理由を選択してください

    詳細な説明はこちら

    上記に当てはまらず、質問内容が明確になっていない質問には「情報の追加・修正依頼」機能からコメントをしてください。

    質問の評価を下げる機能の利用条件

    この機能を利用するためには、以下の事項を行う必要があります。

質問への追記・修正、ベストアンサー選択の依頼

  • quiqui

    2018/06/24 09:39

    コードは読めるように書きましょう https://teratail.com/help/question-tips#questionTips3-5-1 編集でコードボタンを使ってください

    キャンセル

  • hayataka2049

    2018/06/24 09:40

    質問文の再編集画面を開き、コード部分を選択して<code>ボタンを押し、「ここに言語を入力」を「python」に書き換えてコードが綺麗に囲まれていることを確認して再投稿してください

    キャンセル

回答 1

checkベストアンサー

+2

関数で返り値を返したいのなら、

return_response  # 間違い
return response  # 正解

です。

投稿

  • 回答の評価を上げる

    以下のような回答は評価を上げましょう

    • 正しい回答
    • わかりやすい回答
    • ためになる回答

    評価が高い回答ほどページの上位に表示されます。

  • 回答の評価を下げる

    下記のような回答は推奨されていません。

    • 間違っている回答
    • 質問の回答になっていない投稿
    • スパムや攻撃的な表現を用いた投稿

    評価を下げる際はその理由を明確に伝え、適切な回答に修正してもらいましょう。

  • 2018/06/24 09:53

    早急な対応ありがとうございました!
    ご指摘いただいた箇所を修正することで解決いたしました。
    単純なミスでお恥ずかしい限りですが、大変参考になりました。

    キャンセル

15分調べてもわからないことは、teratailで質問しよう!

  • ただいまの回答率 90.52%
  • 質問をまとめることで、思考を整理して素早く解決
  • テンプレート機能で、簡単に質問をまとめられる

関連した質問

  • 解決済

    PHPのマジックメソッドのPython版

    PHPのメソッドに未定義な関数の呼び出しやプロパティの設定・取得が行われた時に、PHPから呼び出してくれる(いわゆるコールバックしてくれるマジックメソッドがあります。 #!/

  • 解決済

    python3 単語を出てきた順で数えたい

    単語の出てきた順に単語数をカウントしたいのですが、collectionsのCounterを使うと単語の多い順で表示される。かといってOrderedDictを使うと入力の読み取りをし

  • 解決済

    文字列を区切り文字を含んだ状態で分割したい

    python3で区切り文字を含んだ状態で文字列を分割するにはどのようにしたらよいでしょうか? 例: 以下の文字列を [aaa] bbb 以下のように分解したい '

  • 解決済

    python classとforの組み合わせ

    import csv import datetime # 辞書にデータを読み取る date_dict = {} with open("moving_train.csv", "r"

  • 解決済

    Pythonの特殊変換とデータ差し込みを実現したいです。

     前提・実現したいこと ここに質問の内容を詳しく書いてください。 Pythonについて、以前も同じような質問をさせていただいたのですが、 少し変換前のデータ形式が変わってしまっ

  • 解決済

    リストの文字列を変数名として、データを中に入れたい

     前提・実現したいこと PythonのJupyter Notebookを使っています。 CSVデータを読み込んで、countryリストに入っている国名を使って、for文でデータ

  • 解決済

    Multiprosessingを用いるとNameErrorになる

    Windows10 64bit, Python3.5 64bit dillでバイナリ化したオブジェクトをMultiprocessingで実行しようとするとNameErrorになりま

  • 解決済

    存在する組み合わせを数えたい

    例えば下のような文字列がある場合 あいう あうえ い うい この4つの文字列のうち同じ文字の組み合わせをもつ文字列を数えたいです。 上の場合、たとえば「あ」と「う」があるのは「あい

同じタグがついた質問を見る

  • Python

    7944questions

    Pythonは、コードの読みやすさが特徴的なプログラミング言語の1つです。 強い型付け、動的型付けに対応しており、後方互換性がないバージョン2系とバージョン3系が使用されています。 商用製品の開発にも無料で使用でき、OSだけでなく仮想環境にも対応。Unicodeによる文字列操作をサポートしているため、日本語処理も標準で可能です。