如何检查字符串中的特定字母?

How to check for specific letters in string?

我的 Python 3 加密程序有问题。我正在编写代码,使用比较来检查 userMessage 中的某些字母,使用 if 语句和 for 循环。我遇到的问题是字母表会在加密输出的每个字母之间弹出。例如,如果输出应该是 amxer,它就是 aAmBxCeDr。此外,检查 vwxyz 的第二个 if 语句使 vwxyz 在 ASCII 中向右滚动 vwxyz 5 次加密的符号之间弹出。第二个 if 语句是将这些符号更改为字母 abcde.

#Start
#variables
encryptedMessage=""
userMessage = input("your message here: ")
userMessage =userMessage.lower()
shift=5
#function
def step2():
    #for loop
    for character in userMessage:
        #5:50AM February 24th, 2020
        #looking for global variable
        global encryptedMessage
        if character== "a"or"b"or"c"or"d"or"e"or"f"or"g"or"h"or"i"or"j"or"k"or"l"or"m"or"n"or"o"or"p"or"q"or"r"or"s"or"t"or"u":
            eN = ord(character)
            eN+= shift
            encryptedMessage+=chr(eN)  
        #checking for letters that go to random symbols
        if character=="v"or"w"or"x"or"y"or"z":

            if character=="v": character=="a"
            if character=="w": character=="b"
            if character=="x": character=="c"
            if character=="y": character=="d"
            if character=="z": character=="e"
            encryptedMessage+=character

step2()
print(userMessage)
print(encryptedMessage)

我的代码输出为:

your message here: abcdefghijklmnopqrstuvwxyz
abcdefghijklmnopqrstuvwxyz
fagbhcidjekflgmhniojpkqlrmsntoupvqwrxsytzu{v|w}x~yz
>>> 

您使用的语法无效。 character == 'a' or 'b'(character == 'a') or 'b', which is always 相同 since'b' 不是 None`。

如果要使用多个等于,则必须将它们写成 character == 'a' or character == 'b' or ...

或者,更好的解决方案(如下所示)是使用 set()in 运算符,它检查字符是否在集合内,如果是 returns 则为真找到了。

encryptedMessage=""
userMessage = input("you'r message here: ")
userMessage =userMessage.lower()
shift=5
#function
FIRST= set(["a","b","c","d","e","f","g","h","i","j","k","l","m","n","o","p","q","r","s","t","u"])
SECOND = set(["v","w","x","y","z"])
def step2():
    #for loop
    for character in userMessage:
        #5:50AM February 24th, 2020
        #looking for global variable
        global encryptedMessage
        if character in FIRST:
            eN = ord(character)
            eN+= shift
            encryptedMessage+=chr(eN)  
        #checking for letters that go to random symbols
        if character in SECOND:
            if character=="v": character=="a"
            if character=="w": character=="b"
            if character=="x": character=="c"
            if character=="y": character=="d"
            if character=="z": character=="e"
            encryptedMessage+=character

step2()
print(userMessage)
print(encryptedMessage)

因为我现在才意识到这是一个简单的旋转密码,这里是另一个如何实现它的例子。

假设A为0,Z为25,您可以使用模运算进行简单旋转,如encrypted_char = (char + shift) % 26。在我们的例子中,字母 'a''z' 不在数字 1 上,但是我们可以通过先减去然后加上起始值

来轻松解决这个问题
A = ord('a')
def lowercase_rotate_cypher( message, shift):
    accumulator = []
    for character in message:
        c = A + ( ( ord(character) + shift - A ) % 26)
        accumulator.append( chr(c) )
    return ''.join(accumulator)

在您的例子中,shift=5 和消息是从输入传递的。