【Pythonで割り算ゲームと関数】Adoさんの半端ならK.O…「踊♪」で剰余演算子を習得

この記事を読むことで

・割り算を使った簡単なゲームの作成

・関数と剰余演算子の使い方

・IF文による割り算の結果と勝敗の分岐

・標準入力の使い方

についての概要が掴めます。

割り算ゲームの題材として、歌い手のAdoさんの「踊」の歌詞を用います。
半端(=割り切れない時)ならK.O.されちゃいます(笑)


半端、つまり、割り算をして割り切れなかったら負け、割り切れたら勝ちという割り算ゲームを格闘ゲームをイメージして作りました。
余りが0で割り切れたなら勝ち、余りが出たら負けです。

ここで被除数(割られる数)を「9」とします。
変数は「dividend」を用います。

次に除数(割る数)を「2」とします。
変数は「divisor」を用います。

余りの変数を「remainder」とします。
ここで剰余演算子「%」を使用します。

#計算結果から余りを算出
remainder=dividend % divisor


余りは1になり、勝負は「負け」です。

勝敗結果の「負け」を変数「msg」に代入します。

#dividendは被除数(割られる数)
dividend=9

#divisorは除数(割る数)
divisor=2

#計算結果から余りを算出
remainder=dividend % divisor

#割り切れるかどうかの判定
if remainder==0:
  msg="YOU WIN!!!!!!!!!!!!!!!!!!!\n"
else:
  msg="YOU LOSE.....\n"

print(msg)

実行結果です。

あー、負けちゃいましたね。
では、

ここで被除数(割られる数)の変数「dividend」を「8」、
次に除数(割る数)の変数「divisor」を「4」とします。

今度は余り「remainder」が0になるので、msgには「勝利」のメッセージが代入されます。

そのコードと実行結果です。

#dividendは被除数(割られる数)
dividend=8 # ←変更

#divisorは除数(割る数)
divisor=4 # ←変更

#計算結果から余りを算出
remainder=dividend % divisor

#割り切れるかどうかの判定
if remainder==0:
  msg="YOU WIN!!!!!!!!!!!!!!!!!!!\n"
else:
  msg="YOU LOSE.....\n"

print(msg)


今度は、標準入力を使って、自在に数を指定出来るように致します。

#dividendは被除数(割られる数)を入力
print("dividend被除数(割られる数)を入力して下さい>>>",end='')
dividend=int(input()) # ←標準入力に

コードと実行結果です。
標準入力で指定して、12を4で割っているので、この勝負は勝ちです!

print('♪ 半端ならK.O......\n') #まずは歌って♪

#dividendは被除数(割られる数)を入力
print("dividend被除数(割られる数)を入力して下さい>>>",end='')
dividend=int(input()) # ←標準入力に

#divisorは除数(割る数)
print("divisor除数(割る数)を入力して下さい>>>",end='')
divisor=int(input()) # ←標準入力に

#計算結果から余りを算出
remainder=dividend % divisor

#割り切れるかどうかの判定
if remainder==0:
  msg="YOU WIN!!!!!!!!!!!!!!!!!!!\n"
else:
  msg="YOU LOSE.....\n"

print(msg)

細かい修正ですが、割られる数、割る数、余りを表示させます。
その実行結果です。

print('♪ 半端ならK.O......\n') #まずは歌って♪

#dividendは被除数(割られる数)を入力
print("dividend被除数(割られる数)を入力して下さい>>>",end='')
dividend=int(input()) # ←標準入力に

#divisorは除数(割る数)
print("divisor除数(割る数)を入力して下さい>>>",end='')
divisor=int(input()) # ←標準入力に

#計算結果から余りを算出
remainder=dividend % divisor

print("被除数(割られる数)="+str(dividend))
print("割る数="+str(divisor)+"\n")
print("余り【"+str(remainder)+"】\n")


#割り切れるかどうかの判定
if remainder==0:
  msg="YOU WIN!!!!!!!!!!!!!!!!!!!\n"
else:
  msg="YOU LOSE.....\n"

print(" 果たして勝負の結果は・・・・\n"+msg)

割り切れませんので、余り、半端なのでK.O.されて負けました。


次に、ここまで書いたコードを関数を使ってみます。
標準入力で割られる数、割る数を入力して、それらを引数として関数「dance_div」を呼び出します。

呼び出された「dance_div」の中で仮引数として、割られる数「x」と割る数「y」が入ります。
計算をして数を表示します。
余りによる分岐をして、勝敗結果の変数msgを戻り値として呼び出し元に戻します。

呼び出し元では変数「judgment」に代入します。

関数の部分です。

#割り算してあまりを返す関数
def dance_div(x,y):
  #計算結果から余りを算出
  remainder=x % y

  print(" 被除数(割られる数)="+str(x))
  print(" 割る数="+str(y)+"\n")
  print(" 余り【"+str(remainder)+"】\n")

  #割り切れるかどうかの判定
  if remainder==0:
    msg=" YOU WIN!!!!!!!!!!!!!!!!!!!\n"
  else:
    msg=" YOU LOSE.....\n"
  
  #関数の呼び出し元に代入する
  return msg    

コードと実行結果です。

print('♪ 半端ならK.O......\n') #まずは歌って♪

#割り算してあまりを返す関数
def dance_div(x,y):
  #計算結果から余りを算出
  remainder=x % y

  print("被除数(割られる数)="+str(x))
  print("割る数="+str(y)+"\n")
  print("余り【"+str(remainder)+"】\n")

  #割り切れるかどうかの判定
  if remainder==0:
    msg="YOU WIN!!!!!!!!!!!!!!!!!!!\n"
  else:
    msg="YOU LOSE.....\n"
  
  #関数の呼び出し元に代入する
  return msg    


#dividendは被除数(割られる数)を入力
print("dividend被除数(割られる数)を入力して下さい>>>",end='')
dividend=int(input()) 

#divisorは除数(割る数)
print("divisor除数(割る数)を入力して下さい>>>",end='')
divisor=int(input())

#関数を呼び出して勝敗結果を「judgment」に代入
judgment=dance_div(dividend, divisor)


print("果たして勝負の結果は・・・・\n"+judgment)


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

コスモスの花です。
しながわ花海道で撮影しました。

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

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

Python自作サンプル集へ戻る

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

Pythonでうるう年ループと西暦と和暦の変換

この記事を読むとことで、

・うるう年をIF文と剰余演算子%で判定
・Forループ
・リスト
・リストの末尾に要素を追加

・西暦と和暦の対応

について学習できます。
うるう年はプログラミングを学ぶ上で重要な論点です。

Pythonのコードで、開始年から終了年までの間のうるう年を調べて、和暦と対応付けます。

例えば、私が生れた1977年から、この記事を書いている2025年まで、うるう年が何回あったのか、その年の西暦と和暦の対応を付けて元号も表示出来ます。

まず、うるう年の定義ですが、

4で割れて且つ100で割れない、または400で割れる

になります。

2025年(令和7年)は4で割れないので、うるう年ではありません。
2100年は4で割れますが、100で割れるのでうるう年ではありません。

具体的に、1977年(昭和52年)から2025年(令和7年)までの期間のうるう年を見ていきます。

標準入力を使って、開始年に1977、終了年に2025を入力します。
まず、標準入力で、開始年(yearStart)と終了年(yearLast)を入力するコードです。

#開始年の入力
print("開始年を西暦で入力して下さい -->>",end="")
yearStart=int(input())

#終了年の入力
print("終了年を西暦で入力して下さい -->>",end="")
yearLast=int(input())

次に、うるう年だった場合にリストleapArrayに追加するコードです。

この処理で、うるう年の条件に当てはまる、「4で割り切れて100で割れない」または、400で割れると言う条件が当てはまったら、その年をリストleapArrayに追加します。

リストに追加する部分のコードです。

leapArray.append(i)

また、len(leapArray)で配列の長さを求めることによって、うるう年が何回あったのかをカウントします。

#開始年の入力
print("開始年を西暦で入力して下さい -->>",end="")
yearStart=int(input())

#終了年の入力
print("終了年を西暦で入力して下さい -->>",end="")
yearLast=int(input())

#うるう年を格納するリストを用意
leapArray=[]

#ループでうるう年に該当する年をリストに格納する
for i in range(yearStart,yearLast+1):
  if (i%4==0 and i%100!=0) or (i%400==0):
    leapArray.append(i)

#リストの長さはうるう年が合った回数になる
num=len(leapArray)


#うるう年が追加されたリストを表示させる
for year in leapArray:
  print(year)

print("うるう年は【"+str(num)+"】回ありました。")

ここまでの実行結果です。

最後に西暦年から和暦に変換する処理を行います。

昭和は1926年からなので、西暦年から1925を引きます。
平成は1989年からなので、西暦年から1988を引きます。
令和は2019年からなので、西暦年から2018を引きます。

西暦が格納されたyearから必要な年数を引いた分を変数japanに格納します。

便宜上、 昭和64年と平成31年はそれぞれ平成と令和の元年に致しました。

#開始年の入力
print("開始年を西暦で入力して下さい -->>",end="")
yearStart=int(input())

#終了年の入力
print("終了年を西暦で入力して下さい -->>",end="")
yearLast=int(input())

#うるう年を格納するリストを用意
leapArray=[]

#ループでうるう年に該当する年をリストに格納する
for i in range(yearStart,yearLast+1):
  if (i%4==0 and i%100!=0) or (i%400==0):
    leapArray.append(i)

#リストの長さはうるう年が合った回数になる
num=len(leapArray)


#うるう年が追加されたリストを西暦と和暦で表示する
for year in leapArray:
  if year>=2019:
    japan=year-2018
    wareki="令和"

  elif year>=1989 and year<2019:
    japan=year-1988
    wareki="平成"

  else:
    japan=year-1925
    wareki="昭和"  
    
  print(str(year)+"年 "+"("+wareki+str(japan)+"年)")

print("うるう年は【"+str(num)+"】回ありました。")

実行結果です。

うるう年については他の言語でも記事を書きました。
アセンブラ(フローチャート付き)
C言語

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

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

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

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

Python自作サンプル集へ戻る

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

モバイルバージョンを終了