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

この記事を読むことで、

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

の練習になります。

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

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

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

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

こちらをヒントにしてPythonでアレンジしてみました。

まず、私(東京都出身)がやってみたコチラの診断結果です。

この診断をPythonでプログラミングしてみました。
質問には半角の1か2を入れて回答するので標準入力を用います。
標準入力で数字を扱う場合は、このように記述します。

#標準入力で数字を入れる
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つだけだと本当に関東人か関西人か分かりづらいので、関東に該当する答えを選んだ場合は、関東人ポイント(eastPoint)が加算され、関西に該当する答えを選んだ場合は、関西人ポイント(westPoint)が加算され、どちらが多いか比較するプログラムに改良してみます。

まず、この部分で各ポイントを0で初期化します。

#関東人、関西人ポイントの初期化
eastPoint=0
westPoint=0

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

if ans==1:
  eastPoint+=1

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

#関東人か関西人かの判定
if eastPoint>westPoint:
  msg="\nあなたは【関東人】です。"
elif westPoint>eastPoint:
  msg="\nあなたは【関西人】です。"
else:
  msg="\nあなたは【ハイブリット】です。"

関東人か関西人かハイブリットかを変数msgに入れて、最後にprint文で出力することにより、printと書く分量を節約でき、コードが簡潔になりました。

それでは、質問1と質問2までのコードを掲載致します。

#関東人、関西人ポイントの初期化
eastPoint=0
westPoint=0


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

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

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


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

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

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

#関東人か関西人かの判定
if eastPoint>westPoint:
  msg="\nあなたは【関東人】です。"
elif westPoint>eastPoint:
  msg="\nあなたは【関西人】です。"
else:
  msg="\nあなたは【ハイブリット】です。"


print("あなたは"+msg+"\nあなたのeastPointは「"+str(eastPoint)+"」、westPointは「"+str(westPoint)+"」でした。")

関東人の場合の実行結果

関西人の場合の実行結果

ハイブリットの場合の実行結果

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

例えば、

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

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

今は質問が2つだけですが、今後質問が増える時にちょっとコードの量が多いので、ここの部分を関数にして見ました。加算するポイントを引数にして、関数add_pointで加算処理をしています。

#ポイントを加算
def addPoint(x):
  return x+1

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

呼び出し元です。

#回答に応じて関東人、関西人ポイントをそれぞれに加算
if ans==1:
  eastPoint=addPoint(eastPoint)
elif ans==2:
  westPoint=addPoint(westPoint)

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

#半角の1,2以外が押されてしまった場合
def other():
  print("半角数値の1か2を押して下さい。")

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

else:
  other()

更に、関東か関西か分岐をする処理の箇所で、この部分を関数judgeとして定義しました。

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

判定の呼び出し元です。

#関東人か関西人かの判定
msg=judge(eastPoint,westPoint)

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

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

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

#関東人、関西人ポイントの初期化
eastPoint=0
westPoint=0

#ポイントを加算
def addPoint(x):
  return x+1

#半角の1,2以外が押されてしまった場合
def other():
  print("半角数値の1か2を押して下さい。")

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


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

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

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


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

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

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


#関東人か関西人かの判定
msg=judge(eastPoint,westPoint)


print("あなたは"+msg+"\nあなたのeastPointは「"+str(eastPoint)+"」、westPointは「"+str(westPoint)+"」でした。")


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

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

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

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

Python自作サンプル集へ戻る

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

Pythonのリストで八王子占いと浦和占い

この記事を読むことで、

・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版
単行本(ソフトカバー)

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ずつ増加、ドラマの名台詞を表示「同情すんなら金をくれ!」

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

ループとIF文の中に論理演算子orで、「3時のヒロイン」登場!!

リストの基礎と長さlenで国内旅行気分でランダムに

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

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

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

リストの内包表記で演算とV6の名曲のソート(ループ基礎の総復習、昇順、降順)

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

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

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

辞書で日本史のお勉強

辞書で世界史のお勉強

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


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

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

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

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

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

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

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

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

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



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

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

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

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

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

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