python-3.x 迭代字符串和caesar同时上下移动的问题

jexiocij  于 2022-12-14  发布在  Python
关注(0)|答案(1)|浏览(109)

所以我在做一个密码,我想用这个密码,编写一个程序来轻松地加密和解密消息,唯一的问题是,我对Python比较陌生,不太擅长这种高级的东西,我现在主要关注加密过程,我在这个文档中做了一个简短的指南,关于如何用这个密码加密消息:Cipher
我很难找到一种方法来迭代字符串中的各个字符,通过催化剂将偶数字符下移,奇数字符上移,并使每个新词的第一个字符为奇数,而不管它在字符串中的位置如何(和转移数字)所有在同一时间。我有催化剂的变化,扭转字符串等工作得很好,只是真正的加密部分给我带来了麻烦。
下面是我的代码:

# MTBE stands for Message To Be Encrypted
# Getting Catalyst
catalyst = int(input("Catalyst: "))
# The message to encrypt
mtbe = input("Message to encrypt: ")
# Reversing each word in the message
new_mtbe_one = reverseWordSentence(mtbe)
print(new_mtbe_one)

# Actual encrypting
catalyst_reset = 6
#
# Iteration/shifting stuff goes in here
#
# Code for updating catalyst (goes inside interation loop)
if catalyst < catalyst_reset:
    catalyst += 1
elif catalyst >= catalyst_reset:
    catalyst = 0
    catalyst_reset += 1

(您在代码中看到的reverseWordSentence函数):

def reverseWordSentence(Sentence):
 
    # Splitting the Sentence into list of words.
    words = Sentence.split(" ")
     
    # Reversing each word and creating
    # a new list of words
    # List Comprehension Technique
    newWords = [word[::-1] for word in words]
     
    # Joining the new list of words
    # for a new Sentence
    newSentence = " ".join(newWords)
 
    return newSentence

我试着使用和修改GeeksForGeeks和其他网站的代码,但是他们最终把整个字符串移动了一个量,而不是向两个方向移动,做了一些其他的奇怪的事情,或者是这些事情的组合。我试着做我自己的系统,但是没有用。我没有主意了。也许我错过了一些重要的东西,但是我不确定。

rta7y2nd

rta7y2nd1#

让我们从编写一个加密字母的函数开始:

import string

letters = string.ascii_uppercase

def encrypt(letter, catalyst, is_odd):
    letter_index = ord(letter) - ord("A")
    new_letter_index = letter_index - catalyst if is_odd else letter_index + catalyst
    return letters[new_letter_index]

现在应该很容易正确使用它:

is_odd = True
encrypted = []
for character in new_mtbe_one:
    # iterating over string iterates over every character
    if character == " ":
        is_odd = True
        encrypted.append(" ")
        continue
    encrypted.append(encrypt(character, catalyst, is_odd))
    is_odd = not is_odd
    # catalyst stuff

如果要使其与数字一起工作,我们需要稍微改进encrypt函数:

digits = string.digits

def encrypt(letter, catalyst, is_odd):
    value = ord("0") if letter.isdigit() else ord("A")
    letter_index = ord(letter) - value
    new_letter_index = letter_index - catalyst if is_odd else letter_index + catalyst
    return digits[new_letter_index] if letter.isdigit() else letters[new_letter_index]

好处:您可以从当前日期获取日期,而不是从输入中获取日期:

def day_of_week():
    return date.today().strftime("%w")

相关问题