Как я могу создать 2d массив с метками, без numpy или панд, из двух списков для Python? - PullRequest
0 голосов
/ 02 июля 2018

Допустим, у меня есть оценки по пяти играм "Рок, бумага, ножницы", которые выглядят так:

player_score = [1,0,1,1,0]
cpu_score = [0,1,0,0,1]

Я хочу создать 2-мерный массив (без numpy или панд), который будет вести запись сыгранных игр (например, табло). Таким образом, конечный результат будет выглядеть как «нечто», похожее на это:

         G1 G2 G3 G4 G5 

Player   1  0  1  1  0 
CPU      0  1  0  0  1

Есть предложения?

Ответы [ 2 ]

0 голосов
/ 02 июля 2018

Numpy и pandas - мощные инструменты в программировании на Python, но попытка работать без них помогает учиться лучше. Они предоставляют разнообразные полезные функции и классы объектов, для работы без которых вам, возможно, придется определять свои собственные.

Чтобы отобразить желаемое табло, я бы порекомендовал вам определить свой собственный класс табло. Я приведу вам такой пример:

class ScoreBoard:
    def __init__(self):
        self.player_score = [1,0,1,1,0]
        self.cpu_score = [0,1,0,0,1]

    def __str__(self):
        string = '\t'
        for i in range(len(self.player_score)):
            string += 'G%d '%(i+1)
        string = string + '\n\nPlayer\t'
        for i in range(len(self.player_score)):
            string += '%d  '%self.player_score[i]
        string = string + '\nCPU\t'
        for i in range(len(self.cpu_score)):
            string += '%d  '%self.cpu_score[i]
        return string

    def record_score(self, player_score, cpu_score):
        self.player_score.append(player_score)
        self.cpu_score.append(cpu_score)

и если вы

a = ScoreBoard()
print(a)
a.record_score(1, 0)
print(a)

, это будет показано:

        G1 G2 G3 G4 G5 

Player  1  0  1  1  0  
CPU     0  1  0  0  1 
        G1 G2 G3 G4 G5 G6

Player  1  0  1  1  0  1
CPU     0  1  0  0  1  0

Очевидно, что нужно сделать больше, чтобы этот класс работал хорошо.

1) Начальные значения player_score и cpu_score должны быть []

2) Что если на табло пусто? Когда он пуст, вы бы украсили строку вывода?

3) Есть ли вероятность, что это ничья, как Rock против Rock? Если нет, то cpu_score можно рассчитать, если у вас есть player_score. В этом случае один из этих двух не является необходимым.

4) Возможно, он может стать табло для большего количества игр, где больше игроков?

5) Возможно, вы даже можете определить свои собственные помеченные 2D-массивы, например, pandas.DataFrame?

Если вы еще не узнали об объектно-ориентированном программировании в Python, вы можете спросить. Вы также можете узнать больше в Руководствах по программированию на Python .

0 голосов
/ 02 июля 2018

Я думаю, что вы ищете DataFrame?

import pandas as pd
player_score = [1,0,1,1,0]
cpu_score = [0,1,0,0,1]

df = pd.DataFrame([player_score, cpu_score])
df.columns = ["G1", "G2", "G3", "G4", "G5"]
df.index = ['Player', 'CPU']

print(df)

дает

              G1  G2  G3  G4  G5
Player         1   0   1   1   0
CPU            0   1   0   0   1
Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...