我正在制作一個允許您賭博的程式,它會創建一個玩家物件,該物件具有當前金錢、玩家贏/輸的次數等屬性。
我目前能夠讓這個作業并且在程式運行時保存資訊,但是我想實作一個功能,允許我將此用戶資訊保存在 json 中,然后在下次運行程式時,檢查該 json 以查看玩家輸入的名稱是否與 json 中“名稱”的任何值匹配,并從他們上次玩游戲時提取他們的個人資料。
目前我正在學習如何讀/寫 json 資料,我能夠將資料保存到 json,但我無法以我想要的格式保存它,稍后再檢索它并將資料轉換回我的物件屬性.. 具體來說,我可以像這樣保存用戶:
import json
class Casino:
def __init__(self, name, money, wins, debt):
self.name = str(name)
self.money = int(money)
self.wins = int(wins)
self.debt = int(debt)
self.is_gambling = True
self.losses = 0
def add_win(self):
self.wins = self.wins 1
def add_loss(self):
self.losses = self.losses 1
def add_money(self, bet: int):
self.money = self.money bet
def add_debt(self, debt: int):
if self.money == 0:
print("You have gone into debt..")
print("Your debt has gone up")
self.debt = self.debt debt
else:
print("Your debt has gone up")
self.debt = self.debt debt
def change_name(self, newname):
self.name = newname
return self.name
def indebt(self):
if self.debt > 0:
print('You are in debt..')
print(f'You owe ${self.debt}')
else:
print('You are not in debt')
def addrep(self, rep: int):
self.reputation = self.reputation rep
return self.reputation
def remrep(self, rep: int):
self.reputation = self.reputation - rep
return self.reputation
player2 = {
'name': 'dolorean',
'money': 0,
'wins': 0,
'debt': 0
}
show = json.dumps(player2)
with open('test.json', 'w') as userfile:
json.dump(show, userfile)
它會像這樣保存到 json:
"{\"name\": \"dolorean\", \"money\": 0, \"wins\": 0, \"debt\": 0}"
但我想通過用戶名檢索屬性。
我是否需要在 json 中創建某種嵌套串列?如果我這樣做,我該怎么做?我曾嘗試從以下位置更改我的播放器變數:
player2 = {
'name': 'dolorean',
'money': 0,
'wins': 0,
'debt': 0
}
到:
player2 = {
'users': {
'name': 'dolorean',
'money': 0,
'wins': 0,
'debt': 0
}
}
但我不確定如何檢索資料,所以它只是以一種對我來說看起來不同的方式保存它..
uj5u.com熱心網友回復:
此資料結構將允許許多不同的玩家名稱:
{
"jim": {"money": 100, "wins": 5, "debt": 0},
"betty": {"money": 200, "wins": 7, "debt": 5}
}
uj5u.com熱心網友回復:
好的,所以我從 martineau 的評論中得出的解決方案是這樣做:
我將使用輸入函式生成一個名稱(只是臨時的,我將其添加到不和諧機器人中,因此最終名稱將是他們的服務器顯示名稱,他們的檔案名將是他們唯一的服務器 ID,因此我可以將他們的資訊保存到他們的檔案中) 并且我從該輸入創建以下物件并將其轉換為 json 格式,然后將其轉換回來。
gam_name = str(input('What is your name?'))
player1 = Casino(gam_name, 500, 0, 0)
player1 = {
'name': gam_name,
'money': player1.money,
'wins': player1.wins,
'debt': player1.debt
}
with open(gam_name '.json', 'w') as userfile:
json.dump(player1, userfile)
with open(gam_name '.json') as userfile:
info = json.load(userfile)
print(info['name'])
print(info['money'])
print(info['wins'])
print(info['debt'])
現在,我可以通過這種方式將每個值保存為當前的任何值,并且我可以在他們贏或輸時運行它,它將用新值覆寫他們的當前值,然后在使用 with 陳述句完成后關閉檔案。
這正是我想要做的,現在我可以從特定于播放器的唯一檔案中呼叫資訊,這將允許兩個人具有相同的顯示名稱或用戶名和不同的資訊。
感謝您的幫助!
轉載請註明出處,本文鏈接:https://www.uj5u.com/qianduan/386735.html
