Структура данных python для карточной игры без использования классов

#python #dictionary #data-structures

Вопрос:

Не уверен, как сохранить имя и статистику карт без использования классов. Я думал о словарях, но, похоже, не могу заставить код работать. Имена карт импортируются из текстового файла, и статистика карты генерируется случайным образом. Кажется, что это повторяется только один раз вместо того, чтобы хранить все карты. Спасибо за помощь!

 def cardValueGen():
    cards = []
    cards.append(random.randint(1,5))
    cards.append(random.randint(1,100))
    cards.append(random.randint(1,10))
    cards.append(random.randint(1,10))
    return cards

completeCard = {}
def fileReader(numOfCards, completeCard): 
    lines = []#array that we place names of dogs into
    cards = []

    f = open("message.txt","r") # command to OPEN the text file

    for x in f: 
        #lines.append(x) 
        #cards.append(cardValueGen())
        completeCard["name:"] = [x]
        completeCard["name:"].append(cardValueGen())
 

Ответ №1:

Вы можете сохранить его в простом словаре при условии, что у вас есть уникальные названия карт

 import random
def cardValueGen():
    cards = []
    cards.append(random.randint(1,5))
    cards.append(random.randint(1,100))
    cards.append(random.randint(1,10))
    cards.append(random.randint(1,10))
    return cards

completeCards = {}
def fileReader(completeCards): 
    f = open("message.txt","r") # command to OPEN the text file

    for x in f: 
        completeCards[x] = cardValueGen()
    f.close()

fileReader(completeCards)
print(completeCards)
 

Комментарии:

1. Вам также следует close просмотреть файл.

2. @not_speshal Спасибо, я обновил код.

Ответ №2:

Есть целый ряд способов сделать это. Один из способов-составить список карт, но каждая карта представляет собой диктант с двумя записями:

 def cardValueGen():
    cards = []
    cards.append(random.randint(1, 5))
    cards.append(random.randint(1, 100))
    cards.append(random.randint(1, 10))
    cards.append(random.randint(1, 10))
    return cards


def fileReader(completeCard): 
    with open("message.txt", "r") as f: #command to OPEN the text file
        for x in f: 
            card = {'name': x.strip()}
            card["values"] = cardValueGen()
            completeCard.append(card)

completeCard = []
fileReader(completeCard)
print(completeCard)
 

Комментарии:

1. если каждая карта имеет уникальное имя, то не можем ли мы поместить его в качестве ключа, а затем значение в качестве возвращаемого значения cardValueGen в самом дикте. Это позволило бы быстрее получить доступ к статистике карт, вместо поиска по всему списку.

2. @AlbinPaul: Да, это так. Как я уже сказал, есть несколько способов сделать это. Возможно, вам следует написать этот ответ.

3. Если каждая карточка является словарем, то статистика может также состоять из одной словарной статьи, а не содержать все значения в очень неясном списке. def cardGen(name): return {'name': name, 'speed': random.randint(1, 5), 'life': random.randint(1, 100), 'attack': random.randint(1, 10), 'defense': random.randint(1, 10)}