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

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

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

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

Python

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

Q&A

解決済

1回答

1527閲覧

Python 季語が一個入った俳句をボタンクリック一回で五句作りたい。

退会済みユーザー

退会済みユーザー

総合スコア0

Python 3.x

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

Python

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

0グッド

0クリップ

投稿2020/01/13 00:52

前提・実現したいこと

昨日複数処理をボタン一つでやる方法についてお尋ねしたところ、shiracamus様より回答を頂きます。 感謝いたしております。 その回答に基づき自分のやりたいように多少変更を致しました。 これからやりたいことは現在俳句が一句だけですので、俳句を続けて五句く作りたいのです。 宜しくお願い致します。

発生している問題・エラーメッセージ

codeは殆ど全くshiracamusさんのcodeをお借りしております。 エラーは出ておりませんが、後四個続けて表示できるようにしたいのです。 for haiku in range(5)とかやるのだろうと思うのですが、うまく行きません。

該当のソースコード

使用言語はPython3.7です。 import tkinter as tk import random class Test(): KAMI = ("赤い椿1", "夕立の1", "夕立が1", "朝立や0", "荒海や0", "海に出て0") NAKA = ("雪を染めたる1", "雪がふうはり1", "春の雲あり1", "白い椿と0", "隣は何を0", "筑波に雲も0") SHIMO = ("秋の暮れ1", "落ち葉かな1", "散るもみぢ1", "落ちにけり0", "する人ぞ0", "なかりけり0") Haiku1 = '1' def __init__(self): self.root = tk.Tk() self.root.title("人工無能俳句") self.root.geometry('300x200') self.labelSpace_0 = tk.Label(self.root).pack() self.button = tk.Button(self.root, text='次の人工無能俳句', command=self.make) self.button.pack() self.labelSpace_0 = tk.Label(self.root).pack() self.labelKami = tk.Label(self.root, text="上の句") self.labelNaka = tk.Label(self.root, text="中の句") self.labelShimo = tk.Label(self.root, text="下の句") self.labelHaiku1 = tk.Label(self.root, text="Pyhon作成俳句1") self.labelHaiku2 = tk.Label(self.root, text="Pyhon作成俳句2") self.labelHaiku3 = tk.Label(self.root, text="Pyhon作成俳句3") self.labelHaiku4 = tk.Label(self.root, text="Pyhon作成俳句4") self.labelHaiku5 = tk.Label(self.root, text="Pyhon作成俳句5") #self.labelKami.pack() #self.labelNaka.pack() #self.labelShimo.pack() self.labelHaiku1.pack() self.labelHaiku2.pack() self.labelHaiku3.pack() self.labelHaiku4.pack() self.labelHaiku5.pack() self.root.mainloop() def make(self, *args): while True: kami = random.choice(self.KAMI) naka = random.choice(self.NAKA) shimo = random.choice(self.SHIMO) self.labelKami["text"] = kami self.labelNaka["text"] = naka self.labelShimo["text"] = shimo if self.is_Haiku1(kami, naka, shimo): return def is_Haiku1(self, kami, naka, shimo): Haiku1_count = sum(Haiku1 in ku for ku in (kami, naka, shimo) for Haiku1 in self.Haiku1) self.labelHaiku1["text"] = Haiku1_count self.labelSpace_0 = tk.Label(self.root).pack() if Haiku1_count == 1: Haiku1 = kami[:-1] + " " + naka[:-1] + " " + shimo[:-1] self.labelHaiku1["text"] = Haiku1 return True else: self.labelHaiku1["text"] = "季語がないか又は多すぎます。" return False Test()

試したこと

上記codeに for haiku in range(5) など試しましたが、NGでした。

####イメージ説明 補足情報(FW/ツールのバージョンなど)
W10 64bit
Python3.7

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

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

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

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

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

guest

回答1

0

ベストアンサー

基本的には
for _ in range(5):
のようなループ処理で対応できるかと思いますが、出力する場所をその都度変更する処理を入れる必要があります。
質問のコードは 俳句を作成するメソッド(make)や俳句を検証するメソッド(is_Haiku) に出力する処理が含まれておりますので、その部分を分離してループ毎に出力する場所を変更するようにすると良いかと思います。

以下に改造したサンプルコードを載せておきます。下のサンプルでは output_5Haiku() にてループ処理を行うようになってます。

Python

1import tkinter as tk 2import random 3 4class Test(): 5 6 KAMI = ("赤い椿1", 7 "夕立の1", 8 "夕立が1", 9 "朝立や0", 10 "荒海や0", 11 "海に出て0") 12 13 NAKA = ("雪を染めたる1", 14 "雪がふうはり1", 15 "春の雲あり1", 16 "白い椿と0", 17 "隣は何を0", 18 "筑波に雲も0") 19 20 SHIMO = ("秋の暮れ1", 21 "落ち葉かな1", 22 "散るもみぢ1", 23 "落ちにけり0", 24 "する人ぞ0", 25 "なかりけり0") 26 27 Haiku1 = '1' 28 29 def __init__(self): 30 self.root = tk.Tk() 31 self.root.title("人工無能俳句") 32 self.root.geometry('300x200') 33 34 #self.labelSpace_0 = tk.Label(self.root).pack() 35 self.button = tk.Button(self.root, 36 text='次の人工無能俳句', 37 command=self.output_5Haiku) 38 self.button.pack() 39 40 #self.labelSpace_0 = tk.Label(self.root).pack() 41 42 #self.labelKami = tk.Label(self.root, text="上の句") 43 #self.labelNaka = tk.Label(self.root, text="中の句") 44 #self.labelShimo = tk.Label(self.root, text="下の句") 45 self.labelHaiku1 = tk.Label(self.root, text="Pyhon作成俳句1") 46 self.labelHaiku2 = tk.Label(self.root, text="Pyhon作成俳句2") 47 self.labelHaiku3 = tk.Label(self.root, text="Pyhon作成俳句3") 48 self.labelHaiku4 = tk.Label(self.root, text="Pyhon作成俳句4") 49 self.labelHaiku5 = tk.Label(self.root, text="Pyhon作成俳句5") 50 51 #self.labelKami.pack() 52 #self.labelNaka.pack() 53 #self.labelShimo.pack() 54 self.labelHaiku1.pack() 55 self.labelHaiku2.pack() 56 self.labelHaiku3.pack() 57 self.labelHaiku4.pack() 58 self.labelHaiku5.pack() 59 60 self.root.mainloop() 61 62 def output_5Haiku(self, *args): 63 for label in [self.labelHaiku1, 64 self.labelHaiku2, 65 self.labelHaiku3, 66 self.labelHaiku4, 67 self.labelHaiku5]: 68 label["text"] = self.make() 69 70 def make(self, *args): 71 while True: 72 kami = random.choice(self.KAMI) 73 naka = random.choice(self.NAKA) 74 shimo = random.choice(self.SHIMO) 75 #self.labelKami["text"] = kami 76 #self.labelNaka["text"] = naka 77 #self.labelShimo["text"] = shimo 78 if self.is_Haiku(kami, naka, shimo): 79 return kami[:-1] + " " + naka[:-1] + " " + shimo[:-1] 80 81 def is_Haiku(self, kami, naka, shimo): 82 Haiku1_count = sum(Haiku1 in ku 83 for ku in (kami, naka, shimo) 84 for Haiku1 in self.Haiku1) 85 #self.labelHaiku1["text"] = Haiku1_count 86 #self.labelSpace_0 = tk.Label(self.root).pack() 87 88 if Haiku1_count == 1: 89 #Haiku1 = kami[:-1] + " " + naka[:-1] + " " + shimo[:-1] 90 #self.labelHaiku1["text"] = Haiku1 91 return True 92 else: 93 #self.labelHaiku1["text"] = "季語がないか又は多すぎます。" 94 return False 95 96Test()

投稿2020/01/13 03:01

magichan

総合スコア15898

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

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

退会済みユーザー

退会済みユーザー

2020/01/13 04:30

magichan様 前にも教えて頂きましたね、有難うございます。 成程こうすれば出来るのかと納得ですが、自前で思いつくほどのスキルは有りませんでしたので、大変助かりました。 理解して自分のものになるように努力いたします。 本当にありがとうございました。
guest

あなたの回答

tips

太字

斜体

打ち消し線

見出し

引用テキストの挿入

コードの挿入

リンクの挿入

リストの挿入

番号リストの挿入

表の挿入

水平線の挿入

プレビュー

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

ただいまの回答率
85.31%

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

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

質問する

関連した質問