@aki1010

Are you sure you want to delete the question?

Leaving a resolved question undeleted may help others!

2次元配列からのランダム抽出について(python)

解決したいこと

2次元配列からランダムに名前を抽出したい

例)
pythonでモンスターの能力を2次元配列で作成し
①2つランダムにモンスター名のみを表示したい。
どのようにランダム関数を使えばいいのかわかりません。
教えていただけると嬉しいです。

該当するソースコード

import random
monster_list = [
  #名前,HP,攻撃力,魔力
['スライム', 3, 5, 2],
['魔導士', 30, 28, 40],
['ゴースト', 42,56,35],
['竜王', 130,140,200],    
]

自分で試したこと

for i in range(2):
x = random.choice(monster_list)
print(x)

0 likes

4Answer

ランダム抽出の部分は問題なく動いていると思います。
モンスター名のみ表示したいとなると、以下のようになると思います。

import random
monster_list = [
  #名前,HP,攻撃力,魔力
['スライム', 3, 5, 2],
['魔導士', 30, 28, 40],
['ゴースト', 42,56,35],
['竜王', 130,140,200],    
]

for i in range(2):
    x = random.choice(monster_list)
    print(x[0])
実行結果
ゴースト
竜王

また、変数名はわかりやすくmonster = random.choice(monster_list)などとした方が親切かもしれません。

3Like

Comments

  1. @aki1010

    Questioner

    回答ありがとうございます。
    最後のprint内の書き方勉強になりました。

コードのうち

x = random.choice(monster_list)

の時点でモンスターのステータスが入っている1次元配列xが取得できているので,後はその1次元配列xのうち,モンスター名が格納されている0番目を表示してあげれば良いのでは?

2次元配列が扱いづらいというのなら,dataclassを使って

from dataclasses import dataclass
import random

@dataclass
class Monster:
    name: str
    hp: int
    power: int
    mp: int

monster_list = [
    #名前,HP,攻撃力,魔力
    Monster('スライム', 3, 5, 2),
    Monster('魔導士', 30, 28, 40),
    Monster('ゴースト', 42, 56, 35),
    Monster('竜王', 130, 140, 200),
]

for i in range(2):
    x = random.choice(monster_list)
    print(x.name)

とするのも一手です.実行例を下記リンクに置いておきます.

2Like

Comments

  1. @aki1010

    Questioner

    回答ありがとうございます。
    このような書き方があることを初めて知りました。
    参考にさせていただきます。
import random
for i in random.shuffle(monster_list):
    print(i[0])

シャッフルする方法はどうでしょうか
pythonらしく x=[内包表記] がエレガントかもしれません

1Like

Comments

  1. @aki1010

    Questioner

    回答アありがとうございます。
    random.shuffle 初めて知りました。
    最後のprint関数の書き方も知りませんでした。
    勉強になります。

こんな書き方もできます。

for i in range(2):
    name, hp, ap, mp = random.choice(monster_list)
    print(name)
1Like

Comments

  1. @aki1010

    Questioner

    回答がありがとうございます。
    2行目の左側の書き方を初めて知りました。
    参考にさせていただきます。

Your answer might help someone💌