Python 存储在文本文件中的变量不起作用,但应该
Python variables stored in text files not working, but should be
我已经为我的游戏选择了一个基于文本文件的保存系统,用关键字存储所需变量的值——例如,告诉游戏玩哪个章节的密码。但是,它似乎出现故障,我不明白为什么。
在开始游戏之前,我们有:
if not os.file.isfile('TSGsave{0}.txt'.format(name)):
TSGsave=open('TSGsave{0}.txt'.format(name),'wt')
TSGsave.write('\nw5CT$n<jfW=-#J%4Ya5@@')
TSGsave.close()
(使用的关键字是一堆乱码,因此用户无法更改它,知道会发生什么)。这会将 w5CT$n<jfW=-#J%4Ya5@@
添加到文本文件。然后我们有:
for i in range (len(lines)):
if 'w5CT$n<jfW' in lines[i]:
findpass=lines[i]
for i in range (len(findpass)):
if findpass[i]=='=':
cutfrom=i+1
password=findpass[cutfrom:len(findpass)]
取回变量(可以变化,不能写成定值)。我知道它有效,因为我在代码中添加了 print (password)
,它返回了 -#J%4Ya5@@
。然后开始相应章节,代码为:
if password=='-#J%4Ya5@@':
但它没有启动缩进块。在 shell 处,程序结束并返回到 >>>
行。
如果有办法修复此代码,那太好了 - 但执行相同操作的另一个代码也同样有效。
您的行包含换行符,并且正在包括这些内容。从行中删除这些:
findpass = lines[i].rstrip('\n')
打印一个带有换行符的值只会在 print
之后添加一个额外的黑线。始终使用 repr()
function 生成字符串的 Python 表示以查看此类字符:
>>> print '-#J%4Ya5@@\n'
-#J%4Ya5@@
>>> print repr('-#J%4Ya5@@\n')
'-#J%4Ya5@@\n'
您的解析代码过于复杂;您可以使用 str.split()
or str.partition()
从行中拆分您的密码。您应该直接 遍历 lines
列表,而不是使用 range()
:
生成索引
for line in lines:
if 'w5CT$n<jfW' in line:
password = line.partition('=')[2].rstrip('\n')
我已经为我的游戏选择了一个基于文本文件的保存系统,用关键字存储所需变量的值——例如,告诉游戏玩哪个章节的密码。但是,它似乎出现故障,我不明白为什么。
在开始游戏之前,我们有:
if not os.file.isfile('TSGsave{0}.txt'.format(name)):
TSGsave=open('TSGsave{0}.txt'.format(name),'wt')
TSGsave.write('\nw5CT$n<jfW=-#J%4Ya5@@')
TSGsave.close()
(使用的关键字是一堆乱码,因此用户无法更改它,知道会发生什么)。这会将 w5CT$n<jfW=-#J%4Ya5@@
添加到文本文件。然后我们有:
for i in range (len(lines)):
if 'w5CT$n<jfW' in lines[i]:
findpass=lines[i]
for i in range (len(findpass)):
if findpass[i]=='=':
cutfrom=i+1
password=findpass[cutfrom:len(findpass)]
取回变量(可以变化,不能写成定值)。我知道它有效,因为我在代码中添加了 print (password)
,它返回了 -#J%4Ya5@@
。然后开始相应章节,代码为:
if password=='-#J%4Ya5@@':
但它没有启动缩进块。在 shell 处,程序结束并返回到 >>>
行。
如果有办法修复此代码,那太好了 - 但执行相同操作的另一个代码也同样有效。
您的行包含换行符,并且正在包括这些内容。从行中删除这些:
findpass = lines[i].rstrip('\n')
打印一个带有换行符的值只会在 print
之后添加一个额外的黑线。始终使用 repr()
function 生成字符串的 Python 表示以查看此类字符:
>>> print '-#J%4Ya5@@\n'
-#J%4Ya5@@
>>> print repr('-#J%4Ya5@@\n')
'-#J%4Ya5@@\n'
您的解析代码过于复杂;您可以使用 str.split()
or str.partition()
从行中拆分您的密码。您应该直接 遍历 lines
列表,而不是使用 range()
:
for line in lines:
if 'w5CT$n<jfW' in line:
password = line.partition('=')[2].rstrip('\n')