我试图在python中使用replace函数,但遇到了一些问题

我试图在python中使用replace函数,但遇到了一些问题,python,Python,我正试图为我父亲制作一个程序,这样他就可以轻松地在工作中更改密码。他必须更改密码列表,使其模式类似于“abcde123”到“bcdef234”等等 我基本上知道了如何编写代码: code = input("Enter code") code = code.replace("z", "a") code = code.replace("y", "z") code = code.replace("x", "y") code = code.replace("w", "x") code = code.r

我正试图为我父亲制作一个程序,这样他就可以轻松地在工作中更改密码。他必须更改密码列表,使其模式类似于“abcde123”到“bcdef234”等等

我基本上知道了如何编写代码:

code = input("Enter code")

code = code.replace("z", "a")
code = code.replace("y", "z")
code = code.replace("x", "y")
code = code.replace("w", "x")
code = code.replace("v", "w")
code = code.replace("u", "v")
code = code.replace("t", "u")
code = code.replace("s", "t")
code = code.replace("r", "s")
code = code.replace("q", "r")
code = code.replace("p", "q")
code = code.replace("o", "p")
code = code.replace("n", "o")
code = code.replace("m", "n")
code = code.replace("l", "m")
code = code.replace("k", "l")
code = code.replace("j", "k")
code = code.replace("i", "j")
code = code.replace("h", "i")
code = code.replace("g", "h")
code = code.replace("f", "g")
code = code.replace("e", "f")
code = code.replace("d", "e")
code = code.replace("c", "d")
code = code.replace("b", "c")
code = code.replace("a", "b")

print code
在第一行中,它表示将任何“z”更改为“a”。在第二行到最后一行中,它表示将任何“a”更改为“b”。当您尝试运行此代码时,当您键入“z”时,它将自动转到“b”。有人知道我怎么解决这个问题吗


编辑:是的,我也意识到这是因为我添加了最后一行代码,将前一行更改为b

您正在新数据上运行替换!下面是一个示例,我们迭代给定的字符并替换它们一次,这可以防止您描述的问题:

code = input("Enter code")

key = {'z': 'a',
       'y': 'z',
       'x': 'y',
       'w': 'x',
       'v': 'w',
       'u': 'v',
       't': 'u',
       's': 't',
       'r': 's',
       'q': 'r',
       'p': 'q',
       'o': 'p',
       'n': 'o',
       'm': 'n',
       'l': 'm',
       'k': 'l',
       'j': 'k',
       'i': 'j',
       'h': 'i',
       'g': 'h',
       'f': 'g',
       'e': 'f',
       'd': 'e',
       'c': 'd',
       'b': 'c',
       'a': 'b'
       }

new = list()

for c in list(code):
    new.append(key[c])

print(''.join(new))
编辑:

更仔细地阅读您的示例,您似乎只想将字母旋转一个位置-无需使用键!我们现在可以很容易地调整它以支持数字、特殊字符。。。你要什么都行

from string import ascii_letters

code = input("Enter code")
charset = ascii_letters
new = list()

for c in list(code):
    i = charset.find(c)
    new.append(charset[i - 1])

print(''.join(new))

您正在新数据上运行替换!下面是一个示例,我们迭代给定的字符并替换它们一次,这可以防止您描述的问题:

code = input("Enter code")

key = {'z': 'a',
       'y': 'z',
       'x': 'y',
       'w': 'x',
       'v': 'w',
       'u': 'v',
       't': 'u',
       's': 't',
       'r': 's',
       'q': 'r',
       'p': 'q',
       'o': 'p',
       'n': 'o',
       'm': 'n',
       'l': 'm',
       'k': 'l',
       'j': 'k',
       'i': 'j',
       'h': 'i',
       'g': 'h',
       'f': 'g',
       'e': 'f',
       'd': 'e',
       'c': 'd',
       'b': 'c',
       'a': 'b'
       }

new = list()

for c in list(code):
    new.append(key[c])

print(''.join(new))
编辑:

更仔细地阅读您的示例,您似乎只想将字母旋转一个位置-无需使用键!我们现在可以很容易地调整它以支持数字、特殊字符。。。你要什么都行

from string import ascii_letters

code = input("Enter code")
charset = ascii_letters
new = list()

for c in list(code):
    i = charset.find(c)
    new.append(charset[i - 1])

print(''.join(new))

这非常简单,只需一行即可完成:

new = [chr(ord(char) + 1) if char != 'z' else 'a' for char in code]
这会将每个字符的ascii值增加1。如果字符为“z”,则将其设置为“a”

函数的作用是:获取字符的ascii值


chr()
函数从ascii值返回相应的字符

这非常简单,只需一行即可:

new = [chr(ord(char) + 1) if char != 'z' else 'a' for char in code]
这会将每个字符的ascii值增加1。如果字符为“z”,则将其设置为“a”

函数的作用是:获取字符的ascii值


chr()
函数从ascii值返回相应的字符

,因为将“z”更改为“a”后,最后一行将遇到“a”(原来是“z”,但已经更改),并将其更改为“b”(这不是主题,但我应该提到,这听起来不像是一个好的密码练习!你最好每次都随机化)@JackParkinson我第一次意识到了这一点,但由于我还是一个初学者,我在理解我找到的许多答案时遇到了很多困难online@JackParkinson (是的,这是真的,但我爸爸必须更改一个字母,因为他使用的系统会这样做,并且会每月重置一次。因此他必须更改它以再次登录。我同意,最好只提供随机密码!)当然,因为在将“z”更改为“a”后,您的最后一行将遇到“a”(原来是“z”,但已经更改)将其改为“b”(这不是主题,但我应该指出,这听起来不是一个好的密码练习!你最好每次都随机)@JackParkinson我第一次意识到了这一点,但由于我还是一个初学者,我在理解我找到的许多答案时遇到了很多困难online@JackParkinson (是的,这是真的,但我爸爸必须更改一个字母,因为他使用的系统会这样做,并且每月重置一次。所以他必须更改它才能再次登录。我同意,最好只提供随机密码!)很好,没有想到!很好,没有想到!谢谢你,但与其做[I-1],不如做[I+1]@DeeDee
[i+1]
你会遇到的一个问题是z-当你使用
[i-1]时,你不会回到a
将返回到最后一项,如果你从a开始,实际上,当我这样做时,它确实返回到a,但只使其大写。仍在努力使其保持小写。啊,对了!ascii是a-Za-z…因此你可以只做
降低('''.join(new))
而不是做[I-1])谢谢,但与其做[I-1],不如这样做[i+1]。@DeeDee使用
[i+1]
时会遇到的一个问题是z-使用
[i-1]时不会返回到a
如果你从a开始,它将返回到最后一项。实际上,当我这样做时,它确实返回到a,但只使其大写。仍在努力使其保持小写。啊,对了!ascii是a-Za-z…所以你可以改为
小写('''.join(new))