字符替换加密: 编写一个函数`encrypt`,使用字典 `a: m, b: n, ... z: l}` 的对应规则加密字符串`s3 = "encryption"`。
时间: 2024-10-29 09:21:13 浏览: 22
在Python中,我们可以创建一个名为`encrypt`的函数,它接受一个字符串作为输入,并使用给定的字母映射进行替换加密。这里是一个简单的实现示例:
```python
def encrypt(s, mapping):
encrypted_text = ""
for char in s:
if char.isalpha():
# 将小写字母转换为大写并查找映射
mapped_char = mapping.get(char.upper(), char)
encrypted_text += mapped_char
else:
# 非字母字符保持不变
encrypted_text += char
return encrypted_text
# 定义字母映射
mapping = {'A': 'M', 'B': 'N', 'Z': 'L', 'a': 'm', 'b': 'n', 'z': 'l', ' ': ''} # 空格忽略
s3 = "encryption"
encrypted_s3 = encrypt(s3, mapping)
print("Encrypted:", encrypted_s3)
```
在这个例子中,我们假设所有输入都是小写字母,并忽略了空格。如果你需要考虑其他情况,比如混合大小写或者保留空格等,可以在`mapping`字典中相应地添加更多规则。
相关问题
实现函数encrypt(),带两个输入参数:一个10位字符串秘钥和一个数字字符串(要加密的明文),返回明文的加密密文。 要加密的明文根据10位字符串密钥对应的位置替换每个数字。如输入的10位字符串“3941068257”,分别将数字0、1、2替换为3、9、4,以此类推。 输入格式: 第一行输入10位字符串密钥 第二行输入一个数字字符串 输出格式: 输出加密过的数字字符串 输入样例: 在这里给出一组输入。例如: 3941068257 0123456789 输出样例: 在这里给出相应的输出。例如: 3941068257 代码长度限制 16 KB 时间限制 400 ms 内存限制 64 MB
```python
def encrypt(key, plaintext):
# 建立密钥字典,将密钥对应的数字替换为新的数字
key_dict = {}
for i in range(10):
key_dict[str(i)] = key[i]
# 将明文中的数字按照密钥进行替换
ciphertext = ''
for num in plaintext:
ciphertext += key_dict[num]
return ciphertext
```
测试:
```python
key = '3941068257'
plaintext = '0123456789'
ciphertext = encrypt(key, plaintext)
print(ciphertext) # '3941068257'
```
研究上面的代码,掌握string库、maketrans() 函数、translate()函数的用法后,编写一个程序实现凯撒加密:输入一个字符串,对字符串中的字母和数字进行加密(规定加密偏移量为3,即后移三位),并输出加密后的字符串。
### 回答1:
以下是实现凯撒加密的Python代码:
```python
import string
# 构建映射表
shift = 3
lowercase = string.ascii_lowercase
uppercase = string.ascii_uppercase
digits = string.digits
trans_table = str.maketrans(lowercase + uppercase + digits,
lowercase[shift:] + lowercase[:shift] +
uppercase[shift:] + uppercase[:shift] +
digits[shift:] + digits[:shift])
# 加密函数
def caesar_cipher(text):
return text.translate(trans_table)
# 测试
text = "Hello, World! 123"
encrypted_text = caesar_cipher(text)
print(encrypted_text)
```
输出结果为:
```
Khoor, Zruog! 456
```
代码中,我们首先使用 `string` 模块获取了小写字母、大写字母和数字,然后使用 `maketrans()` 函数构建了一个映射表 `trans_table`,将每个字符映射到其加密后的字符。
然后我们定义了一个 `caesar_cipher()` 函数,它接收一个字符串作为参数,并返回加密后的字符串。在函数内部,我们调用了字符串的 `translate()` 方法,该方法根据映射表 `trans_table` 将字符串中的字符进行加密。
最后,我们对字符串 "Hello, World! 123" 进行加密,并输出加密后的结果。
### 回答2:
以下是使用Python编写的凯撒加密程序:
```python
def caesar_encrypt(string):
shift = 3 # 加密偏移量为3
alphabet = "abcdefghijklmnopqrstuvwxyz"
digits = "0123456789"
# 构建加密字典
trans_dict = {}
for char in alphabet:
trans_dict[char] = alphabet[(alphabet.index(char) + shift) % len(alphabet)]
for digit in digits:
trans_dict[digit] = digits[(digits.index(digit) + shift) % len(digits)]
# 进行加密
encrypted_string = string.translate(str.maketrans(trans_dict))
return encrypted_string
# 测试示例
input_string = input("请输入要加密的字符串:")
encrypted_string = caesar_encrypt(input_string)
print("加密后的字符串为:", encrypted_string)
```
使用以上代码,我们首先定义了一个 `caesar_encrypt` 函数,它接收一个字符串作为输入,在函数中我们定义了加密偏移量 `shift` 为3,字母表 `alphabet` 为小写字母表,数字表 `digits` 为数字0到9。
接下来,我们构建了一个加密字典 `trans_dict`,用于记录每个字符加密后对应的字符。首先,我们遍历字母表,对于每个字母,我们通过 `alphabet.index(char)` 获取其在字母表中的索引位置,然后将加密后的字母根据 `(索引 + shift) % len(alphabet)` 的结果来确定。同样的,我们也遍历了数字表,并构建了数字的加密映射关系。
最后,我们使用内置函数 `str.maketrans` 来生成转换表,并使用 `translate` 函数将输入字符串按照转换表进行加密。最后,我们将加密后的字符串输出给用户。
希望以上回答能够帮助你理解并编写凯撒加密的程序。
阅读全文