この記事を読むことで、
・Pythonのリストの基礎練習
・リストと乱数の組み合わせ
・IF文の復習
・改行の使い方
・数値と文字列を同時に表示
について占いゲーム感覚で学べます。
今回作るリストは、「八王子(東京の西の方)」と「浦和(埼玉県)」を例にして、
八王子占いと、浦和占いのリストです。
Pythonでリスト(配列)の添え字を乱数にして、「あなたは何八王子か」という
占い診断ゲームを作って行きます。
八王子には、
・西八王子駅
・北八王子駅
・京王八王子駅
・(ふつうの)八王子駅
があります。
以下、プログラムの手順です。
手順
1:乱数を使うためにランダムモジュールをインポートする
2:駅名のリストを用意する
3:リストの要素数(長さを調べる)
4:リストの添字の乱数を発生させて変数indexに代入する
5:結果を「あなたは【北八王子駅】です」などと言った形式で表示させる。
では、各手順ごとに見ていきます。
手順1:乱数を使うためにランダムモジュールをインポートする
import random
手順2:駅名のリストを用意する
station=['西','北','京王','(ふつうの)']
手順3:リストの要素数(長さを調べる)を変数numに格納
num=len(station)
このリストの場合は、要素数の長さが4になります。
手順5:リストの添字の乱数を発生させて変数indexに代入する
index=random.randrange(num)
ここで、randrangeを使うことで0からリストの長さ未満の乱数を発生させます。
この場合、リストの長さが4になりますので、0から3までの乱数が発生します。
リストのインデックスは0から始まりますので、最後の添字はリストの長さ-1になります。
手順5:結果を例えば、「あなたは【北八王子駅】です」と言った形式で表示させる。
print('あなたは【'+str(station[index])+'八王子駅】です。\n')
最後に改行して見やすくなるように、「\n」を入れています。
これは、「バックスラッシュエヌ」と読みます。
バックスラッシュの「\」は、Macでは「option」キーと「¥」を同時に押します。
ここまでのコードをまとめます。
import random
station=['西','北','京王','(ふつうの)']
num=len(station)
index=random.randrange(num)
print('あなたは【'+str(station[index])+'八王子駅】です。\n')
実行結果です。
このようにランダムに何八王子なのか出力されます。
このコードを少しアレンジして、次は埼玉県にある浦和駅占いを作ってみます。
浦和には、浦和駅の他に「浦和」が着く駅名は、
・北浦和駅
・東浦和駅
・西浦和駅
・南浦和駅
・武蔵浦和駅
・中浦和駅
・浦和美園駅
と、こんなにあるんですね。
埼玉あるあるですが、待ち合わせの時は、「何浦和駅なのか」確認が必要です。
そこで、上記の八王子のプログラムを少し変更して、浦和リストのコードを作成します。
変更したのは2点です。
まず、リストです。
長さが8のリストでstation[0],station[1]・・・,station[7]までになります。
station=['東','西','南','北','武蔵','美園','中','(ふつうの)']
先ほどの八王子の例と異なる点は、例えば北浦和、南浦和でしたら、浦和駅の前に「北」とか「南」が付きますが、「浦和美園駅」の場合は「美園」は浦和の後に付きます。
その為、添字が5(くどいようですが、リストの添字は0から始まるので、リストの「6番目」である浦和美園駅は、添字は「5」になります。)の時を踏まえて下記の様にIFによる分岐する必要が生じます。
if index==5:#浦和美園駅の場合
eki='【浦和'+station[index]+'駅】'
else:
eki='【'+station[index]+'浦和駅】'
ここまでのコードをまとめます。
import random
station=['東','西','南','北','武蔵','美園','中','(ふつうの)']
num=len(station)
index=random.randrange(num)
if index==5:#浦和美園駅の場合
eki='【浦和'+station[index]+'駅】'
else:
eki='【'+station[index]+'浦和駅】'
print('あなたは'+eki+'です。\n')
実行結果です。
お疲れ様でした。ブレイクタイムPhotoは、
いたばし花火大会2025です。
ご精読ありがとうございました。
■ 独習Python ■
Kindle版
単行本(ソフトカバー)