【大学生向け】Pythonで指スマを実装してみました

プログラミング
スポンサーリンク

スポンサーリンク

はじめに

どーも、学生エンジニアのゆうき(@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講座はこちら

おわりに

今回はPythonで指スマプログラムの作り方について解説しました。

ぜひ自分でアウトプットしてみてください!

ゆうき
ゆうき

最後まで読んでいただきありがとうございました。

ねこすけ
ねこすけ

他にもいろんな記事あるにゃ。

コメント

タイトルとURLをコピーしました