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

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

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

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

Q&A

解決済

2回答

269閲覧

Pythonのプログラムの処理をリピートしたい。

退会済みユーザー

退会済みユーザー

総合スコア0

Python 3.x

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

0グッド

0クリップ

投稿2018/10/19 08:41

実現したいこと

英単語の問題発生プログラムを作っています。 取敢えず英単語とその意味を乱数で表示させています。

単語.txtを呼び込んで、Shellに表示させるところまで来ました。

発生している問題

知りたいのは、一度「英単語+意味」を表示させた後、再度プログラムを動作させないと(F5)次の「英単語+意味」が表示されないことです。

それを表示画面(今はPython3.7 Shell)上で、input()関数か何かでEnterとしたら次の「英単語+意味」が出てくるようにしたいのです。

shell上で”Enter for next word”と聞かれてますので、そこでエンターをしたら次の英単語が表示できるようにしたいのです。

お忙しい所お手数をお陰します。 宜しくお願い致します。

熊谷

該当のソースコード

import random

file = open("word.txt", "r", encoding="utf_8")
lines = file.readlines()
file.close()

e_word = []
j_word = []

for line in lines:
line = line.rstrip("\n")
name = line.rsplit(" ")
e_word.append(name[0])
j_word.append(name[1])

num=random.randrange(0,6)
print(num)

e_word = e_word[num]
j_word = j_word[num]

#e_word = e_word[random.randrange(len(e_word))]
#j_word = j_word[random.randrange(len(j_word))]

print(e_word + " " + j_word)


次が表示される結果です。

Python 3.7.0 (v3.7.0:1bf9cc5093, Jun 27 2018, 04:59:51) [MSC v.1914 64 bit (AMD64)] on win32
Type "copyright", "credits" or "license()" for more information.

========= RESTART: J:\MyDocuments\Python\Tak Sample\Tak-word_gen2.py =========
1
ransack くまなく捜す
Enter for next word.
========= RESTART: J:\MyDocuments\Python\Tak Sample\Tak-word_gen2.py =========
4
diffidence 自信のなさ 内気 はにかみ 遠慮
Enter for next word.
========= RESTART: J:\MyDocuments\Python\Tak Sample\Tak-word_gen2.py =========
3
chasm 深い割目
Enter for next word.

試したこと

このcodeで動作はしております。

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

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

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

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

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

guest

回答2

0

ベストアンサー

ファイルの読み込み、 num 番目の情報の表示をメソッドにまとめ、
while True: で繰り返し処理をするようにしてみました。

python3

1import random 2 3def read_words(): 4 file = open("word.txt", "r", encoding="utf_8") 5 lines = file.readlines() 6 file.close() 7 8 e_words = [] 9 j_words = [] 10 11 for line in lines: 12 line = line.rstrip("\n") 13 name = line.rsplit(" ") 14 if len(name) == 2: 15 e_words.append(name[0]) 16 j_words.append(name[1]) 17 return [e_words, j_words] 18 19def show_data(num, e_words, j_words): 20 e_word = e_words[num] 21 j_word = j_words[num] 22 print(e_word + " " + j_word) 23 24words = read_words() 25e_words = words[0] 26j_words = words[1] 27 28while True: 29 x = input("Enter for next word.(終了するなら exit を入力)") 30 if x == 'exit': 31 break 32 33 num = random.randrange(0, 6) 34 print(num) 35 show_data(num, e_words, j_words)

words.txt

cat 猫 dog 犬 spring 春 summer 夏 autom 秋 winter 冬

実行例
イメージ説明

投稿2018/10/19 12:54

編集2018/10/22 14:12
katoy

総合スコア22324

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

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

退会済みユーザー

退会済みユーザー

2018/10/20 11:05

katoyさん コピペだ動作しました。 これからcodeの意味など勉強します。 有難うございました、大変助かりました。
guest

0

num=random.randrange(0,6)
から
print(e_word + " " + j_word)

無限ループ(while True:)の中にいれる
かつ、
print(e_word + " " + j_word)
の後ろに入力待機
(@kumasan2018 さんが想定されているようにinput()でよいです)を
を追加する

でいかがでしょうか。

投稿2018/10/19 09:33

編集2018/10/19 09:37
退会済みユーザー

退会済みユーザー

総合スコア0

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

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

退会済みユーザー

退会済みユーザー

2018/10/19 11:32

kfjtさん 週末所用で出かけますので、test結果少し遅れますが迅速なこ回答有難うございます。 なんか良い結果が出そうな予感がします。 Hi。
退会済みユーザー

退会済みユーザー

2018/10/20 11:08

kfjtさん 一寸時間が出来たので、検討しようとしましたら、katoyさんから完璧なcodeを頂きそれをtestしたら、完璧に動作しました。 kfjtさんの言わんとしていたことと同じと推定致します。 お時間を撮らせましたが、言わんとしていることは理解できましたの勉強になりました。 有難うございました。
guest

あなたの回答

tips

太字

斜体

打ち消し線

見出し

引用テキストの挿入

コードの挿入

リンクの挿入

リストの挿入

番号リストの挿入

表の挿入

水平線の挿入

プレビュー

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

ただいまの回答率
85.48%

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

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

質問する

関連した質問