この記事を読むことで、
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版
単行本(ソフトカバー)