首页 > 解决方案 > 有没有办法将文本文件读取为整数而不是列表?

问题描述

我正在尝试制作一个点击游戏,将数据保存在文本文件中并在游戏开始时读取它,但是当我在文件中写入时

self.file1 = open('money.txt', 'w')
self.file1.write(str(self.playerMoney)) 
self.file1.close()

它在我的 .txt 文件中打印一个列表,而不是清晰的整数。这是我的代码:

import tkinter as tk
import time
from time import sleep
from tkinter import messagebox


class Application(tk.Frame):
    
    file1 = open('money.txt', 'r')
    playerMoney = file1.read()
    file2 = open('autoFarmEarnings.txt', 'r')
    autoFarmEarnings = file2.read()
    file3 = open('autoFarmPrice.txt', 'r')
    priceAutoFarm = file3.read()
    file4 = open('earnings.txt', 'r')
    earnings = file4.read()
    file5 = open('upgradePrice.txt', 'r')
    upgradePrice = file5.read()
    

    def __init__(self, master=None):
        super().__init__(master)
        self.master = master
        self.pack()
        self.create_widgets()

    def create_widgets(self):
        self.hi_there = tk.Button(self)
        self.hi_there["text"] = "Cliquer ici!"
        self.hi_there["command"] = self.say_hi
        self.hi_there.pack(side="top")
        self.moneybtn = tk.Button(self)
        self.moneybtn["text"] = ("Revenus : " + str(self.earnings) + "€.")
        self.moneybtn["command"] = self.money
        self.moneybtn.pack(side="top")
        self.moneybtn['state'] = 'disabled'
        self.upgrade = tk.Button(self)
        self.upgrade["text"] = ("Ammeliorer les revenus (" + str(self.upgradePrice) + "€.).")
        self.upgrade["command"] = self.upgradefunc
        self.upgrade.pack(side ="left")
        self.showMoney = tk.Button(self)
        self.showMoney['text'] = ('Argent : ' + str(self.playerMoney) + '€.')
        self.showMoney["state"] = "disabled"
        self.showMoney.pack(side = "right")

        self.autofarmbtn = tk.Button(self)
        self.autofarmbtn['text'] = 'Debloquer l\'autofarm. (1000€)'
        self.autofarmbtn['command'] = self.autofarmfunc
        self.autofarmbtn.pack(side = 'left')

        self.quit = tk.Button(self)
        self.quit['text'] = 'Sauvegarder et quitter.'
        self.quit['command'] = self.save_and_quit 
        self.quit.pack(side="bottom")


    def say_hi(self):
        print("Vous avez gagné " + str(self.earnings) + " euros.")
        self.playerMoney = self.playerMoney + self.earnings
        self.showMoney['text'] = ('Argent : ' + str(self.playerMoney) + '€.')
    
    def money(self):
        print(str(self.playerMoney))
    
    def upgradefunc(self):
        if (self.playerMoney) >= self.upgradePrice:
            print('Vous avez ammélioré vos revenus pour ' + str(self.upgradePrice) + ' €.')
            self.earnings = self.earnings + 10
            self.upgradePrice = self.upgradePrice + 20
            self.playerMoney = self.playerMoney - self.upgradePrice
            self.upgrade["text"] = ("Ammeliorer les revenus (" + str(self.upgradePrice) + "€.).")
            self.showMoney['text'] = ('Argent : ' + str(self.playerMoney) + '€.')
            self.moneybtn["text"] = ("Revenus : " + str(self.earnings) + "€.")
        elif self.playerMoney < self.upgradePrice:
            print('Vous n\'avez pas assez d\'argent pour acheter cette ammélioration!')

    def autofarm(self):
        while 1 < 2:
            sleep(1)
            self.playerMoney = self.playerMoney + self.autoFarmEarnings
    
    def autofarmfunc(self):
        print('Vous avez ammelioré l\'autofarm pour ' + str(self.priceAutoFarm) + '€.')
        self.priceAutoFarm = self.priceAutoFarm + 1000 * self.counter
        self.counter = self.counter + 1
        self.autofarmbtn['text'] = ('Ammeliorer l\'autofarm. (' + str(self.priceAutoFarm) + '€.)')
        self.autoFarmEarnings = self.autoFarmEarnings + 2
        self.autofarm()
    
    def save_and_quit(self):
        if messagebox.askokcancel("Sauvegarder et quitter.", "Voulez vous sauvegarder et quitter?"):
            self.file1 = open('money.txt', 'w')
            self.file1.write(str(self.playerMoney)) 
            self.file1.close()

            self.file2 = open('autoFarmEarnings.txt', 'w')
            self.file2.write(str(self.autoFarmEarnings))
            self.file2.close()

            self.file3 = open('autoFarmPrice.txt', 'w')
            self.file3.write(str(self.priceAutoFarm))
            self.file3.close() 

            self.file4 = open('earnings.txt', 'w')
            self.file4.write(str(self.earnings))
            self.file4.close()
 
            self.file5 = open('upgradePrice.txt', 'w')
            self.file5.write(str(self.upgradePrice))
            self.file5.close()

            root.destroy()
            


    

root = tk.Tk()
app = Application(master=root)
root.title('Clicker')
app.mainloop()

这是我的游戏截图。

截图(图片)

标签: pythontkinter

解决方案


当您创建应用程序时,您的程序会执行以下操作:

file1 = open('money.txt', 'r')
playerMoney = file1.read()

这设置playerMoney为一个包含file1. 这就是read()工作原理。如果您希望将这些内容解释为整数,那么您必须自己做。

with open('money.txt', 'r') as file1:
    for line in file1:
        playerMoney = int(line.strip())
        break

很明显,您已经多次运行该程序,结果文件的内容完全混乱。因此,在您修复代码后,请从正确的文件重新开始。


推荐阅读