2017-04-02 32 views
0

我已經在python中創建了一個簡單的命令行遊戲。 用戶開始通過輸入他們的綽號,其被存儲爲name如何有條件地從文件中提取行,編輯它們並將它們插回

在用戶的得分被存儲在一個文件中,像這樣的比賽結束:

wins = str(wins) 
losses = str(losses) 

file = open('scores.py','a') 
file.write(name + ": wins = " + wins + " losses = " + losses + "\n\n") 
file.close 

(I轉換的「勝」和'字符串'損失'的變量,因爲我似乎無法將整數寫入文件,我不知道這是否可能(我確定它是這樣),但我只是不知道該怎麼做。)

我想要玩遊戲的用戶有一個累積分數,即如果他們要玩1場比賽ð贏得6輪,打另一場比賽,贏得2輪,我不希望有2項在「scores.py」文件,我想它說:

*User*: wins = 8 losses = 0 

我的唯一方法可以想到這樣做的是,每場比賽結束後,用戶的名字和得分將被追加到'scores.py'文件中,但在此之前,文件被逐行掃描以檢查用戶的暱稱已經有一個輸入的分數。如果在遊戲開始時輸入的名字與在'scores.py'文件中特定行上讀取的名字相同,請提取該行,將字符串值轉換爲整數,並將損失轉換爲整數,然後添加將遊戲當前得分與存儲得分進行比較,然後將其寫回到文件中。

任何和所有的幫助將不勝感激,請原諒,如果代碼是可怕的,解決方案很簡單,我是非常新的python,並不是非常精通一般的代碼。

+0

除非內容是有效的python,否則不要使用'.py'擴展名。這太混亂了。 –

+1

可能重複[是否可以修改文件中的行?](http://stackoverflow.com/questions/5453267/is-it-possible-to-modify-lines-in-a-file-就地) –

+1

您可以使用字典''{'user':[wins,losses],...}''爲所有用戶保存信息,然後使用[pickle](https:// docs .python.org/3/library/ pickle.html#module-pickle)來序列化字典。 – wwii

回答

0

您可以使用內置的json模塊。我認爲它很適合你的用例。

import json 

def update_scores(name, wins, losses, scores_file='scores.json'): 
    try: 
     with open(scores_file, 'r') as f: 
      scores = json.load(f) 
    except (IOError, ValueError): 
     # Non existing or empty file. 
     scores = {} 
    try: 
     scores[name]['wins'] += wins 
     scores[name]['losses'] += losses 
    except KeyError: 
     # Initialize user score 
     scores[name] = {'wins': wins, 'losses': losses} 
    with open(scores_file, 'w') as f: 
     json.dump(scores, f) 

# Use: 
update_scores('foo', 3, 8) # {"foo": {"wins": 3, "losses": 8}} 
update_scores('foo', 3, 2) # {"foo": {"wins": 6, "losses": 10}} 
update_scores('bar', 8, 0) # {"foo": {"wins": 6, "losses": 10}, "bar": {"wins": 8, "losses": 0}} 
+0

我試圖實現這一點,它似乎沒有做任何事情。沒有錯誤,分數文件中沒有條目,什麼也沒有。 – Will

+0

報廢!該代碼似乎現在工作的很好,我會嘗試錯誤檢查它並進行一些實驗,但現在它完美地工作。非常感謝你! – Will

+0

不客氣,我很高興我的幫助! – feqwix

相關問題