#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)}