为什么他的输出结果还是sxa呢,我想要每个字母结果平移3个字母的步长 def secret(s): for arg in s: if type(arg) == 'str': arg = ord(arg + 3) print(arg)
时间: 2025-03-29 07:11:51 浏览: 20
### Python 实现凯撒密码加密功能
要实现一个简单的凯撒密码(Caesar Cipher),可以利用 `ord()` 和 `chr()` 函数完成字符的偏移操作。通过模运算 `%` 来处理字母循环的问题,确保当字母超出范围时能够正确回到起始位置。
#### 完整代码示例
以下是一个完整的 Python 函数,用于实现字符串中每个字母平移 3 位的功能:
```python
def caesar_cipher_encrypt(text, shift=3):
result = []
for char in text:
if 'a' <= char <= 'z': # 处理小写字母
encrypted_char = chr((ord(char) - ord('a') + shift) % 26 + ord('a'))[^1]
result.append(encrypted_char)
elif 'A' <= char <= 'Z': # 处理大写字母
encrypted_char = chr((ord(char) - ord('A') + shift) % 26 + ord('A'))
result.append(encrypted_char)
else: # 非字母字符保持不变
result.append(char)
return ''.join(result)
# 测试函数
input_text = "Hello, World!"
shift_value = 3
output_text = caesar_cipher_encrypt(input_text, shift_value)
print(f"Original Text: {input_text}")
print(f"Encrypted Text: {output_text}")
```
#### 代码解析
1. **遍历输入字符串中的每一个字符**
对于每个字符,判断它是小写字母、大写字母还是其他字符。
2. **计算加密后的字符**
如果是小写字母,则将其转换为相对于 `'a'` 的索引值,并加上偏移量 `shift` 后取模 26,再将结果映射回 ASCII 码并转化为字符。对于大写字母的操作类似,只是基于 `'A'` 进行计算。
3. **保留非字母字符**
如果当前字符不是字母,则直接加入到最终的结果列表中。
4. **拼接结果**
使用 `''.join(result)` 方法将所有加密后的字符组合成一个新的字符串。
---
#### 关键知识点说明
- **`ord()` 和 `chr()` 的作用**
`ord()` 将字符转换为其对应的 ASCII 数值,而 `chr()` 则相反,将数值转换为字符[^3]。这种双向转换使得我们可以轻松地对字符进行加减操作。
- **模运算的作用**
模运算 (`%`) 能够有效解决字母循环问题。例如,在英文字母表中,如果超过 `'z'` 或者低于 `'a'`,可以通过 `(value % 26)` 自动绕回到起点[^2][^4]。
- **大小写区分**
英文字母分为大写和小写两种情况,因此需要分别针对这两种情况进行不同的偏移计算。
---
### 输出示例
假设输入字符串为 `"Hello, World!"`,偏移量为 `3`,则输出如下:
```
Original Text: Hello, World!
Encrypted Text: Khoor, Zruog!
```
---
阅读全文
相关推荐











