我读过关于如何解决相同问题的多个相关线程,但我无法将解决方案应用于我的代码。
此外,代码应该接收到文本文件的路径,该文本文件必须包含仅由英文字母和标点符号组成的文本和加密数据的目标文件。
有什么建议吗?
def check_alpha(m_string):
list_wanted = ['!', '?', '.', ',', ' ']
for letter in m_string:
if not (letter in list_wanted or letter.isalpha()):
return False
return True and any(letter.isalpha() for letter in m_string)
while True:
string = input("Enter the text to be encrypted: ")
if check_alpha(string):
break
else:
print("Please enter a valid text: ")
continue
while True: # Validating input key
key = input("Enter the key: ")
try:
key = int(key)
except ValueError:
print("Please enter a valid key: ")
continue
break
def caesarcipher(string, key): # Caesar Cipher
encrypted_string = []
new_key = key % 26
for letter in string:
encrypted_string.append(getnewletter(letter, new_key))
return ''.join(encrypted_string)
def getnewletter(letter, key):
new_letter = ord(letter) + key
return chr(new_letter) if new_letter <= 122 else chr(96 + new_letter % 122)
with open('Caesar.txt', 'a') as the_file: # Writing to a text file
the_file.write(caesarcipher(string, key))
print(caesarcipher(string, key))
print('Your text has been encrypted via Caesar-Cipher, the result is in Caesar.txt')发布于 2022-11-21 12:44:33
正如Alex所提到的,您可以使用if条件单独处理所有标点符号:
def caesarcipher(string, key): # Caesar Cipher
encrypted_string = []
new_key = key % 26
for letter in string:
if letter in ['!', '?', '.', ',', ' ']:
encrypted_string.append(letter)
else:
encrypted_string.append(getnewletter(letter, new_key))
return ''.join(encrypted_string)发布于 2022-11-21 12:47:02
你可以做另一个可以与check_alpha()函数相关的函数。
编辑:我希望我能正确理解你的问题。如果没有,那就让我知道。
import pathlib
def load_file(file_path)
from pathlib import Path
if not Path(file_path).exist():
return False
with open(file_path, 'r') as fin:
for line in fin.readlines():
if not check_alpha(line.strip('\n')):
return False
return fin.read() -> this will create '\n' at every end of the line! keep that in mind
def check_aplha(m_string).... -> keep the original
while True:
fin = input("Enter file path with text selected for encryption: ")
uncoded = load_file(fin)
if uncoded: -> everything which is not None, Empty, False or 0 is True
break
else:
print("Please enter a valid file with only valid letters/punctuations.\n")
continue
while True:
fout = input ("Enter file path for output file: ")
try:
if not Path(fout.parent).exists():
Path(fout.parent).mkdir(parents=True, exist_ok=True)
break
else:
break
except NotADirectoryError as err:
print(f'Error {err} has occured. Probably wrong disk selection.')通过这种方式,您完全可以对加密的数据执行此操作。我想所有的规则都适用于加密或解密的数据。
发布于 2022-11-21 12:48:29
Ceaser密码的一个简单示例,可根据您的需要进行跟踪
def encrypt(text,s):
result = ""
# transverse the plain text
for i in range(len(text)):
char = text[i]
# Encrypt uppercase characters in plain text
if is_a_letter(char):
if (char.isupper()):
result += chr((ord(char) + s-65) % 26 + 65)
# Encrypt lowercase characters in plain text
else:
result += chr((ord(char) + s - 97) % 26 + 97)
else:
result += char
return result
#check the above function
text = "CEASER!CIPHER.DEMO"
s = 4 # the length of the shift
my_list = ['!', '?', '.', ',', ' ']
# check if the character is one of the above list
def is_a_letter(text):
for x in range(0,len(my_list)):
if text == my_list[x]:
return False
return True
print("Plain Text : " + text)
print("Shift pattern : " + str(s))
print("Cipher: " + encrypt(text,s))https://stackoverflow.com/questions/74518944
复制相似问题