ゴリラからの逃走

意識が高いだけで何もできなかった頃(=ゴリラ)から変わるために日々行なっていることを書いています。

Pythonトレーニング15日目

足腰をしっかり鍛えるために、基本的な情報を何周もして頭に叩き込む。 テキスト:Pythonチュートリアル 毎日 演習:PRACTICE PYTHON 毎日 +毎週1冊周辺領域を勉強する

Pythonトレーニング1日目 - ゴリラからの逃走

PRACTICE PYTHON

27. Tic Tac Toe Draw

This exercise is Part 3 of 4 of the Tic Tac Toe exercise series. The other exercises are: Part 1, Part 2, and Part 4. In a previous exercise we explored the idea of using a list of lists as a “data structure” to store information about a tic tac toe game. In a tic tac toe game, the “game server” needs to know where the Xs and Os are in the board, to know whether player 1 or player 2 (or whoever is X and O won). There has also been an exercise about drawing the actual tic tac toe gameboard using text characters. The next logical step is to deal with handling user input. When a player (say player 1, who is X) wants to place an X on the screen, they can’t just click on a terminal. So we are going to approximate this clicking simply by asking the user for a coordinate of where they want to place their piece. As a reminder, our tic tac toe game is really a list of lists. The game starts out with an empty game board like this: game = [[0, 0, 0], [0, 0, 0], [0, 0, 0]] The computer asks Player 1 (X) what their move is (in the format row,col), and say they type 1,3. Then the game would print out game = [[0, 0, X], [0, 0, 0], [0, 0, 0]] And ask Player 2 for their move, printing an O in that place. Things to note: * For this exercise, assume that player 1 (the first player to move) will always be X and player 2 (the second player) will always be O. * Notice how in the example I gave coordinates for where I want to move starting from (1, 1) instead of (0, 0). To people who don’t program, starting to count at 0 is a strange concept, so it is better for the user experience if the row counts and column counts start at 1. This is not required, but whichever way you choose to implement this, it should be explained to the player. * Ask the user to enter coordinates in the form “row,col” - a number, then a comma, then a number. Then you can use your Python skills to figure out which row and column they want their piece to be in. * Don’t worry about checking whether someone won the game, but if a player tries to put a piece in a game position where there already is another piece, do not allow the piece to go there.

こんな感じかな。リスト内リストにある要素って、inで検索することできないのかな。。

game = [[0,0,0],[0,0,0],[0,0,0]]

def rowcol(inp,name):
    row = int(inp[0]) - 1
    col = int(inp[2]) - 1
    if name == "1":
        fig = "◯"
    else:
        fig = "×"

    if game[row][col] == 0:
        game[row][col] = fig
        print(game)
    else:
        print("this place is used")

while 0 in game[0] or 0 in game[1] or 0 in game[2]:
    a = input("please type your player number:")
    b = input("please input your plase:")
    rowcol(b,a)

解説を読むと、stringをリストとして分割するやり方だけだといけてないってさ。なぜなら、桁が変わった時に同じことができないからだと。確かにね。だからその代わりにsplit()を使うべきだと。まあそうだな。

28. Max Of Three

Implement a function that takes as input three variables, and returns the largest of the three. Do this without using the Python max() function! The goal of this exercise is to think about some internals that Python normally takes care of for us. All you need is some variables and if statements!

そのまま。なんのひねりもない答え方。

def vari(a, b, c):
    a = int(a)
    b = int(b)
    c - int(c)

    if a > b:
        if a > c:
            return a
        elif a == c:
            return a, b
        else:
            return c
    elif a == b:
        if a > c:
            return a, b
        elif a == c:
            return a, b, c
        else:
            return c
    else:
        if b > c:
            return b
        elif b == c:
            return b, c
        else:
            return c

print(vari(1, 2, 3))

独学プログラマー

12章 プログラミングパラダイム

クラスのスイート部分にメソッドを書く。
メソッドと関数の違いは

  • クラスのスイート部分にあるか
  • 引数を少なくとも1つ定義する必要があるか

新しいオブジェクトを作ることを、クラスのインスタンス化と言う。

13章 オブジェクト指向プログラミングの4大要素

カプセル化
オブジェクトによって複数の変数とメソッドをまとめる
データをクラス内に隠蔽して、外から見えないようにする
Pythonの場合、プライベート変数がないため、アクセスして欲しくない変数などは名前を_で始める)

・抽象化
小さな特徴を除いて、本質的な情報だけを集めた状態にする

ポリモーフィズム
同じインターフェイスでありながら、異なるデータ型に合わせて異なる動作をする機能

・継承
親クラスからメソッドや変数を子クラスに引き継げる

■今日の実績 f:id:aoki-shiraki21:20200114074118p:plain