はじめに
どーも、学生エンジニアのゆうき(@engieerblog_Yu)です。
今回は、Pythonで指スマプログラムで実装してみました。
今回のコードはちょっと難しめにゃ。
単純な指スマのコード
まずは、一番単純な指スマを実装していきます。
条件は以下です。
cpuと一対一
手は一つしかない
自分のターンから始まる
場にある指の数を当てることができたら勝利
以下コードです。
from random import randint
def yubisuma():
while 1:
print('あなたのターンです')
player1 = int(input('指を上げますか?(上げる:1,上げない:0):'))
cpu = randint(0,1)
predict = int(input('何本上がるだろう?'))
print('いっせーのーで')
print(str(predict)+'!')
print('me:'+str(player1))
print('cpu:'+str(cpu))
//player1の予想と場の指の数が一致したら勝利
if predict == cpu + player1:
print('あなたの勝ちです')
break
else:
print('ハズレです')
print('CPUのターンです')
player1 = int(input('指を上げますか?上げる:1,上げない:0'))
cpu = randint(0,1)
predict = randint(0,2)
print('いっせーのーで')
print('me:' + str(player1))
print('cpu:' + str(cpu))
//cpuが予想した数と場にある指の数が一致したら敗北
if predict == cpu + player1:
print('cpuは'+str(predict)+'を予想しました')
print('あなたの負けです')
break
else:
print('ハズレです')
if __name__ == "__main__":
yubisuma()
出力結果
あなたのターンです
指を上げますか?(上げる:1,上げない:0):1
何本上がるだろう?1
いっせーのーで
1!
me:1
cpu:0
あなたの勝ちです
ただし、これでは指スマを実装したと言えないと思うので、上記をベースに機能を追加していこうと思います。
コンピュータの数を選べるようにする
次にコンピュータの数を選べるようにしました。
条件は以下です。
cpuを何体でも追加できるようにする
手は一つしかない
自分のターンから始まる
場にある指の数を当てることができたら勝利
以下コーディング部分です。
from random import randint
class Player:
def __init__(self,name,yubi):
self.name = name
self.yubi = yubi
def yubi_set(self,yubi):
self.yubi = yubi
def yubisuma():
while 1:
cpu_number = int(input('CPUを何体追加しますか?:'))
print('あなたのターンです')
player1 = Player('player1',int(input('指を上げますか?(上げる:1,上げない:0):')))
player_predict = int(input('何本上がるだろう?'))
print('いっせーのーで')
print(str(player_predict)+'!')
print('me:'+str(player1.yubi))
sum = 0
//cpuが出した指の数を全て足す
for i in range(cpu_number):
yubi = randint(0,1)
print('cpu'+str(i)+':'+str(yubi))
sum = sum + yubi
//場にある指の数が予想と一致していれば勝利
if player_predict == sum + player1.yubi:
print('あなたの勝ちです')
return
else:
print('ハズレです')
print('CPUのターンです')
for i in range(cpu_number):
player1.yubi_set(int(input('指を上げますか?(上げる:1,上げない:0)')))
cpu_predict = randint(0,cpu_number+1)
print('いっせーのーで')
print(str(cpu_predict) + '!')
print('me:' + str(player1.yubi))
sum = 0
//cpuが出した指の数を全て足す
for i in range(cpu_number):
yubi = randint(0, 1)
print('cpu' + str(i) + ':' + str(yubi))
sum = sum + yubi
//cpuの予想が一致すればプレイヤーの負け
if cpu_predict == sum + player1.yubi:
print('あなたの負けです')
return
else:
print('ハズレです')
if __name__ == "__main__":
yubisuma()
出力結果
CPUを何体追加しますか?:3
あなたのターンです
指を上げますか?(上げる:1,上げない:0):1
何本上がるだろう?3
いっせーのーで
3!
me:1
cpu0:0
cpu1:1
cpu2:1
あなたの勝ちです
指2本でやってみる
最後に指2本でできるように実装しました。
やっと普通の指スマになったように思えます。
cpuは一体
手は二つあり、正解すると手を一個減らすことができ、なくなったら勝利
自分のターンから始まる
以下コーディング部分です。
from random import randint
class Player:
def __init__(self):
self.name = None
self.yubi = 0
self.life = 2
def __init__(self,name,yubi,life):
self.name = name
self.yubi = yubi
self.life = life
def yubi_set(self,yubi):
self.yubi = yubi
def yubisuma():
player1 = Player('player1',0,2)
cpu = Player('cpu',0,2)
while 1:
print('あなたのターンです')
//ライフが両手の場合
if player1.life == 2:
player1.yubi_set(int(input('指を上げますか?(両指を上げる:2,片指を上げる:1,上げない:0):')))
//ライフが片手の場合
if player1.life == 1:
player1.yubi_set(int(input('指を上げますか?(片指を上げる:1,上げない:0):')))
player_predict = int(input('何本上がるだろう?'))
print('いっせーのーで')
print(str(player_predict)+'!')
print('me:'+str(player1.yubi))
//cpuの手が両手の時、0~2の場合がある
if cpu.life == 2:
cpu.yubi_set(randint(0,2))
//cpuの手が片手の時、0~1の場合がある
if cpu.life == 1:
cpu.yubi_set(randint(0,1))
print('cpu:'+str(cpu.yubi))
//プレイヤーの予想が当たった時
if player_predict == cpu.yubi + player1.yubi:
//両手の場合はライフが1減る
if player1.life == 2:
print('正解です!一本減ります')
player1.life = player1.life - 1
//片手の場合は勝利する
else:
print('あなたの勝ちです')
return
else:
print('ハズレです')
print('CPUのターンです')
if player1.life == 2:
player1.yubi_set(int(input('指を上げますか?(両指を上げる:2片指を上げる:1,上げない:0):')))
if player1.life == 1:
player1.yubi_set(int(input('指を上げますか?(片指を上げる:1,上げない:0):')))
print('いっせーのーで')
//予想の最大の数はプレイヤーの指とcpuの指を合わせた数
cpu_predict = randint(0,player1.life+cpu.life)
print(str(cpu_predict) + '!')
print('me:' + str(player1.yubi))
//cpuのライフが2の時,0~2の場合がある
if cpu.life == 2:
cpu.yubi_set(randint(0, 2))
//cpuのライフが1の時,0,1の場合がある
if cpu.life == 1:
cpu.yubi_set(randint(0, 1))
print('cpu:' + str(cpu.yubi))
//cpuの予想が当たった時
if cpu_predict == cpu.yubi + player1.yubi:
//cpuの指が2の時、cpuのライフが1減る
if cpu.life == 2:
print('正解です!cpuの指が一本減ります')
cpu.life = cpu.life - 1
//cpuの指が1の時、cpuが勝利する
else:
print('あなたの負けです')
return
else:
print('ハズレです')
if __name__ == "__main__":
yubisuma()
出力結果
あなたのターンです
指を上げますか?(両指を上げる:2,片指を上げる:1,上げない:0):2
何本上がるだろう?3
いっせーのーで
3!
me:2
cpu:0
ハズレです
CPUのターンです
指を上げますか?(両指を上げる:2片指を上げる:1,上げない:0):0
いっせーのーで
2!
me:0
cpu:2
正解です!cpuの指が一本減ります
より良い指スマプログラム
より良い指スマプログラムを実装するために、以下の条件を追加しても良いと思います。
ターンをランダムに選べるようにする
指二つでも、cpuの数を選べるようにする
playerの数を増やせるようにする
入力を失敗した場合の例外処理
時間があれば、またより良いプログラムを更新したいと思います。
最後に、
・大学のPythonの講義が理解できないから単位取れるか不安
・プログラミングを使ったバイトやインターン、就職に興味がある
という方向けに「私はPythonを使えます!」ということができるくらいプログラミングを上達することができるおすすめ講座を紹介したいと思います。
Pythonの勉強方法【おまけ】
上記に当てはまった人はUdemyというオンラインプログラミング学習プラットフォームにあるこちらの講座がおすすめです。
上記の講座のコースを全て受ければ即Pythonエンジニアとして働くことができるくらいのスキルを身につけることができます。
上記の講座は豊富なコースがあるので単位やバイト、インターン程度であれば必要だと思った箇所だけ受けるなんてことも可能です。
私が受けたPythonの講座の中では最も良かったですし、この講座を受けるだけで本質的にプログラミングを理解することができると思います。
プログラミングについて予備知識が無いという前提の講座ですし、質問をすることもできるので自分のプログラミングスキルに自信がない方で、頑張ってみたいと思っていたらぜひ受けてみて欲しい講座となっています。
自分の未来に投資しよう。サイバーセール中はUdemyコースが最大90%OFF。おわりに
今回はPythonで指スマプログラムの作り方について解説しました。
ぜひ自分でアウトプットしてみてください!
最後まで読んでいただきありがとうございました。
他にもいろんな記事あるにゃ。
コメント