表示調整
閉じる
挿絵表示切替ボタン
▼配色
▼行間
▼文字サイズ
▼メニューバー
×閉じる

ブックマークに追加しました

設定
0/400
設定を保存しました
エラーが発生しました
※文字以内
ブックマークを解除しました。

エラーが発生しました。

エラーの原因がわからない場合はヘルプセンターをご確認ください。

ブックマーク機能を使うにはログインしてください。
Pythonに「なろう系タイトルジェネレータ」を移植し、さらにいろんなツールを開発してみる物語  作者: 超プリン体
第一章 なろう系タイトルジェネレータを移植する
4/20

第四話 同じタイトルが連続で表示されるのを防ぐ ~モンスター森の世界わんこ

フレ登録、ブクマ、ポイント、ご質問などお気軽にどうぞ。


なおコードの左に全角スペースが2個入っている所が、実行時にエラーになる場合は、Tabに変更して実行してください。

 みなさんこんにちは。なろう系タイトルジェネレータ開発の第四話です。


 第三話では、設定しておいた3つのタイトルから、1つをランダムに選んで表示させるという機能を追加しました。しかし、たまたま選んだタイトルが一致して、ボタンを押したのに変化がないように見えることがありますね。今回は、それを防ぎ、ボタンを押したら必ずタイトルを変化させるようにします。


 これを実現するための方法としては、ざっと考えて次の2つがありそうです。


 ①前回表示したタイトルを覚えておき、これと違うタイトルが選ばれるまで、何度も選び直す。


 ②前回ランダムに選んだ数字を覚えておき、これと一致する数字が発生した場合、数字をずらすような処理をさせる


 コーディングが比較的簡単なのは、①のような気がしますが、①にすると、「たまたま同じ数字が延々と選ばれ続けた場合、処理が終了しない」、という新たな問題が発生します。ですのでここでは、②を実現しようと思います。


 ※コンピューターで生成される乱数は、ある程度きれいにばらつくように設計されているため、「たまたま同じ数字が延々と選ばれ続ける」ような確率は、現実的にはほぼゼロと思って問題ありません。


 方針は決まりましたので、変更してみましょう。


 変更その1、「前回選んだ数」を覚えておくための、変数を定義します。


n_pre=-1



 変更その2、display_title()関数を次のように変更します。


def display_title():

# txt_title["text"]="自動作成ボタンが押されました"

  global n_pre


  if n_pre==-1:

    n=random.randint(0,2)

  else:

    n=random.randint(0,1)

    if n==n_pre:

      n=n+1


  txt_title["text"]=list_title[n]

  n_pre=n


 上の内容について、簡単に説明したいのですけど、「グローバル変数」、「ローカル変数」についての説明が必要になった場合、めっちゃ長くなってしまいますので、今回は説明は省かせていただきます。



 上の2つの変更で、コード全体がどうなったかを示しておきます。



(ここから)

# -*- coding: utf-8 -*-

import tkinter

import random

list_title=["悪役令嬢転生したら本気だす","本好きのスライムだった件","ゼロから始めるスライム食堂"]

n_pre=-1


#ウインドウ設定

tk=tkinter.Tk()

tk.title(u"なろう系タイトルジェネレータ")

tk.minsize(480,200)

#ウインドウ表示

win=tkinter.Canvas(bg="black",width=480,height=200)

win.place(x=0,y=0)

btn_quit = tkinter.Button(tk, text='終了')

btn_quit.place(x=130, y=80)

btn_create = tkinter.Button(tk, text='自動作成')

btn_create.place(x=50, y=80)

txt_title=tkinter.Label(text=u"ここにランダムで作成したタイトルが表示されます。")

txt_title.place(x=0,y=0)


def display_title():

# txt_title["text"]="自動作成ボタンが押されました"

  global n_pre


  if n_pre==-1:

    n=random.randint(0,2)

  else:

    n=random.randint(0,1)

    if n==n_pre:

      n=n+1


  txt_title["text"]=list_title[n]

  n_pre=n


btn_create["command"]=display_title


def destroy_tk():

  tk.destroy()

btn_quit["command"]=destroy_tk



tk.mainloop()

(ここまで)


 どうですか? ボタンを押したときに、必ず別のタイトルに切り替わるようになりましたか?


 今回はここまでです。次回は「登録しておいたキーワードを適当にいくつか選び、それらをくっつけたものをタイトルとして表示する」という処理に、変更したいと思います。やっとここまで来ましたね。


では次回またお会いしましょう。

評価をするにはログインしてください。
ブックマークに追加
ブックマーク機能を使うにはログインしてください。
― 新着の感想 ―
このエピソードに感想はまだ書かれていません。
感想一覧
+注意+

特に記載なき場合、掲載されている作品はすべてフィクションであり実在の人物・団体等とは一切関係ありません。
特に記載なき場合、掲載されている作品の著作権は作者にあります(一部作品除く)。
作者以外の方による作品の引用を超える無断転載は禁止しており、行った場合、著作権法の違反となります。

この作品はリンクフリーです。ご自由にリンク(紹介)してください。
この作品はスマートフォン対応です。スマートフォンかパソコンかを自動で判別し、適切なページを表示します。

↑ページトップへ