我已经为我的游戏确定了基于文本文件的保存系统,用关键字存储所需变量的值 - 例如,密码告诉游戏要播放哪个章节。但是,它似乎出现故障,我无法理解为什么。
在开始游戏之前,我们有:
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中,程序结束并返回>>>
行。
如果有办法修复此代码,那么很好 - 但是另一个执行相同操作的代码也可以正常工作。
答案 0 :(得分:1)
您的行包含换行符,并且包含这些换行符。从行中剥离这些:
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()
或str.partition()
来修改密码。您应该直接遍历lines
列表 ,而不是使用range()
生成索引:
for line in lines:
if 'w5CT$n<jfW' in line:
password = line.partition('=')[2].rstrip('\n')