如何在python中实现caesar密码?
我似乎无法使密码正确工作 我试图在每次进入循环时重置j的值,但它总是卡在无限循环中。此外,如何将文件中的每个字母更改为指定的字母如何在python中实现caesar密码?,python,while-loop,nested-loops,caesar-cipher,Python,While Loop,Nested Loops,Caesar Cipher,我似乎无法使密码正确工作 我试图在每次进入循环时重置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]) wh
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)
导入系统
file=sys.argv[1]
打开(文件“r”)作为f:
filedata=f.read()
旧字符串=文件数据
alp=列表('abcdefghijklmnopqrstuvxyz')
i=0
j=0
key=int(sys.argv[2])
而i您的while循环看起来不像pythonic。当您尝试使用复杂的东西时,它会使代码变得复杂。尝试像这样使用for in循环:
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
而i
尝试使用简单的特性,Python中有很多特性这不应该是无限循环,也不是嵌套循环;代码中只有一个循环,无论输入如何,循环都将不可避免地结束。文件read()和write()可能是这需要时间的原因。在您的答案中没有解决OP问题的方法。而且,这看起来不像是一个试图过度复杂化的人的代码,更像是一个熟悉另一种语言的人的代码。如果他在这种情况下不使用i和j索引,如果你试图给他一个方向,它也可以解决问题,给他一个线索,告诉他什么是错误,还有像现在这样的最佳实践?谢谢你给我一个线索)