ryotankの備考録日記

趣味の電子工作についての備考録などなど

素材集めGUIその5

dictの書き方について勉強して直した上で
ver1.0のコードを書き直して動作するかを確かめる

そもそもdictは辞書型」(dictionary)は、「リスト」や「タプル」と同じように
複数の値を要素として管理するデータ構造の一つ。


辞書の書式は、以下のように{}の中に、「キー(Key):値(Value)」を組合せた要素を
もつ構造をとります。要素(値)へのアクセスは、
キーを使って参照するので一つの辞書の中に
同じキーを重複して持たせることはできません。
よって、リストやタプルのように要素の位置を意識することはない

キー(Key)」は後から変更できない性質上、
イミュータブルな型をもつデータを採ります。
「文字列」や「数値」「タプル」などのデータがキーになり得ます。


解説サイトに乗っていた例だと

dict1 = {'a':1, 'b':2, 'c':3}                     # キーに文字列を指定

のように書く

エラーを起こした今までのコードだと

""""素材名を受け取り、ステージ名を返す"""
    stage_dict ={'合成コール'}, {'マンガン'}, {'碇石(ていせき)'}, {'RMA70-12'}, {'人工ゲル'}, 
    {'素子結晶'}, {'合金'}, {'中級源岩':['4-6']}, {'半自然溶剤':['9-18']}

になっている

例と比べると確かにおかしい表記になっている・・・


改めて例に習い書き直すと

stage_dict = {'合成コール':['4-6'], 'マンガン':['4-6'], '碇石(ていせき)':['4-6'],
              'RMA70-12':['4-6'], '人工ゲル':['4-6'], '素子結晶':['4-6'],
		'合金':['4-6'], '中級源岩':['4-6'], '半自然溶剤':['9-18']}

辞書からデータを取得する際は、辞書が入った変数の後ろに
[]カッコで囲んだキーを入れることで取得できます。
確認のために
辞書からデータを取得するコードを書いてみる

stage_dict = {
		'合成コール':['4-4'], 'マンガン':['4-7'], '碇石(ていせき)':['4-8'],
		'RMA70-12':['4-9'], '人工ゲル':['S5-7'], '素子結晶':['S5-9'],
		'合金':['6-12'], '中級源岩':['4-6'], '半自然溶剤':['9-18']
}


sozai= stage_dict['RMA70-12']

print('欲しい素材は{}で入手可能です。'.format(sozai))


上記のようにdictを書き直してver1.0に組み込んだコードが
以下の通り

#2022-4-12作成
#ファイル名:素材集め表示GUI_ver1.0

#動作確認日:2022-4-13

import PySimpleGUI as sg

sg.theme('LightGreen4')


def get_stagename(sozai_name):
    """"素材名を受け取り、ステージ名を返す"""
    stage_dict ={'合成コール':['4-4'], 'マンガン':['4-7'], '碇石(ていせき)':['4-8'], 
    'RMA70-12':['4-9'], '人工ゲル':['S5-7'], 
    '素子結晶':['S5-9'], '合金':['6-12'], '中級源岩':['4-6'], '半自然溶剤':['9-18']}

    return stage_dict[sozai_name]


layout = [
        [sg.Text('素材名')],
        [sg.Combo(values=['合成コール','マンガン', '碇石(ていせき)', 'RMA70-12', '人工ゲル',
        '素子結晶', '合金',
        '中級源岩', '半自然溶剤'], default_value="選択してください。",size=(20, 1), key='SOZAI', enable_events=True)],
        [sg.Text('ステージ名')],
        [sg.Combo(values=[''], size=(20, 1), key='STAGENAME')],
        [sg.T('')],
        [sg.Button('Exit')]
        ]

window = sg.Window('素材集め表示GUI_ver1.0', size=(300, 300)).Layout(layout)

while True:
    event, values = window.read()
    if event is None or event == 'Exit':
        break

    if event == 'SOZAI':
            sozai = values['SOZAI']
    stagename = get_stagename(sozai)
    window.FindElement('STAGENAME').update(values=stagename)

window.close()

次回はステージ名が表示出来たので、ドロップ率、スタミナ消費を載せてみる
出来たら、素材の画面を表示出来るようにと段階を踏んでいく