Python 尝试使用类函数在文件中写入字符串
我想写一个简单的游戏,需要在一个文件中写一些信息。到目前为止,代码是这样的:Python 尝试使用类函数在文件中写入字符串,python,function,class,Python,Function,Class,我想写一个简单的游戏,需要在一个文件中写一些信息。到目前为止,代码是这样的: class Player: def __init__(self, name, password, file): with open(file) as inputFile: self.playerAndPw = inputFile.read() self.name = name self.password = password d
class Player:
def __init__(self, name, password, file):
with open(file) as inputFile:
self.playerAndPw = inputFile.read()
self.name = name
self.password = password
def add(self, name, password, file):
file.write(name + " | " + password)
def __str__(self):
print("The player's name is called " + self.name + "\n")
print("Welcome to Guess My Number!")
start = input("Press 1 for New Account, 2 for Log In: ")
if start == "1":
player = Player
playerID = input("Enter a name: ")
playerPassword = input("Enter a password: ")
fileName = "PlayerAndPassword.txt"
player.add(playerID, playerPassword, fileName)
在最后一行中,最后一个括号中有一个异常:“参数‘file’未填充。因此代码无法从我在最后一行中使用的函数中获取信息
如果有人能帮助我,那就太好了!谢谢!这是我尽力更正代码的尝试。正如评论中指出的,您需要将
player
设置为player
类的实例,将其实例化为player=player(…)
class Player:
def __init__(self, name, password, file):
self.name = name
self.password = password
self.file = open(file, mode='a') #first assign file to self.file(referring to this file)
def add(self): #need to add those parameters as they are already initialized by constructor
self.file.write(self.name + " | " + self.password)
def __str__(self):
print("The player's name is called " + self.name + "\n")
print("Welcome to Guess My Number!")
start = input("Press 1 for New Account, 2 for Log In: ")
if start == "1":
playerID = input("Enter a name: ")
playerPassword = input("Enter a password: ")
fileName = "PlayerAndPassword.txt"
player = Player(playerID, playerPassword, fileName) #create instance with said values
player.add() #call the add function to add
因为您正在将播放器的名称、密码和用于存储凭据的文件传递给player
构造函数,所以不需要将这些作为参数传递给player.add
,这就是为什么我删除了所有参数的原因
我应该指出,此实现非常简单且不完整,只是为了解决眼前的问题而设计的。我的实现将导致每次调用Player
构造函数后文件句柄保持打开状态。如果您选择这种方法,您可能需要阅读
控制台输出
欢迎猜我的号码!
按1表示新帐户,按2表示登录:1
输入一个名字:汤姆
输入密码:Foo
欢迎猜我的号码!
按1表示新帐户,按2表示登录:1
输入一个名字:迪克
输入密码:Bar
欢迎猜我的号码!
按1表示新帐户,按2表示登录:1
输入一个名字:Harry
输入密码:Baz
PlayersAndPasswords.txt
Tom | Foo
迪克·巴尔
哈里·巴兹
为什么要将名称
、密码
和文件
作为参数传递给播放器。如果已经将它们传递给类构造函数,请添加
?另外,Player=Player
行并没有初始化Player
的新实例。为此,需要Player=Player(…)
并传入所需的参数。但您无法传递参数,因为您必须输入文件。看起来您的设计有缺陷:您无法使用文件参数创建构造函数,因为这意味着您永远无法创建新的播放机。最好使用load/save方法,并使用json序列化/取消序列化…等等问题是,fileName
是一个字符串,但add
需要的是一个文件而不是字符串。是的,我使用了注释。请注意,这种方法会留下一个打开的文件句柄,我个人会在这里使用JSON。JSON的优点是,它已经内置了序列化功能,使某些事情变得更容易(例如,玩家查找)。@mseivert你没有错,我将把这一点添加到我的答案中,因为这是一个很好的观点。保留一个打开的文件句柄不会影响这个程序的正确性。我的答案只是为了解决OP最紧迫的问题。@ErikaWorm很高兴能提供帮助,但堆栈溢出
class Player:
def __init__(self, name, password, fileName):
self.name = name
self.password = password
self.file = open(fileName, mode='a')
def add(self):
self.file.write(self.name + " | " + self.password + '\n')
def __str__(self):
print("The player's name is called " + self.name + "\n")
print("Welcome to Guess My Number!")
start = input("Press 1 for New Account, 2 for Log In: ")
if start == "1":
playerId = input("Enter a name: ")
playerPassword = input("Enter a password: ")
fileName = "PlayerAndPassword.txt"
player = Player(playerId, playerPassword, fileName)
player.add()