如何检查字符串中的特定字母?
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
和消息是从输入传递的。
我的 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
和消息是从输入传递的。