日向坂46の2024年お正月「人狼ゲーム」でPythonの入門の入門のサンプルコードを作ってみました。

この記事では、2024年お正月に配信された、日向坂46の人狼ゲームの配信を元に、Pythonの入門の入門のサンプルコードを作ってみました。

こちらのYouTube動画です。

配信の感想は、アメブロの記事に、四期生の正源司 陽子(しょうげんじ・ようこ)さん推しの視点で書きました。

この記事で学習出来ることは、

・「=」代入と「==」比較演算子の違い

・無料で使えるオンラインのエディター紹介

・乱数とIF文で勝敗バトル

・Whileループと乱数で勝敗バトル

・↑記事に関数を導入

・Forループの基本的な使い方

・人狼役職の配列表示

・配列とForループ

・プログラミング学習コンテンツの紹介

です。
それでは、宜しくお願いします(=^ェ^=)


プログラミングの学習を始めた頃、「=」と「==」の違いで少し迷った時期がありました。

これについては、実際に手を動かしてコードを書いてみると、その疑問が氷解出来ました。

まず、「=」の代入ですが、変数roleに役職「市民」を代入して、print文で表示させます。

ご存知の方には恐縮ですが、コメントは「#」を付けます。

#変数roleに「市民」を代入
role='市民'

#役職を表示する
print(role)

実行結果はこちらです。

roleという変数に、役職「市民」が代入されて出力されました。
この後、roleに「裏切り者」を代入して出力します。

role='市民'

#別の役職、「裏切り者」を代入
role='裏切り者'

print(role)

実行結果です。

このように、代入では入れる値によっては上書きされるというイメージを持って頂けたらと思います。

一方で、「==」は、等しいかどうかの判定を行います。

role='人狼'

#boolで等しい時はTrue、そうでなければFalse
print(bool(role=='市民'))

「人狼」と「市民」は等しくないので、この様な実行結果になります。

IF文では、もしも「まっさらな市民」だとしたら自分は退場して、騎士などの役職持ちのメンバーに頑張ってもらいたい時は、例えばこの様に記述します。

role='市民'

#役職が市民だったら退場する
if role=='市民':
    print('退場して、騎士や霊媒師などに頑張ってもらう')

実行結果です。

ここでもし、「==」を「=」にしてしまうと、エラーが出てしまって、正しく実行されません。

7行目の所でエラーが出ています。

「=」の代入と、「==」の比較演算子の違いは、実際に書いてみるのが一番理解できました。

とはいえ、「書いてみて」と言われても、プログラミングって環境構築に結構な時間や手間が掛かりますよね。

そこで、すぐに試してコードを書いて実行できる、オンライン上で無料の開発環境IDEを次の項目で紹介します。


結論ですが、paiza.ioがオススメです。

「コード作成を試してみる(無料)」→ 「Python3」 からすぐに学習開始出来ます。

無料のオンラインエディタ(IDE)を調べたら10個ぐらい出てきて、どれを使おうか迷いましたが、

・登録なしですぐ使える
・日本語対応
・標準入力機能が使える

といった点から、paiza.ioをオススメします。

ここでは、標準入力を使ってみます。
paiza.ioの下のタブの「入力」を選択して、自分のやりたい役職を入力します。

この状態で下記のコードを実行します。
変数roleに標準入力で入れた役職が入り、それを出力します。

#標準入力で、やりたい役職を入力する
role=input()

#その役職を表示する
print('私が1番やりたい役職は【'+role+'】です。')

標準入力についてはここまでにして、次からはランダムな数字である乱数を使って、ゲーム的な要素をプログラミングに取り入れてみます。


ここから、乱数を使って、「市民チーム」と「人狼チーム」の勝敗を出力するといった、ゲーム的要素を入れたコードを書いて行きます。

1から10までの乱数を作って、5以上だったら人狼チームの勝ち、そうで無ければ市民チームの勝ちとします。

乱数は、import random で使える様になり、1から10という整数は random.randint(1,10)で生成します。
その乱数を変数numに代入します。

勝者を入れる変数は、winnerを使います。

#乱数を使える様にする
import random

#1から10までの乱数を作る
num=random.randint(1,10)

#5以上だったら人狼チームの勝利
if num>=5:
    winner='人狼'
else:
    winner='市民'

#勝敗結果を出力
print('勝者は【'+winner+'】チームです!!')

実行結果です。

何回か実行してみると、

実行結果が変わりました。
このままでも、どっちが勝ったのか分かるのですが、乱数の値が何だったのか知りたいので、numも表示させてみます。

#乱数を使える様にする
import random

#1から10までの乱数を作る
num=random.randint(1,10)

#5以上だったら人狼チームの勝利
if num>=5:
    winner='人狼'
else:
    winner='市民'

#勝敗結果を出力
print('勝者は【'+winner+'】チームです!!')
print(num)

あとは、1行で表示されるようにしたいのと、numもprint文の中に一緒に入れたいのですが、数値型の変数を文字列型と一緒に使う場合には、str(num)と書きます。

#乱数を使える様にする
import random

#1から10までの乱数を作る
num=random.randint(1,10)

#5以上だったら人狼チームの勝利
if num>=5:
    winner='人狼'
else:
    winner='市民'

#勝敗結果と乱数を一緒に出力
print('numが「'+str(num)+'」より、勝者は【'+winner+'】チームです!!')

実行結果です。


ループを使ってちょっとRPGっぽく、市民チームと人狼チームのHPを指定して、HPが0になったらループを抜けて負けにしてみます。

Whileループの継続条件は、両方のチームのHPが0以上の場合です。

攻撃されるとHPが減って、攻撃によってどれぐらいHPが減るのかを乱数attackで指定します。

flagが0だったら人狼チームの攻撃、1だったら市民チームの攻撃にします。

改行は「\n」を使います。

ちょっと複雑だな・・・と思われた方は、次の次のForループの所まで読み飛ばしても大丈夫です。

#乱数を使える様にする
import random


#市民チームと人狼チームのHP初期値を10にする
shimin_HP=10
jinro_HP=10

#whileループでバトル!!
while shimin_HP>0 and jinro_HP>0:

    #相手チームに与えるダメージは1から5までの乱数にする
    attack=random.randint(1,5)

    #0だったら人狼チームの攻撃、1だったら市民チームの攻撃にする
    flag=random.randint(0,1)

    if flag==0:
        print('人狼チームが市民チームに「'+str(attack)+'」のダメージを与えた')
        #攻撃された市民チームのHPがマイナスされる
        shimin_HP-=attack
    else:
        print('市民チームが人狼チームに「'+str(attack)+'」のダメージを与えた')
        #攻撃された人狼チームのHPがマイナスされる
        jinro_HP-=attack
    print('市民チームHP残:'+str(shimin_HP)+'\n人狼チームHP残:'+str(jinro_HP))
    print('----------')
    
#勝敗結果
if shimin_HP>jinro_HP:
    winner='市民'
else:
    winner='人狼'

print('勝者は【'+winner+'】チーム!!')  

実行結果は長いので省略させて頂きますm(_ _)m

コード自体が長くなってきて、メンテナンスの意味も込めて、次の項目ではバトルの部分と勝敗結果をdefを使って関数にして、関数をループ中やprint文の中から呼び出してみるようにコードを書き換えてみます。


バトルの部分を関数battleにして、whileループで呼び出し、勝敗結果をprint文の中で呼び出すコードに書き換えてみました。

#乱数を使える様にする
import random


#市民チームと人狼チームのHP初期値を10にする
shimin_HP=10
jinro_HP=10


#defで関数battleを定義する
def battle(shimin_HP,jinro_HP):
    
    #相手チームに与えるダメージは1から5までの乱数にする
    attack=random.randint(1,5)

    #0だったら人狼チームの攻撃、1だったら市民チームの攻撃にする
    flag=random.randint(0,1)

    if flag==0:
        print('人狼チームが市民チームに「'+str(attack)+'」のダメージを与えた')
        #攻撃された市民チームのHPがマイナスされる
        shimin_HP-=attack
    else:
        print('市民チームが人狼チームに「'+str(attack)+'」のダメージを与えた')
        #攻撃された人狼チームのHPがマイナスされる
        jinro_HP-=attack
    print('市民チームHP残:'+str(shimin_HP)+'\n人狼チームHP残:'+str(jinro_HP))
    print('----------')
    
    return shimin_HP,jinro_HP


while shimin_HP>0 and jinro_HP>0:
    #関数battleを呼び出している
    shimin_HP,jinro_HP=battle(shimin_HP,jinro_HP)    
    
#defで関数winを定義している
def win():
    if shimin_HP>jinro_HP:
        winner='市民'
    else:
        winner='人狼'
    return winner

#print文の中で関数winを呼び出している
print('勝者は【'+win()+'】チーム!!')


上記のWhileループの他にForループがあって、配列と一緒に使うのに便利です。
人狼ゲームの役職の配列を作ってその中身を取り出すのにForループを使って行きます。
その前に、Forループの基本的な使い方を確認します。

・0から4まで1ずつ加算

#0から4まで1ずつ加算
for i in range(5):
    print(i)

実行結果です。

もっと短いコードで書ける、内包表記を使うとこの様になります。

#0から4まで1ずつ加算
for i in range(5):
    print(i)

#内包表記
[print(i) for i in range(5)]

実行結果

・0から9まで2ずつ加算

#0から9まで2ずつ加算
for i in range(0,10,2):
    print(i)

#内包表記
[print(i) for i in range(0,10,2)]

実行結果

・5から1まで1ずつ減算

#5から1まで1ずつ減算
for i in range(5,0,-1):
    print(i)

#内包表記
[print(i) for i in range(5,0,-1)]

以上が、Forループの基本的な使い方です。


配列って、なんか難しそうだ・・・と思われた方は、配列とは団地みたいなものをイメージして下さい。

団地の0号室に「市民」が住んでいて、1号室に「霊媒師」が住んでいて・・・そんなイメージです。

#配列を定義
array=['市民','霊媒師','占い師','騎士','裏切り者','人狼']

#配列を出力
print(array)

出力結果です。

配列は0から始まるので、例えば「占い師」を表示させたい場合は、array[2]になります。

#配列を定義
array=['市民','霊媒師','占い師','騎士','裏切り者','人狼']

#配列を出力
print(array[2])

次の項目では、先ほどのループと配列を合わせた、プログラミングでは使用頻度の高いコードを掲載します。


ループを使って、配列の中身を取り出します。
通常の表記と、内包表記を併記します。

#配列を定義
array=['市民','霊媒師','占い師','騎士','裏切り者','人狼']

#Forループで配列の出力
for role in array:
 print(role)
 
#内包表記
[print(role) for role in array]

実行結果です。

この記事での学習はここまでで、Pythonの入門の入門が学習出来たと思います。
もっと詳しく勉強したい方は、下記の学習コンテンツがオススメです。
いきなり本を買っても良いのですが、出来れば動画学習コンテンツで多少知識を入れてからの方が、本当に必要なお買い物が出来ると思います。


初めてのプログラミング学習では、やはり講師の説明を聞きながら動画を見て、それを自分のPCで動かして試してみる・・・という方法がハードルが低いので、オススメの学習コンテンツを2つ紹介します。

どっちが良いのか迷われた方は、両方の無料レッスンを受けてみて、自分に合いそうな方を取り入れて下さい。

ドットインストール
paizaラーニング

長々と書いてしまいましたが、本当にご精読ありがとうございます。
大変、お疲れ様でした。

(一気に記事を書き上げたので、私も少し肩が凝ってきました 笑) ストレッチでもしようかな。)


ブレイクタイムPhotoは・・・

遊歩道の桜

地元の遊歩道の桜並木です。
私は東京の中でも、かなり辺鄙な所に住んでおります。
住めば都というように、写真の被写体としては面白い風景が至る所にあるので、写真を始めてから、「ここに住んでいて良かった」と思えてきました。

自己紹介
写真クリエイターとしての活動

Python で今日の運勢は??randintで星座占い♪

この記事では、

乱数を使って星座を占う

randintで1から12までの乱数を生成する

if、elif、elseの分岐


改行 \n

について学べます。

私は「おうし座」ですので、変数seizaのところに「おうし」と入れました。
ここにあなたの星座やお好きな星座を入れてみて下さい。

まずは、乱数を使った順位の結果のみのコードを掲載いたします。

import random

seiza="おうし"

#1から12までの変数を生成
num=random.randint(1,12)

print("今日の"+seiza+"座は"+str(num)+"位です")

実行結果です。

乱数なので、実行する度に順位が変わります。
最後のprint文のところで、文字列の中で数値である順位のnumを扱う場合には、str(num)としています。

randintと似たようなもので、randrangeがありますが、これはrandom.randrange(1,12)の様に書いた場合には、12「未満」になります。

次に、順位に応じてメッセージを表示する様に、if,elif,elseで分岐を行います。
メッセージは変数msgに格納します。

では、コードです。

import random

seiza="おうし"

#1から12までの変数を生成
num=random.randint(1,12)

print("今日の"+seiza+"座は"+str(num)+"位です")

if num==1:
  msg="超超超超超超超超超・・・おめでとう!!\n"
elif num<=3:
  msg="チョベリグ!\n"
elif num<=9:
  msg="ふつー\n"
elif num==11:
  msg="チョベリブ!\n"
else:
  msg="がび〜〜〜〜〜〜ん\nチョベリバ(涙)\n"

print(msg)

実行結果です。

演算子についてですが、
例えば「num==1」とイコールを2つ書くことによって、その順位(1位)と等しいということを表しています。
=と、一つだけだと代入になりますので。

elif文のnum<=3は3位以下(この場合、2位と3位)を表しています。
elseでそれ以外(この場合12位)です。

msgの中の「\n」バックスラッシュとnで、改行を表しております。

宜しかったら上記のコードをコピペしてアレンジしてみて下さい。


msgの所で「チョベリなんとか・・・」ってありますけれど、かつて「コギャル」と呼ばれた方が女子高生だった頃に流行った言葉です。

チョベリグ・・・超ベリーグッド
チョベリブ・・・超ベリーブルー
チョベリバ・・・超ベリーバッド

だったかな。懐かしいな。


お疲れ様でした。ブレイクタイムPhotoは、

千葉県柏市、あけぼの山農業公園のひまわりです。

ご精読ありがとうございました。

■ 独習Python ■
Kindle版
単行本(ソフトカバー)

Python自作サンプル集へ戻る

写真クリエイターとしての活動
自己紹介

Python奇数で推しにキッス!!(IF文|乱数|奇数と偶数|演算子)

この記事を読むことで、

初歩的なIF文

1から10までの乱数の生成

奇数、偶数の判定によって処理を分岐

余りを求める演算子の扱い

を学習出来ます。

奇数が出たら推しと夢の中でキスが出来、偶数だったら推しが他のファンとキスする夢を見るといった分岐処理のプログラミングです。

奇数か偶数かの判定は、2で割って余りが1だったら奇数、そうでないなら偶数とします。多くの言語で余りは剰余演算子「%」を使って求められます。

これから書いていくPythonでも「乱数%2==1」でしたら奇数になります。

ここではファイル名を「oddkiss」にします。
奇数は英語で「odd」です。ちなみに偶数はevenです。
この辺り、基本情報技術者試験を受ける方は覚えておいて損はないと思います。

乱数は、random.randint(始め,終わり)を使います。

コードはコチラになります。

#ランダムモジュールをインポートする
import random

#乱数numの範囲を1から10までとする
num=random.randint(1, 10)

#割り算を行い、奇数か偶数での分岐処理をする
if num%2==1:
  word="奇数です。推しとキスをする夢を見た。"
else:
  word="偶数です。他のファンが推しとキスをする夢を見た。"

print(word)

「==」とイコールが2つ続いているのは、1つだと代入を意味してしまうので、==と2つかくことで等しいという条件を指定しています。

実行結果です。

奇数の場合と偶数の場合で両方実行出来ました。
更に、numはどんな数なのかも表示させるようにコードを少し変更します。

print('num='+str(num)+'で、'+word)

この部分に’ ‘で文字列、+で連結、数字を文字列の中で使うのに「str」を使っています。

#ランダムモジュールをインポートする
import random

#乱数numの範囲を1から10までとする
num=random.randint(1, 10)

#割り算を行い、奇数か偶数での分岐処理をする
if num%2==1:
  word="奇数です。推しとキスをする夢を見た。"
else:
  word="偶数です。他のファンが推しとキスをする夢を見た。"

print('num='+str(num)+'で、'+word)

実行結果です。

では何度か実行してみた結果です。

ここで、自分の推しが表示されると一層楽しめそうなので、変数OSHIに標準入力を使って少しプログラムを改変しました。

#ランダムモジュールをインポートする
import random

#乱数numの範囲を1から10までとする
num=random.randint(1, 10)

#あなたの推しの名前を入力して下さい。←【追加】
print('あなたの推しの名前を入力して下さい>>>>>',end="")
OSHI=input()

#割り算を行い、奇数か偶数での分岐処理をする ←【追加修正】
if num%2==1:
  word="奇数です。【"+OSHI+"さん】が私とキスをする夢を見た。"
else:
  word="偶数です。【"+OSHI+"さん】が他のファンとキスをする夢を見た。"

print('num='+str(num)+'で、'+word)


お疲れ様でした。ブレイクタイムPhotoは、

横浜マリンタワーから撮影した夜景です。

ご精読ありがとうございました。

■ 独習Python ■
Kindle版
単行本(ソフトカバー)

Python自作サンプル集へ戻る

写真クリエイターとしての活動
自己紹介

PythonでIF文使って関西人度と関東人度診断をチェック

この記事を読むことで、

IF文
標準入力
比較演算子
関数

の練習になります。

例として「関西人度、関東人度」診断を用います。

標準入力や比較演算子を使い、あなたの関東人ポイントがいくつで、関西人ポイントがいくつで、どちらが多いか比較して【関東人】または【関西人】を判定します。

コードのメンテナンス目的で関数の基本的な説明も掲載しました。

参考にした診断はコチラです。
あなたが「関東人」か「関西人」かを見極める10の質問 隠しても無駄だぞ!!

こちらの10問のうち、7問を使って、プログラミングに出来そうな所をPythonにアレンジしてみました。

まず、私がやってみたコチラの診断結果です。

ここまでの流れをPythonでプログラミングしてみました。
標準入力で数字を扱う場合は、このように記述します。

#標準入力で数字を入れる
ans=int(input())

これで、ansに標準入力で1または2の解答を入力します。
それでは、1つ分の診断プログラムを作成致します。

#関東人・関西人の質問
print("あなたが人に道を教える時は?")
print("1:「この横断歩道を渡って・・・」\n2:「そこをガ〜〜〜〜〜って行って・・・」")
print("あなたの回答>>>>>",end="")

#標準入力で数字を入れる
ans=int(input())

#関東人・関西人の分岐処理
if ans==1:
  print("あなたは【関東人】です。")
elif ans==2:
  print("あなたは【関西人】です。")
else:
  print("半角数値の1か2を押して下さい。")

質問の部分のprint文に使われている「\n」は改行はです。
「\」のバックスラッシュは、macの場合は「option」+「¥」です。

また、

if ans==1:

と「==」としているのは、「=」一つだけだと代入になってしまうので、ansが1と等しいか判定する際には、「==」とイコールを2つ並べて書きます。

このコードでは、「あなたが道を教える時は?」と言う質問に対して、
「1:この横断歩道を渡って・・・」と答えるか、
「2:そこをガ〜〜〜〜って行って・・・」と答えるかで処理が分岐されます。
1または2の該当する方を選びますが、それ以外の回答を選んだ場合のメッセージも表示されています。

1を選んだ場合

2を選んだ場合

それ以外(999)などを押してしまった場合

質問が1つだけだと本当に関東人か関西人か分かりづらいので、関東に該当する答えを選んだ場合は、関東人ポイント(p_east)が加算され、関西に該当する答えを選んだ場合は、関西人ポイント(p_west)が加算され、どちらが多いか比較するプログラムに改良してみます。

まず、p_eastとe_westを0で初期化します。

p_east=0
p_west=0

回答に応じて点数を加算する処理

#回答に応じて関東人、関西人ポイントのそれぞれに加算
if ans==1:
    p_east+=1  
elif ans==2:
    p_west+=1
else:#ポイントを加算する関数
def add_point(x):
    return x+1

    print('数値の1か2を押して下さい。')    

このコードの場合は、答えが1だったら関東人ポイントを

p_east+=1

で、「+=」と、加算代入演算子で使って加えています。

また、トータルで関東人ポイントと関西人ポイントのどちらが多いかの計算結果による判定のコードはこちらになります。
同じ場合は「ハイブリッド」にしました。

変数msgに入れて、最後にprint文で出力することにより、printと書く分量を節約でき、コードが簡潔になりました。

if p_east>p_west:
    msg='あなたは【関東人】です'
elif p_west>p_east:
    msg='あなたは【関西人】です'
else:
    msg='あなたは【ハイブリッド】です'

print(msg)

ここまでを踏まえて、質問の数を2つにします。

#関東人ポイント、関西人ポイントを初期化
p_east=0
p_west=0


#質問1
print('あなたが道を教える時は?')
print('1:「この横断歩道を渡って・・・」\n2:「そこをガ〜〜〜〜〜って行って・・・」')
print('あなたの解答>>>>',end="")
ans=int(input())

#回答に応じて関東人、関西人ポイントのそれぞれに加算
if ans==1:
    p_east+=1  
elif ans==2:
    p_west+=1
else:
    print('数値の1か2を押して下さい。')    



#質問2
print('納豆は?')
print('1:「くさい!!」\n2:「美味しい」')
print('あなたの解答>>>>',end="")
q=int(input())

#回答に応じて関東人、関西人ポイントのそれぞれに加算
if q==1:
    p_west+=1
elif q==2:
    p_east+=1
else:
    print('数値の1か2を押して下さい。')

#関東人ポイントと関西人ポイントのどちらが多いか
if p_east>p_west:
    msg='あなたは【関東人】です'
elif p_west>p_east:
    msg='あなたは【関西人】です'
else:
    msg='あなたは【ハイブリッド】です'

print(msg)

これでもプログラムは動くのですが、このコードをじっくりと眺めてみて、ちょっと冗長な部分がございました。

例えば、

#回答に応じて関東人、関西人ポイントのそれぞれに加算
if q==1:
    p_west+=1
elif q==2:
    p_east+=1
else:
    print('数値の1か2を押して下さい。')

と、それぞれのポイントを加算している箇所がございます。

質問が2つだけならまだしも、今後質問が増える時にちょっとコードの量が多いので、ここの部分を関数にして見ました。

加算するポイントを引数にして、関数add_pointで加算処理をしています。

#ポイントを加算する関数
def add_point(x):
    return x+1

xの中に加算するポイントを入れて、returnで1加えた値を戻り値としています。

呼び出し元です。

#回答に応じて関東人、関西人ポイントのそれぞれに加算
if ans==1:
    p_east=add_point(p_east)
elif ans==2:
    p_west=add_point(p_west)

また、1か2以外の数字を入れた場合は、関数otherを定義しました。

#1か2以外を入力した場合のエラーメッセージ
def other():
    print("数値の1か2を押して下さい。")

呼び出し元です。
(elseの所)

#回答に応じて関東人、関西人ポイントのそれぞれに加算
if ans==1:
    p_east=add_point(p_east)
elif ans==2:
    p_west=add_point(p_west)
else:
    other()

更に、関東か関西か分岐をする処理の箇所で、

#関東人ポイントと関西人ポイントのどちらが多いか
if p_east>p_west:
    msg='あなたは【関東人】です'
elif p_west>p_east:
    msg='あなたは【関西人】です'
else:
    msg='あなたは【ハイブリッド】です'

この部分を関数judgeとして定義しました。

#関東か関西か判定
def judge(e,w):
    if e>w:
        return "あなたは【関東人】です。"
    elif w>e:
        return "あなたは【関西人】です。"
    else:
        return "あなたは【ハイブリッド】です。"

呼び出し元です。

#関東人ポイントと関西人ポイントのどちらが多いか
msg=judge(p_east,p_west)

関数judgeを呼び出す際に引数として、p_eastとp_westを入れて、戻り値としてmsgにポイントが多い方の文字列が入る様にしました。

流れとして、呼び出し元のp_eastが関数judgeの仮引数のeに入り、呼び出し元のp_westが関数judgeの仮引数のwに入って、関東、関西、ハイブリッドの判定をして、その文字列を戻り値として呼び出し元のmsgに入ります。

このゲームで自分は関東ポイントがどれぐらいか、関西ポイントはどうなのか、といった分かりやすさを追及したいので、下記の行を追記しました。

print('あなたの【関東人ポイント】は【'+str(p_east)+'】で、【関西人ポイント】は【'+str(p_west)+'】です。')

ここまでをまとめたコードがこちらになります。

#関東人ポイント、関西人ポイントを初期化
p_east=0
p_west=0

#ポイントを加算する関数
def add_point(x):
    return x+1

#1か2以外を入力した場合のエラーメッセージ
def other():
    print("数値の1か2を押して下さい。")


#関東か関西か判定
def judge(e,w):
    if e>w:
        return "あなたは【関東人】です。"
    elif w>e:
        return "あなたは【関西人】です。"
    else:
        return "あなたは【ハイブリッド】です。"

#質問1
print('あなたが道を教える時は?')
print('1:「この横断歩道を渡って・・・」\n2:「そこをガ〜〜〜〜〜って行って・・・」')
print('あなたの解答>>>>',end="")
ans=int(input())

#回答に応じて関東人、関西人ポイントのそれぞれに加算
if ans==1:
    p_east=add_point(p_east)
elif ans==2:
    p_west=add_point(p_west)
else:
    other()    



#質問2
print('納豆は?')
print('1:「くさい!!」\n2:「美味しい」')
print('あなたの解答>>>>',end="")
q=int(input())

#回答に応じて関東人、関西人ポイントのそれぞれに加算
if q==1:
    p_west=add_point(p_west)
elif q==2:
    p_east=add_point(p_east)
else:
    other()

#関東人ポイントと関西人ポイントのどちらが多いか
msg=judge(p_east,p_west)


print('あなたの【関東人ポイント】は【'+str(p_east)+'】で、【関西人ポイント】は【'+str(p_west)+'】です。')

print(msg)

流石に質問が2つだけだと寂しいので、上記の診断から7つ選んでコードを書きました。
各質問に対する回答の標準入力は、q1,q2,・・・,q7まで用意して、それぞれの回答により関東人ポイントと関西人ポイントの加算処理へと分岐させています。

では、適当に選んでみますね。

コードはこちらです。

#関東人ポイント、関西人ポイントを初期化
p_east=0
p_west=0

#ポイントを加算する関数
def add_point(x):
    return x+1

#1か2以外を入力した場合のエラーメッセージ
def other():
    print("数値の1か2を押して下さい。")


#関東か関西か判定
def judge(e,w):
    if e>w:
        return "あなたは【関東人】です。"
    elif w>e:
        return "あなたは【関西人】です。"
    else:
        return "あなたは【ハイブリッド】です。"

#質問1
print('いなりずしと言えば?')
print('1:楕円形\n2:三角形')
print('あなたの解答>>>>',end="")
ans=int(input())


#回答に応じて関東人、関西人ポイントのそれぞれに加算
if ans==1:
    p_east=add_point(p_east)
elif ans==2:
    p_west=add_point(p_west)
else:
    other()    



#質問2
print('よく見かける揚げせんべいは?')
print('1:ぼんち揚げ\n2:歌舞伎揚げ')
print('あなたの解答>>>>',end="")
ans=int(input())

#回答に応じて関東人、関西人ポイントのそれぞれに加算
if ans==1:
    p_west=add_point(p_west)
elif ans==2:
    p_east=add_point(p_east)
else:
    other()
    

#質問3
print('コーヒーなどに付いてくるプラスチックの小さい白い容器は?')
print('1:ミルク\n2:フレッシュ')
print('あなたの解答>>>>',end="")
ans=int(input())


#回答に応じて関東人、関西人ポイントのそれぞれに加算
if ans==1:
    p_east=add_point(p_east)
elif ans==2:
    p_west=add_point(p_west)
else:
    other()    

    
#質問4
print('長さを測るものは?')
print('1:ものさし\n2:定規')
print('あなたの解答>>>>',end="")
ans=int(input())

#回答に応じて関東人、関西人ポイントのそれぞれに加算
if ans==1:
    p_west=add_point(p_west)
elif ans==2:
    p_east=add_point(p_east)
else:
    other()

#質問5
print('「ユニバーサル・スタジオ・ジャパン」は?')
print('1:USJ\n2:ユニバ')
print('あなたの解答>>>>',end="")
ans=int(input())

#回答に応じて関東人、関西人ポイントのそれぞれに加算
if ans==1:
    p_east=add_point(p_east)
elif ans==2:
    p_west=add_point(p_west)
else:
    other()    

#質問6
print('桜餅と言えば?')
print('1:まんじゅう型\n2:クレープ型')
print('あなたの解答>>>>',end="")
ans=int(input())

#回答に応じて関東人、関西人ポイントのそれぞれに加算
if ans==1:
    p_east=add_point(p_east)
elif ans==2:
    p_west=add_point(p_west)
else:
    other()

#質問7
print('いっせーの、')
print('1:「せっ!」\n2:「でっ!」')
print('あなたの解答>>>>',end="")
ans=int(input())


#回答に応じて関東人、関西人ポイントのそれぞれに加算
if ans==1:
    p_east=add_point(p_east)
elif ans==2:
    p_west=add_point(p_west)
else:
    other()



#関東人ポイントと関西人ポイントのどちらが多いか
msg=judge(p_east,p_west)


print('あなたの【関東人ポイント】は【'+str(p_east)+'】で、【関西人ポイント】は【'+str(p_west)+'】です。')

print(msg)

お疲れ様でした。

ここまでをまとめると、このプログラムでは、関東ポイントの変数p_eastと、関西ポイントの変数p_westを0で初期化して選択肢ごとに分岐することにより、どちらかのポイントを加算する処理を通してIF文をゴリゴリと学んできました。
また、コードの冗長な部分を関数を使ってメンテナンスも行いました。

読んで下さってありがとうございます。

■ 参考文献の紹介 ■
じっくり丁寧にPythonを学びたい方向けの書籍を紹介します。

Pythonを基礎から中級程度まで丁寧に学びたい方におすすめの書籍です。
まずはpaizaラーニングなどの学習コンテンツで1〜2巡(苦手な所は納得がいくまで何巡でも)してからこの本で学ぶと、自分の学習状況をブログなどでアウトプット出来るようになり、また、エラーなどの不明点を調べられる力もついていきます。

Python自作サンプル集へ
これからプログラミングを学ぶ方へ
プログラミングと資格へ
基本情報技術者試験トップへ
自己紹介

Pythonで今日のラッキーカラーを乱数で作ってみた

この記事では、乱数を使って今日のラッキーカラーを求める自作のサンプルプログラムを紹介します。

0から70までの乱数を発生させて変数numに格納します。
(7で割った時の余りによって、ラッキーカラーが変わります。)

その乱数numを7で割った余りを変数remに格納して、IF文の中でラッキーカラーを変数colorに格納します。

乱数は、1行目からのimport randomによって使えるようになり、random.randintで発生させたい数字を入力します。

#乱数を発生させる準備
import random

# 変数numに0から70までの乱数を発生させる
num=random.randint(0, 70)

#乱数numを7で割った余りを変数remに格納する
rem=num%7

#numを7で割った余りremによってIF文で分岐させて今日のラッキーカラーを求める
if rem==0:
  color='赤'
elif rem==1:
  color='黄'
elif rem==2:
  color='青'
elif rem==3:
  color='ピンク'
elif rem==4:
  color='グレー'
elif rem==5:
  color='黒'
else:
  color='紫'

#結果の出力 数字をprint文で使う場合はstr(数字の変数)
print("乱数「"+str(num)+"」を7で割った余りは「"+str(rem)+"」です。")
print("今日のラッキーカラーは【"+color+"】です。")    

では、実行して見ます。

何度か実行して見た所、ランダムに数が変わって色が求められました。


これでも動くのですが、分岐が多いので、IFよりもmatchを使った文の方が分かりやすいです。(他の言語でいう、switch文)

import random

num=random.randint(0,70)
rem=num%7

print(rem)

match rem:
    case 0:
    color='赤'

    case 1:
    color='黄'

    case 2:
    color='青'

    case 3:
    color='ピンク'

    case 4:
    color='グレー'

    case 5:
    color='黒'

    case _:
    color='紫'

print("乱数が「"+str(num)+"」で割った余りが「"+str(rem)+"」だにゃん!!") 

print("今日のあなたのラッキーカラーは、【"+color+"】です!(=^ェ^=)")

お疲れ様でした。ブレイクタイムPhotoは、

いたばし花火大会2025です。

ご精読ありがとうございました。

■ 独習Python ■
Kindle版
単行本(ソフトカバー)

Python自作サンプル集へ戻る

写真クリエイターとしての活動
自己紹介

Python自作サンプル集

「プログラミングをもっとカジュアルに!!」をコンセプトに、国民的アニメ、流行や趣味、ギャグなどを取り入れて、Pythonのサンプルプログラムを自作してみました。

Python環境構築(Windows)とHello World

Python環境構築(Mac)とHello World及び計算

乱数で奇数が出たら推しとキッス

乱数randintで星座占い

乱数で今日のラッキーカラーを作ってみた。

IF文で関東人度・関西人度診断チェック

ループの基礎(前半)2ずつ増加、ドラマの名台詞を表示「同情すんなら金をくれ!」

ループの基礎(後半)内包表記とドラマふてほど「宜保愛子じゃない!!」

ループと論理和orで、「3時のヒロイン」登場!!

乱数randrangeでラーメン激戦区のメニューリスト

PythonのリストをループとIF文、enumerate関数でサザエさんキャラを取り出してみた。

リストで八王子占いと浦和占い(埼玉あるあるについても)

うるう年ループ(IF文、Forループ、リストに追加の復習)

リストの内包表記で演算とV6の名曲のソート

辞書で「サザエさん」のキャラクターを職業別に取り出し

辞書をループで「サザエさん」のキャラクターを表示

リスト・辞書を並び替えてsort、sortedの処理時間を計測して[Alexandros]の曲の長さ順に表示

辞書で日本史のお勉強

辞書で世界史のお勉強

辞書で化学(周期表・元素記号)のお勉強


二次元リスト ドット絵でインベーダーを書いてみた。

二次元リスト ドット絵で市松模様を書いてみた

二次元リストでまじ卍(Python改行も)

【Python関数初心者向け!!】関数を「カレーライス」で覚えて平面図形の面積を求めてみる(長方形、三角形、台形)とプログラミング英語

【Python関数初心者向けの関数ドリル!!】関数を立体図形で使いこなす!ピラミッドを作れ!(立方体・直方体・円柱・三角錐・四角錐・円錐)

円周率で関数の呼び出し、累乗・円の面積・球の体積・円周

半端ならK.O.踊っ(割り算ゲーム)

正義のヒーロー「変なおじさん!」(関数デフォルト値)

ビーファーストBE:FIRSTの平均年齢を辞書、リスト、関数を使って求めてみた



【Pythonクラス爆速理解!!】昭和ギャグから学ぶクラスとインスタンス「月曜日はウンジャラゲ♪」

【Pythonクラス爆速理解!!】「BE:FIRST」のメンバーのプロフィール(名前・出身地・身長)でクラスを学習

【Pythonクラス爆速理解!!】「NiziU」のメンバーカラーでクラスを学習

クラスを使ってアロマオイルの値段を計算する

【Pythonクラスの継承とメソッドのオーバーライド】HiHiJet井上瑞稀さん美 少年 浮所飛貴さんのバク宙

プログラミングのアンケートにご協力頂ける方はこちらのフォームで勉強法など色々と教えて下さい。