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

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

ただいまの
回答率

87.59%

【Python/tkinter】リスト内で重複した数字を別のリストに格納したい

解決済

回答 1

投稿

  • 評価
  • クリップ 0
  • VIEW 852

score 13

前提・実現したいこと

今遊んでいるゲームにミニゲームでルーレットゲームがあるのですが、
その数字の記録用としてのプログラムを作っています。

【実現したいこと】
1)ルーレットを回すたびに出た数字の結果を入力

2)入力した数字を表示(LabelA)

3)複数回入力した数字のうち、重複した数字を表示(LabelB)

4)LabelAからLabelBに表示された数字が消える。

【出来ている部分】
1),2)まで

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

3)~の部分については、Whileやdefを使用してみましたが、
理解しきっていないところもあるため上手く表示ができませんでした。

エラー文が出ないので、どう改善すればよいのかわかりません。

該当のソースコード

import tkinter

#window
Root = tkinter.Tk()
Root.title("ルーレットナンバー")

#TextBox
EntBox = tkinter.Entry(width=12, bd=4)
EntBox.place(x=10, y=15)
#Button
AskBtn = tkinter.Button(text="押す")
AskBtn.place(x=50, y=60)

#入れるリスト
AddList = []
DupList = []

#入力結果をリストに入れてラベルに出す
def click_List():
    Ent = EntBox.get()
    AddList.append(Ent)
    Ent = EntBox.delete(0, tkinter.END)
    OutLabel["text"] = AddList
    Func_Val()
#重複した数字を別のラベルに出したい
def Func_Val():
    return [i for i, x in enumerate(AddList) if x == EntBox.get()]
    DupList = Func_Val(AddList, EntBox.get())
    DupLabel["text"] = DupList


AskBtn["command"] = click_List

#入力結果ラベル
OutLabel = tkinter.Label(text="入力した数字が出る")
OutLabel.place(x=10, y=120)

#重複結果ラベル
DupLabel = tkinter.Label(text="重複した数字が出る")
DupLabel.place(x=10, y=150)

#メインループ
Root.mainloop()

試したこと

  • if/while文で書いてみる(条件文の書き方が分からず・・・)
  • classでまとめてみる(今回はシンプルに書けそうな気がして、途中でやめました)

補足情報(FW/ツールのバージョンなど)

Visual Studio Code/ver1.30.2
Python/ver3.7

どうかご助力のほどよろしくお願いいたします。

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

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

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

    クリップを取り消します

  • 良い質問の評価を上げる

    以下のような質問は評価を上げましょう

    • 質問内容が明確
    • 自分も答えを知りたい
    • 質問者以外のユーザにも役立つ

    評価が高い質問は、TOPページの「注目」タブのフィードに表示されやすくなります。

    質問の評価を上げたことを取り消します

  • 評価を下げられる数の上限に達しました

    評価を下げることができません

    • 1日5回まで評価を下げられます
    • 1日に1ユーザに対して2回まで評価を下げられます

    質問の評価を下げる

    teratailでは下記のような質問を「具体的に困っていることがない質問」、「サイトポリシーに違反する質問」と定義し、推奨していません。

    • プログラミングに関係のない質問
    • やってほしいことだけを記載した丸投げの質問
    • 問題・課題が含まれていない質問
    • 意図的に内容が抹消された質問
    • 過去に投稿した質問と同じ内容の質問
    • 広告と受け取られるような投稿

    評価が下がると、TOPページの「アクティブ」「注目」タブのフィードに表示されにくくなります。

    質問の評価を下げたことを取り消します

    この機能は開放されていません

    評価を下げる条件を満たしてません

    評価を下げる理由を選択してください

    詳細な説明はこちら

    上記に当てはまらず、質問内容が明確になっていない質問には「情報の追加・修正依頼」機能からコメントをしてください。

    質問の評価を下げる機能の利用条件

    この機能を利用するためには、以下の事項を行う必要があります。

回答 1

checkベストアンサー

+1

以下のような感じでどうでしょうか

def click_List():
    Ent = EntBox.get()
    EntBox.delete(0, tkinter.END)

    # すでに入力リストにある値は削除し重複リストに加える
    if Ent in AddList:
        AddList.remove(Ent)
        DupList.append(Ent)
    # 重複リストにない値のみ入力リストに加える
    elif Ent not in DupList:
        AddList.append(Ent)

    OutLabel["text"] = AddList
    DupLabel["text"] = DupList

投稿

  • 回答の評価を上げる

    以下のような回答は評価を上げましょう

    • 正しい回答
    • わかりやすい回答
    • ためになる回答

    評価が高い回答ほどページの上位に表示されます。

  • 回答の評価を下げる

    下記のような回答は推奨されていません。

    • 間違っている回答
    • 質問の回答になっていない投稿
    • スパムや攻撃的な表現を用いた投稿

    評価を下げる際はその理由を明確に伝え、適切な回答に修正してもらいましょう。

  • 2019/02/05 08:25

    ありがとうございます!とても助かりました!
    "Ent = EntBox.delete(0, tkinter.END)"をif文の前に持ってきてしまうと、"None"と出てしまったので、
    関数の一番最後に持っていくことで上手く動きました。

    また、"in"がif文で使えるということも初めて知ったので勉強になりました。
    can111さんありがとうございました!

    キャンセル

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

  • ただいまの回答率 87.59%
  • 質問をまとめることで、思考を整理して素早く解決
  • テンプレート機能で、簡単に質問をまとめられる

関連した質問

同じタグがついた質問を見る