LoginSignup
1
6

More than 5 years have passed since last update.

python学習1ヶ月程の初学者がアウトプットしてみた

Posted at

一応動くものが作れたので
Qiitaでアカウントを作って
とりあえず(年が明ける前に)公開するというステップを踏みたいと考えました。

Qiitaの決まり事などまだ把握しきれてない状態ですので、失礼があれば申し訳ない。

というわけで早速。

作成したもの

ビンゴゲーム
・5*5マス
・出てくる数字は1〜75
・最短でビンゴが成立するであろう5個の数字が出て以降は数字が2個出る

コード記述の経緯

・「ビンゴゲームをやる際に後半なかなかビンゴが出なくてグダって時間がかかる」という不満があった

・学習の半ばながら、上記の不満からアイディアが浮かび、
 「今の知識量でも作成可能では?」と感じたので、とりあえずトライしてみた。

環境その他

ざっくり表記すると
Mac
python3.7
pycham
Anaconda Navigator

知識の習熟度(自己判断)

・プログラミングは全くの未経験
・progateのpythonコース修了
・Udemyのpython3に関する講義を少しかじる
・総じて学習開始から1ヶ月ほどの独学



import random

# 既に出た数字のリストをald_numsとする
ald_nums = []


def start(x):
    if 0 <= x <= 9:
        return True
    return False


def bingo(x):
    print(x)
    ald_nums.append(x)


while len(ald_nums) < 75:
        try:
            s = input("0〜9の数字を入力するとビンゴを開始します:")
            if start(int(s)):
                num = random.randint(1, 75)
                # numが被りで出力されることを回避する
                if num not in ald_nums:
                    # 5*5のビンゴの場合、最短ビンゴ発生後に一定の確率で2枚出力するような形にする
                    if len(ald_nums) < 5:
                        bingo(num)
                        print(ald_nums)
                    # 出力されたnum%5を確率に置き換えて、2回出力の場合分けをする、予定
                    else:
                        bingo(num)
                        print("ダブルブースト発生!!")
                        num2 = random.randint(1, 75)
                        if num2 not in ald_nums:
                            bingo(num2)
                            print(ald_nums)
                        else:
                            num2_another = random.randint(1, 75)
                            while num2 == num2_another:
                                num2_another = random.randint(1, 75)
                            else:
                                bingo(num2_another)
                                print(ald_nums)
                else:
                    # num += 1 でもいいかと思ったが、
                    # 一応出力数値が75までのビンゴ想定なので、76が表示されるとその一回表示する分ゲーム時間が長くなる。
                    # それはダブルブーストで時間短縮するという趣旨に反するので改めてrandomで数を取得する
                    num_another = random.randint(1, 75)
                    if len(ald_nums) < 5:
                        while num == num_another:
                            num_another = random.randint(1, 75)
                        else:
                            bingo(num_another)
                            print(ald_nums)
                    else:
                        bingo(num_another)
                        print("ダブルブースト発生!!")
                        num_another2 = random.randint(1, 75)
                        if num_another2 not in ald_nums:
                            bingo(num_another2)
                            print(ald_nums)
                        else:
                            num_another22 = random.randint(1, 75)
                            while num_another2 == num_another22:
                                num_another22 = random.randint(1, 75)
                            else:
                                bingo(num_another22)
                                print(ald_nums)
        except:
            pass
            print("入力に誤りがあります。0〜9の数字を入力して下さい")


else:
    print("全ての数字が選ばれました!これにてビンゴは終了です!")

pythonじゃなくてもよくない?とか
色々ツッコミどころがあるかとは思いますがご容赦を。

今後の課題的なメモ

・このコードに関しては5個数字が出た以降は、「ある一定の確率で2個出る」という風にしたかったけども、確率の扱いがまだよくわからない。
条件分岐として考えて、出た数=a に対し「b = a%5」のようにして
「b == 0」「b == 0 and b ==1」.....
というように余りの数で分けたら、2割ごとくらいの確率として扱えるかなぁなどとも考えたけども、もっとスマートな方法があるはずと今後学べることに期待する。

・try-except節に関しては付け焼き刃中の付け焼き刃の知識なので、pycham上でも赤波線が出てたけど、その意味もわからないので同じく今後の自分の頑張り次第。

・このコードが何かアプリのような形にできるのか、という知識やイメージが現状さっぱり湧かないので、そういった知識を得られるメディアなりを探す。


とりあえず、初アウトプットの記録は終了ということで。

1
6
5

Register as a new user and use Qiita more conveniently

  1. You get articles that match your needs
  2. You can efficiently read back useful information
  3. You can use dark theme
What you can do with signing up
1
6