Python-3.12.0文档解读-内置函数ord()详细说明+记忆策略+常用场景+巧妙用法+综合技巧

一个认为一切根源都是"自己不够强"的INTJ

个人主页:用哲学编程-CSDN博客
专栏:每日一题------举一反三
Python编程学习
Python内置函数

Python-3.12.0文档解读

目录

详细说明

概述

语法

参数

返回值

示例

注意事项

应用场景

记忆策略

常用场景

[使用场景 1:字符排序和比较](#使用场景 1:字符排序和比较)

[使用场景 2:字符编码转换](#使用场景 2:字符编码转换)

[使用场景 3:简单加密](#使用场景 3:简单加密)

[使用场景 5:字符映射和处理](#使用场景 5:字符映射和处理)

巧妙用法

[使用技巧 1:检测字符串是否排序](#使用技巧 1:检测字符串是否排序)

[使用技巧 2:生成字符范围列表](#使用技巧 2:生成字符范围列表)

[使用技巧 3:实现自定义的字符编码方案](#使用技巧 3:实现自定义的字符编码方案)

[使用技巧 4:找到字符串中第一个非重复字符](#使用技巧 4:找到字符串中第一个非重复字符)

[使用技巧 5:计算字符串的哈希值](#使用技巧 5:计算字符串的哈希值)

综合技巧

[巧妙用法 1:实现基本的字符串加密(维吉尼亚密码)](#巧妙用法 1:实现基本的字符串加密(维吉尼亚密码))

[巧妙用法 2:生成可读的唯一标识符](#巧妙用法 2:生成可读的唯一标识符)

[巧妙用法 3:字符矩阵的旋转操作](#巧妙用法 3:字符矩阵的旋转操作)


详细说明

概述

ord() 函数是 Python 内置函数之一,用于返回表示单个 Unicode 字符的字符串的 Unicode 码点(Unicode code point)的整数值。这个函数在处理 Unicode 字符时非常有用,特别是在需要获取字符的数值表示时。

语法

ord(c)

参数

  • c:表示单个 Unicode 字符的字符串。注意,这个字符串必须是长度为 1 的字符串,如果长度不为 1 或者不是字符串类型,将会抛出 TypeError。

返回值

返回给定字符的 Unicode 码点,类型为整数。

示例

以下是一些 ord() 函数的示例:

python 复制代码
# 获取小写字母 'a' 的 Unicode 码点
unicode_a = ord('a')
print(unicode_a)  # 输出 97

# 获取大写字母 'A' 的 Unicode 码点
unicode_A = ord('A')
print(unicode_A)  # 输出 65

# 获取欧元符号 '€' 的 Unicode 码点
unicode_euro = ord('€')
print(unicode_euro)  # 输出 8364

# 获取中文字符 '你' 的 Unicode 码点
unicode_chinese_char = ord('你')
print(unicode_chinese_char)  # 输出 20320

注意事项

ord() 函数只接受长度为 1 的字符串。如果传入的字符串长度不为 1,将会引发 TypeError 异常。例如:

python 复制代码
ord('ab')  # 将会导致 TypeError: ord() expected a character, but string of length 2 found

虽然 ord() 函数主要用于 Unicode 字符,但它也适用于 ASCII 字符,因为 ASCII 是 Unicode 的一个子集。例如:

python 复制代码
ord('A')  # 返回 65
ord('a')  # 返回 97

ord() 是 chr() 函数的逆函数。chr() 函数用于将 Unicode 码点转换为对应的字符。例如:

python 复制代码
chr(97)  # 返回 'a'
chr(8364)  # 返回 '€'

应用场景

  1. 字符编码:在文本处理和自然语言处理 (NLP) 中,了解字符的 Unicode 码点可以帮助进行字符编码和解码。
  2. 排序和比较:在某些情况下,需要根据字符的 Unicode 码点进行排序或比较。
  3. 数据处理:在一些数据处理任务中,可能需要将字符转换为其数值表示,以便进行进一步处理。

通过了解和使用 ord() 函数,可以更好地处理和操作字符串及其对应的 Unicode 码点。


记忆策略

联想记忆:

  • ord 可以联想到 "ordinal"(序数)的缩写,表示顺序或位置。Unicode 码点正是字符在 Unicode 表中的位置。
  • 可以想象每个字符在 Unicode 表中都有一个"序号",ord() 函数就是获取这个"序号"。

常用场景

当然,以下是几个 ord() 函数的详细使用场景,每行代码都有注释:

使用场景 1:字符排序和比较

在需要对字符串中的字符进行排序或比较时,ord() 函数非常有用。

python 复制代码
# 定义两个字符进行比较
char1 = 'b'
char2 = 'a'

# 使用 ord() 获取字符的 Unicode 码点并进行比较
if ord(char1) > ord(char2):
    print(f"'{char1}' 大于 '{char2}'")  # 输出: 'b' 大于 'a'
else:
    print(f"'{char1}' 小于或等于 '{char2}'")

# 对字符串进行排序
string = "hello"
sorted_string = ''.join(sorted(string, key=ord))
print(sorted_string)  # 输出: 'ehllo'

使用场景 2:字符编码转换

在需要进行字符编码转换或处理特殊字符时,可以使用 ord() 函数获取字符的 Unicode 码点。

python 复制代码
# 定义一个包含特殊字符的字符串
special_chars = "你好,世界!"

# 将字符串中的每个字符转换为 Unicode 码点
unicode_points = [ord(char) for char in special_chars]

# 打印 Unicode 码点
print(unicode_points)  # 输出: [20320, 22909, 65292, 19990, 30028, 65281]

# 将 Unicode 码点转换回字符
reconstructed_string = ''.join(chr(point) for point in unicode_points)
print(reconstructed_string)  # 输出: '你好,世界!'

使用场景 3:简单加密

可以使用 ord() 函数进行简单的字符加密,例如凯撒密码。

python 复制代码
def caesar_encrypt(text, shift):
    encrypted_text = []
    for char in text:
        # 对字母进行加密
        if char.isalpha():
            # 根据字符大小写,使用不同的开始点
            start = ord('A') if char.isupper() else ord('a')
            # 计算加密后的字符
            encrypted_char = chr((ord(char) - start + shift) % 26 + start)
            encrypted_text.append(encrypted_char)
        else:
            # 非字母字符不变
            encrypted_text.append(char)
    return ''.join(encrypted_text)

# 示例加密
original_text = "Hello, World!"
encrypted_text = caesar_encrypt(original_text, 3)
print(encrypted_text)  # 输出: 'Khoor, Zruog!'

使用场景 5:字符映射和处理

在需要对特定字符进行映射或处理时,可以结合 ord() 和 chr() 函数使用。

python 复制代码
# 定义需要处理的字符集
characters = "ABCabc123"

# 定义字符映射表,将每个字符转换为其 Unicode 码点的十六进制表示
char_map = {char: hex(ord(char)) for char in characters}

# 打印字符映射表
for char, hex_value in char_map.items():
    print(f"字符 '{char}' 的 Unicode 码点为: {hex_value}")

# 输出类似:
# 字符 'A' 的 Unicode 码点为: 0x41
# 字符 'B' 的 Unicode 码点为: 0x42
# 字符 'C' 的 Unicode 码点为: 0x43
# 字符 'a' 的 Unicode 码点为: 0x61
# 字符 'b' 的 Unicode 码点为: 0x62
# 字符 'c' 的 Unicode 码点为: 0x63
# 字符 '1' 的 Unicode 码点为: 0x31
# 字符 '2' 的 Unicode 码点为: 0x32
# 字符 '3' 的 Unicode 码点为: 0x33

巧妙用法

ord() 函数虽然简单,但在某些情况下可以用来实现一些巧妙的功能。以下是几个不常见但非常巧妙的使用技巧:

使用技巧 1:检测字符串是否排序

可以使用 ord() 函数快速检测一个字符串是否已经按字母顺序排序。

python 复制代码
def is_sorted_string(s):
    # 用 ord() 获取每个字符的 Unicode 码点,检查是否按顺序排列
    return all(ord(s[i]) <= ord(s[i + 1]) for i in range(len(s) - 1))

# 示例
print(is_sorted_string("abc"))   # 输出: True
print(is_sorted_string("cba"))   # 输出: False
print(is_sorted_string("aabb"))  # 输出: True

使用技巧 2:生成字符范围列表

使用 ord() 和 chr() 函数,可以生成一系列连续的字符列表,比如生成从 'a' 到 'z' 的字母表。

python 复制代码
def generate_char_range(start_char, end_char):
    # 获取起始和结束字符的 Unicode 码点
    start = ord(start_char)
    end = ord(end_char)
    # 生成从起始字符到结束字符之间的所有字符
    return [chr(i) for i in range(start, end + 1)]

# 示例
alphabet = generate_char_range('a', 'z')
print(alphabet)  # 输出: ['a', 'b', 'c', ..., 'z']

使用技巧 3:实现自定义的字符编码方案

可以使用 ord() 来实现一个简单的自定义字符编码方案,在特定情况下可以用于加密或数据处理。

python 复制代码
def custom_encode(text, offset):
    encoded_chars = []
    for char in text:
        # 将每个字符的 Unicode 码点加上偏移量进行编码
        encoded_char = chr(ord(char) + offset)
        encoded_chars.append(encoded_char)
    return ''.join(encoded_chars)

def custom_decode(encoded_text, offset):
    decoded_chars = []
    for char in encoded_text:
        # 将每个编码字符的 Unicode 码点减去偏移量进行解码
        decoded_char = chr(ord(char) - offset)
        decoded_chars.append(decoded_char)
    return ''.join(decoded_chars)

# 示例
original_text = "Hello, World!"
offset = 5

# 编码
encoded_text = custom_encode(original_text, offset)
print(encoded_text)  # 输出: 'Mjqqt,~Btwqi!'

# 解码
decoded_text = custom_decode(encoded_text, offset)
print(decoded_text)  # 输出: 'Hello, World!'

使用技巧 4:找到字符串中第一个非重复字符

使用 ord() 函数来实现更高效地找到字符串中第一个非重复字符。

python 复制代码
def first_non_repeating_char(s):
    # 使用数组来统计字符出现的次数(假设字符在 ASCII 范围内)
    char_count = [0] * 256
    for char in s:
        char_count[ord(char)] += 1
    
    # 找到第一个出现次数为 1 的字符
    for char in s:
        if char_count[ord(char)] == 1:
            return char
    return None

# 示例
test_string = "swiss"
result = first_non_repeating_char(test_string)
print(result)  # 输出: 'w'

使用技巧 5:计算字符串的哈希值

可以使用 ord() 函数来计算字符串的简单哈希值,尽管这不是一个强散列函数,但在某些简单场景下可以使用。

python 复制代码
def simple_hash(s):
    # 使用 ord() 来计算每个字符的哈希值
    hash_value = 0
    for char in s:
        hash_value = (hash_value * 31 + ord(char)) % (10**9 + 7)
    return hash_value

# 示例
test_string = "hello"
print(simple_hash(test_string))  # 输出: 哈希值(如 99162322)

这些技巧展示了 ord() 函数在一些不太常见但非常巧妙的用法。在实际开发中,灵活运用 ord() 和 chr() 函数,可以为解决问题提供一些独特的思路和方法。


综合技巧

当然,以下是几个非常巧妙的 ord() 函数和其他函数或方法组合使用的示例:

巧妙用法 1:实现基本的字符串加密(维吉尼亚密码)

维吉尼亚密码是一种基于凯撒密码的多表密码。可以利用 ord() 和 chr() 函数来实现。

python 复制代码
def vigenere_encrypt(text, key):
    encrypted_text = []
    key_length = len(key)
    for i, char in enumerate(text):
        if char.isalpha():
            # 获取文本和密钥字符的 Unicode 码点
            text_char_code = ord(char)
            key_char_code = ord(key[i % key_length])
            base = ord('A') if char.isupper() else ord('a')
            # 计算加密字符
            encrypted_char = chr((text_char_code + key_char_code - 2 * base) % 26 + base)
            encrypted_text.append(encrypted_char)
        else:
            encrypted_text.append(char)
    return ''.join(encrypted_text)

def vigenere_decrypt(encrypted_text, key):
    decrypted_text = []
    key_length = len(key)
    for i, char in enumerate(encrypted_text):
        if char.isalpha():
            # 获取加密文本和密钥字符的 Unicode 码点
            encrypted_char_code = ord(char)
            key_char_code = ord(key[i % key_length])
            base = ord('A') if char.isupper() else ord('a')
            # 计算解密字符
            decrypted_char = chr((encrypted_char_code - key_char_code + 26) % 26 + base)
            decrypted_text.append(decrypted_char)
        else:
            decrypted_text.append(char)
    return ''.join(decrypted_text)

# 示例
original_text = "Hello, World!"
key = "KEY"

# 加密
encrypted_text = vigenere_encrypt(original_text, key)
print(encrypted_text)  # 输出: 'Rijvs, Uyvjn!'

# 解密
decrypted_text = vigenere_decrypt(encrypted_text, key)
print(decrypted_text)  # 输出: 'Hello, World!'

巧妙用法 2:生成可读的唯一标识符

通过组合 ord() 和 hashlib 模块生成一个基于字符串内容的唯一标识符。

python 复制代码
import hashlib

def generate_readable_id(text):
    # 使用 hashlib 生成字符串的 SHA256 哈希值
    sha256_hash = hashlib.sha256(text.encode()).hexdigest()
    # 将哈希值的前几位转换为可读字符(例如:a-z)
    readable_id = ''.join(chr((ord(char) % 26) + ord('a')) for char in sha256_hash[:8])
    return readable_id

# 示例
unique_id = generate_readable_id("Hello, World!")
print(unique_id)  # 输出: 类似 'fghijabc'

巧妙用法 3:字符矩阵的旋转操作

利用 ord() 函数和 numpy 模块实现字符矩阵的90度旋转。

python 复制代码
import numpy as np

def rotate_matrix_90(matrix):
    # 将字符矩阵转换为 Unicode 码点矩阵
    num_matrix = np.array([[ord(char) for char in row] for row in matrix])
    # 进行矩阵旋转
    rotated_num_matrix = np.rot90(num_matrix, k=-1)
    # 将 Unicode 码点矩阵转换回字符矩阵
    rotated_matrix = [''.join(chr(num) for num in row) for row in rotated_num_matrix]
    return rotated_matrix

# 示例
char_matrix = [
    "abc",
    "def",
    "ghi"
]

rotated_matrix = rotate_matrix_90(char_matrix)
for row in rotated_matrix:
    print(row)  # 输出:
                # gda
                # heb
                # ifc

感谢阅读。

相关推荐
轻口味18 分钟前
命名空间与模块化概述
开发语言·前端·javascript
晓纪同学1 小时前
QT-简单视觉框架代码
开发语言·qt
威桑1 小时前
Qt SizePolicy详解:minimum 与 minimumExpanding 的区别
开发语言·qt·扩张策略
飞飞-躺着更舒服1 小时前
【QT】实现电子飞行显示器(简易版)
开发语言·qt
明月看潮生1 小时前
青少年编程与数学 02-004 Go语言Web编程 16课题、并发编程
开发语言·青少年编程·并发编程·编程与数学·goweb
明月看潮生1 小时前
青少年编程与数学 02-004 Go语言Web编程 17课题、静态文件
开发语言·青少年编程·编程与数学·goweb
Java Fans1 小时前
C# 中串口读取问题及解决方案
开发语言·c#
盛派网络小助手2 小时前
微信 SDK 更新 Sample,NCF 文档和模板更新,更多更新日志,欢迎解锁
开发语言·人工智能·后端·架构·c#
算法小白(真小白)2 小时前
低代码软件搭建自学第二天——构建拖拽功能
python·低代码·pyqt
唐小旭2 小时前
服务器建立-错误:pyenv环境建立后python版本不对
运维·服务器·python