本シリーズでは、Ren'Pyユーザーが知っておきたいPythonの使い方をご紹介しています。
詳細および事前準備などは「00.はじめに」をご確認ください。
前回05.リストではリストの基本についてご紹介いたしました。
今回はリストを更に有効に活用するための方法をいくつかご紹介いたします。
準備
Ren'Pyのプロジェクトを1つ起動し、「Shift + O」を押してコンソールを開いておいてください。
append: リストに要素を追加する
前回例に挙げたリストのように
chara_name = ['ノーラ', 'シャイン', 'ユリアナ']
くらいの長さであればこの書き方でも問題ありません。
ですが、要素が長くなってくるとどうでしょうか。
こちらは各キャラクターの紹介文をリストに入れたものですが、
chara_intro = ['良家のご令嬢。花の世話が好きで、週末は庭師を手伝うこともある。', '王国の第五王子。手作りの王冠をいつも身に着けており、毎日手入れは欠かさない。', '良家のご令嬢。通称、聖女様。なかなか話を聞いてもらえない。']
著しく見づらいです。
ここで便利なのが「append」です。
appendはリストの末尾に要素を追加するときに使います。
「変数名.append( リストに追加したい要素 ) 」という形で使います。
先ほどの見づらいリストは、appendを使って次のように書くことができます。
コンソールに一行ずつ入力(コピー&ペースト)してみてください。
chara_intro = [] # 変数に空のリスト[]を与える
chara_intro.append('良家のご令嬢。花の世話が好きで、週末は庭師を手伝うこともある。')
chara_intro.append('王国の第五王子。手作りの王冠をいつも身に着けており、毎日手入れは欠かさない。')
chara_intro.append('良家のご令嬢。通称、聖女様。なかなか話を聞いてもらえない。')
chara_intro # 変数の中身の確認
変数の中身はどのようなリストになっていますでしょうか。
こちらが一通りコンソールに入力した例です。冒頭の見づらい例と、appendを用いた場合とで、同じ内容を変数に与えることができています。
remove: リストから要素を削除する
あまり使いませんが、おまけです。
リスト内の要素を取り除くときはremoveを使います。使い方はappendと同様です。
chara_name = ['ノーラ', 'シャイン', 'ユリアナ']
chara_name.remove('シャイン')
上記のようなコードを書くと
「 chara_name = ['ノーラ', 'ユリアナ'] 」となるはずです。
尚、リスト内に存在しない要素を削除しようとするとエラーが出ます。
len: リストの要素の数を数える
len(リスト)の形で使います。
下記の例であれば、chara_nameに3つの要素が含まれているため
len(chara_name) は 3 となります。
chara_name = ['ノーラ', 'シャイン', 'ユリアナ']
len(chara_name)
今回の基本パートはここまでです。お疲れ様でした。
この後の補足パートにある内容は通常のビジュアルノベルではあまり出番がありませんが、アクションや戦闘などゲーム性の高い要素を作品に盛り込む際には参考になるかと存じます。ご興味のある方は続けてご覧ください。
cf. 関連ページ
Ren'Py部屋 @crAsmビジュアルノベル情報部屋
お問合せフォーム - ご質問・ご要望はこちら
補足
ここからは補足パートです。
index: 要素の位置を返す
前回の記事(05.リスト)で次のような例を出しました。
キャラクター毎の名前・アルファベット名・カラーコードを次のように変数に入れると…
chara_name = ['ノーラ', 'シャイン', 'ユリアナ']
chara_name_e = ['nora', 'shine', 'juliana']
chara_color = ['#ccaaff', '#f0e678', '#ffbb88']
下記のiの値を変更するだけで、各変数(xxxx_tmp)にi番目のキャラクターの名前・アルファベット名・カラーコードを与えることができる、というものです。
i = 2
name_tmp = chara_name[i]
name_e_tmp = chara_name_e[i]
color_tmp = chara_color[i]
この「i番目」について。
キャラクターが多い場合、どのキャラクターが何番目か覚えておいたり、毎回確認したりするのは面倒かと思います。
# キャラクターが多い例(順番を覚えられない)
chara_name = ['田中','南','遠藤','園田','佐藤','阿部','渡辺','広田','和田','鈴木','高橋','新谷','西野']
ここで「index」を使います。
indexを使うと、探したい要素がリストの何番目にあるかを知ることができます。
「対象とするリスト.index( 探したいもの )」という形で使用します。
次の式をコンソールに一行ずつ入力してエンターを押してみてください。
chara_name = ['ノーラ', 'シャイン', 'ユリアナ']
i = chara_name.index('ユリアナ')
iの中身を見てみましょう。iに「2」が含まれていることを確認できましたでしょうか。元のリストを見ると確かに'ユリアナ'は先頭(0番目)から数えて2番目の位置に居ます。
従って、前述の例で「iの値を変更する」際に
i = 2
とダイレクトに数字を入力せずに
i = chara_name.index('ユリアナ')
のように置き換えて使うことができます。
sorted: 要素を昇順/降順に並べ替える
「 変数名 = sorted( ソートしたいリスト ) 」という形で使用します。
試しに、こちらをコンソールに一行ずつ入力してエンターを押してください。
list_example = [15, 32, 46, 92, 55, 87, 64]
list_sort = sorted(list_example)
list_sortの中身を確認すると、数字が小さい方から順に並んでいるはずです。
sortedを使用する際、リストの次に「reverse=True」を入れると逆順にソートできます。
list_sort2 = sorted(list_example, reverse=True)
list_sort2の中身は [92, 87, 64, 55, 46, 32, 15] となっているはずです。
sorted使用例(発展編)
以下はsortedの一歩踏み込んだ使用例です。発展編として紹介いたします。
例えば、作品中の戦闘システムに於いて「速さ」のパラメータが高いキャラクターから攻撃させたいとします。
そこで、キャラクターを速さ順に並べ替えてみます。
list_chara = []
# キャラクター名と速さ(数値)を含むリストをlist_charaに追加する
# ※リスト内のリストについては05.リストの補足2参照
list_chara.append(['太郎', 50])
list_chara.append(['次郎', 60])
list_chara.append(['花子', 45])
list_chara.append(['コブラ', 55])
list_chara # 中身の確認
# ソート
list_chara2 = sorted(list_chara, reverse=True, key=lambda x: x[1])
list_chara2 # ソート結果の確認
コンソールに入力すると次のようになります。一番最後の行を見ると、リストが速さ順にソートされていることが分かります。
このソートされたリストを使って攻撃の処理を行うことで「速さ順に攻撃させる」を実現できるかと存じます。
尚、
# ソート
list_chara2 = sorted(list_chara, reverse=True, key=lambda x: x[1])
にある「 key=lambda x: x[1] 」の部分は「リストの中のリストの、1番目の方に注目してソートする」という意味のおまじないだと思ってください。
(参考ページ: 【Python】2次元配列を二番目の要素に注目して降順にソートする [Qiita])
以上です。