占いをちゃんと表示させたい
表題のような出力をするコードを書いていました。それが以下です。
###占いコード
import random fortunes = { 1: '良い', 2: '普通', 3: '悪い', } x = random.randint(1, 3) fortune = fortunes[x] with open('10006/' + str(x) + '.py', 'r', encoding='utf-8') as f: a = f.readlines() message = random.choice(a) print('今日の運勢は' + fortune + '\n' + message) print(message)
ファイルの階層構造は以下のようになっていて、10004/a.pyにコードを書き、
占いのコメントを1.pyと2.pyと3.pyに保存し、それぞれ3行のコメントが書かれています。
例として10006/1.pyのコメントを以下に載せます。似たようなコメントが2.pyと3.pyにも書かれています。
そして、表示されたエラーが以下です。
Traceback (most recent call last): File "/Users/名前/Documents/samples/3step/10004/a.py", line 14, in <module> message = random.choice(a) File "/Library/Frameworks/Python.framework/Versions/3.7/lib/python3.7/random.py", line 261, in choice raise IndexError('Cannot choose from an empty sequence') from None IndexError: Cannot choose from an empty sequence
エラーから察するに
message = random.choice(a)のaはempty(何もない状態?!)だから、何もないところから選ぶことはできないよ
という意味なのかなと思いました。
しかし、aというのは
a = f.readlines()
と定義しています。
例えば、10006/1.pyの行をリストとして表示しているので、
[うまくいく\n, 挑戦しよう\n, 頑張れ\n]
というリストが作成されているはずです。
それなのにemptyとなってしまう理由がわからないという状況です。
一応emptyなのかの確認のために以下のようなコードでリストを表示させようと試みました。
import random fortunes = { 1: '良い', 2: '普通', 3: '悪い', } x = random.randint(1, 3) fortune = fortunes[x] with open('10006/' + str(x) + '.py', 'r', encoding='utf-8') as f: a = f.readlines() print(a)
[うまくいく\n, 挑戦しよう\n, 頑張れ\n]と表示されると思いきや、
結果は[]のみ表示され確かにemptyでした。
emptyを回避する方法がわからず八方塞がりなので、どうすれば回避できるかを回答していただけたら幸いです。
よろしくお願いします。
補足情報(FW/ツールのバージョンなど)
mac 10.14.1
visual studio code
回答1件
あなたの回答
tips
プレビュー