我似乎无法使密码正常工作。我试图在每次进入循环时重置j的值,但它只会不断陷入无限循环。另外,为了将文件中的每个字母更改为一个新字母(即指定字母),我正在做的正确操作。
import sys
file = sys.argv[1]
with open(file, 'r') as f:
filedata = f.read()
old_string = filedata
alp = list('abcdefghijklmnopqrstuvwxyz')
i = 0
j = 0
key = int(sys.argv[2])
while i < len(filedata):
j = 0
if filedata[i] != alp[j]:
j+=1
if filedata[i] == alp[j]:
k = old_string.rfind(filedata[i])
if i < (len(alp) - key):
old_string = old_string[:k] + alp[j+key] + old_string[k+1:]
else:
old_string = old_string[:k] + alp[(j+key)%26] + old_string[k+1:]
i += 1
with open(file, 'w') as f:
f.write(old_string)
您的while循环看起来不像pythonic。当您尝试使用复杂的东西时,它会使您的代码变得复杂。尝试像这样在for循环中使用:
for symbol in filedata:
if symbol.isalpha():
actions..
而且您不需要在其中使用i和j索引。
但是如果要使用“ while”循环,请执行此操作
while i < len(filedata):
j = 0
while j < len(alp):
if filedata[i] != alp[j]:
j+=1
if filedata[i] == alp[j]:
k = old_string.rfind(filedata[i])
if i < (len(alp) - key):
old_string = old_string[:k] + alp[j+key] + old_string[k+1:]
else:
old_string = old_string[:k] + alp[(j+key)%26] + old_string[k+1:]
break
i += 1
尝试使用简单的功能,Python中有很多功能