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

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

新規登録して質問してみよう
ただいま回答率
85.50%
Python 3.x

Python 3はPythonプログラミング言語の最新バージョンであり、2008年12月3日にリリースされました。

Python

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

Q&A

解決済

1回答

559閲覧

【python3】テキストファイルの読み込み、チャットプログラムの実行が上手く行きません

yuka-co

総合スコア14

Python 3.x

Python 3はPythonプログラミング言語の最新バージョンであり、2008年12月3日にリリースされました。

Python

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

0グッド

0クリップ

投稿2017/12/28 14:19

###前提・実現したいこと
Windows10、python3、VScodeで、『いちばんやさしいPython』をもとに、txtファイルを読み込んで回答するチャットプログラミングを作成しています。txtファイルの中身は、

こんにちは,コンニチハ
ありがとう,ドウイタシマシテ
さようなら,サヨウナラ

で、改行に区切って三つにわけ、さらにカンマで区切って左を辞書型のキー、右をバリューにしています。
単語にキーが含まれる際に対応するバリューがレスポンスとして返されます。
コマンドプロンプトでの実行を想定しています。

###発生している問題・エラーメッセージ
ファイルの読み込みはできていないのか、内容が上手く回答に反映されません。
「pybot> 」は表示されます。
「こんにちは」で単語を認識できない時の回答(「何ヲ言ッテルカ、ワカラナイ」)になり、
「ありがとう」では何も表示されません。
他の平成何年か計算する機能なども反応しませんでした。

###該当のソースコード

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 command_file = open('C:\Users\〇\Python\Scripts\pythonscript\mosteasypy\pybot.txt', encoding='utf-8') raw_data =command_file.read() command_file.close 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('pybot> ') 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 not response: response = '何ヲ言ッテルカ、ワカラナイ' print(response) if 'さようなら' in command: break

###試したこと
予想として、
1、文字コードがしていない
2、ファイルを置く階層が間違っている
のどちらかではないかと考えています。
読み込むテキストファイルは絶対パスで書き、保存場所もソースコードと同じ場所に置いています。

よろしくお願いいたします。

###補足情報(言語/FW/ツール等のバージョンなど)
Windows10、python3、VScode

気になる質問をクリップする

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

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

バッドをするには、ログインかつ

こちらの条件を満たす必要があります。

guest

回答1

0

ベストアンサー

responseprintで出力する処理が抜けています。そのため、responseが「何を言ってるかわからない」以外の場合、何も画面に出力されないままbreakされてしまっています。
それぞれのif以下のブロックに、print(response)と入れると、正常に結果が出てきます。

投稿2017/12/28 15:32

Udomomo

総合スコア1524

バッドをするには、ログインかつ

こちらの条件を満たす必要があります。

yuka-co

2017/12/28 15:49

ご回答ありがとうございます。 ご指摘の通り各if文にprint(response)を入れたら、「こんにちは」以外のコマンドを入力した場合返事が来るようになりました。本に頼り切っていて思いつかなかったです……。 「こんにちは」についてはもう少し試行錯誤してみます。 ありがとうございます。重ねてお礼申し上げます。
Udomomo

2017/12/29 01:40

こちらの環境では「こんにちは」でも正常に結果が返ってきました。一度デバッグして、例えばcommand変数にどんな値が入ったかなどを確かめてみることをおすすめします。一番単純なのはprint(command)などとすることですが、pythonのデバッグ用標準ライブラリであるpdbを使うのもおすすめです。 https://qiita.com/TakesxiSximada/items/45b6d71a44f2706798ed
yuka-co

2017/12/29 13:50

ありがとうございます。 「こんにちは」については、2回目の回答をいただく前に、テキストファイルの最初にもう一行「こんにちは,コンニチハ」を追加したところ反応するようになりました。 ただかなりスッキリしない方法なので、qiitaの記事も参考にデバッグしてみます。
umyu

2017/12/29 14:10

横からレス失礼します。ファイルの読み込みencoding='utf-8'になってますが。テキストファイルを作成した時にメモ帳などで作ると先頭行にBOM(バイトオーダーマーク)が付きます。それが原因の可能性はありませんか?encoding='utf-8-sig'にしても問題は発生しますかー?
yuka-co

2017/12/29 16:44

回答ありがとうございます。ご指摘いただいたようにutf-8-sigに変更したら解決しました! 前に一回試して上手く行かなかったのですが、その時は恐らくこちらで何か間違えていたようです。
guest

あなたの回答

tips

太字

斜体

打ち消し線

見出し

引用テキストの挿入

コードの挿入

リンクの挿入

リストの挿入

番号リストの挿入

表の挿入

水平線の挿入

プレビュー

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

ただいまの回答率
85.50%

質問をまとめることで
思考を整理して素早く解決

テンプレート機能で
簡単に質問をまとめる

質問する

関連した質問