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


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

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

Python-3.12.0文档解读

目录

详细说明

概述

语法

参数

返回值

示例

注意事项

应用场景

记忆策略

常用场景

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

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

使用场景 3:简单加密

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

巧妙用法

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

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

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

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

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

综合技巧

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

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

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


详细说明

概述

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

语法

ord(c)

参数

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

返回值

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

示例

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

# 获取小写字母 '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 异常。例如:

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

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

ord('A')  # 返回 65
ord('a')  # 返回 97

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

chr(97)  # 返回 'a'
chr(8364)  # 返回 '€'

应用场景

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

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


记忆策略

联想记忆:

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

常用场景

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

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

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

# 定义两个字符进行比较
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 码点。

# 定义一个包含特殊字符的字符串
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() 函数进行简单的字符加密,例如凯撒密码。

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() 函数使用。

# 定义需要处理的字符集
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() 函数快速检测一个字符串是否已经按字母顺序排序。

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' 的字母表。

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() 来实现一个简单的自定义字符编码方案,在特定情况下可以用于加密或数据处理。

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() 函数来实现更高效地找到字符串中第一个非重复字符。

def first_non_repeating_char(s):# 使用数组来统计字符出现的次数(假设字符在 ASCII 范围内)char_count = [0] * 256for char in s:char_count[ord(char)] += 1# 找到第一个出现次数为 1 的字符for char in s:if char_count[ord(char)] == 1:return charreturn None# 示例
test_string = "swiss"
result = first_non_repeating_char(test_string)
print(result)  # 输出: 'w'

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

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

def simple_hash(s):# 使用 ord() 来计算每个字符的哈希值hash_value = 0for 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() 函数来实现。

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 模块生成一个基于字符串内容的唯一标识符。

import hashlibdef 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度旋转。

import numpy as npdef 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

感谢阅读。

本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如若转载,请注明出处:http://www.mzph.cn/web/18410.shtml

如若内容造成侵权/违法违规/事实不符,请联系多彩编程网进行投诉反馈email:809451989@qq.com,一经查实,立即删除!

相关文章

【测试SQLite】测试SQLite支持的SQL语句分类

测试SQLite支持的SQL语句分类 为了全面测试SQLite支持的SQL语句&#xff0c;需要设计一个包含多种类型的表结构&#xff0c;并编写各种SQL语句来测试这些功能。目前按照以下分类进行测试&#xff1a; 数据定义语言&#xff08;DDL&#xff09;数据操作语言&#xff08;DML&am…

haproxy+keepalived搭建jeesns论坛

集群实现 软件层分为负载均衡层 Web 层、 数据库和共享存储层。 数据库&#xff1a; ​ keepalivedhaproxypxc&#xff08;MariaDB Galera Cluster&#xff09; 共享存储&#xff1a; ​ ceph分布式集群&#xff0c;cephfs web层&#xff1a; ​ tomcat 负载均衡&#x…

离线deb安装下载及安装实例

1、使用apt download下载deb安装包(不包括依赖包) 1.1仅下载deb安装包 sudo apt download lrzsz 1.2安装载deb安装包 sudo dpkg -i lrzsz_0.12.21-10kylin0k2_arm64.deb 注&#xff1a;dpkg安装deb包&#xff0c;部分存在depends关系&#xff0c;需要使用apt-get -f instal…

Linux 删除SSH密钥(id_ed25519),重新生成

在Linux系统中&#xff0c;重新生成SSH密钥&#xff08;比如id_ed25519&#xff09;的过程包括删除现有的密钥文件并生成一个新的。 以下是具体的步骤&#xff1a; 0. 查看下是否有密钥 1. 删除原有的id_ed25519密钥 默认情况下&#xff0c;SSH密钥存储在用户的主目录下的 .…

想让企业“火力全开”?找六西格玛培训公司就对了!

在如今的市场环境中&#xff0c;企业面临着不断变化的挑战和无限的可能。要在这场竞争中独领风骚&#xff0c;实现稳健的增长&#xff0c;六西格玛作为一种以数据驱动的管理理论&#xff0c;提供了实际可行的解决方案。六西格玛培训公司&#xff0c;作为这一领域的专家&#xf…

身为UI设计老鸟,不学点3D,好像要被潮流抛弃啦,卷起来吧。

当前3D原则在UI设计中运用的越来越多&#xff0c;在UI设计中&#xff0c;使用3D元素可以为界面带来以下几个价值&#xff1a; 增强视觉冲击力&#xff1a;3D元素可以通过立体感和逼真的效果&#xff0c;为界面增添视觉冲击力&#xff0c;使得设计更加生动、吸引人&#xff0c;并…

AI PC 的曙光:微软大胆出击与苹果竞争

AI PC 的曙光&#xff1a;微软大胆出击与苹果竞争 AI PC 的曙光&#xff1a;微软大胆出击与苹果竞争 概述 微软已正式进入 AI PC 时代&#xff0c;并且毫不避讳地直接向苹果的 MacBook 发起攻击。随着代号为“Copilot”的笔记本电脑的推出&#xff0c;微软准备彻底改变我们与…

AI大模型如何“开窍”?算法、数据与架构的三重奏

一、算法创新 1. 探索新的学习范式 自监督学习&#xff1a;利用未标注数据让模型自我学习&#xff0c;提高模型的泛化能力。元学习&#xff1a;让模型学会如何学习&#xff0c;以便在不同任务之间快速迁移。强化学习&#xff1a;通过试错与奖励机制&#xff0c;使模型在与环境…

012、哈希_应用场景

图为关系型数据表记录的两条用户信息,用户的属性作为表的列,每条用户信息作为行。 如果将其用哈希类型存储,如图所示。 相比于使用字符串序列化缓存用户信息,哈希类型变得更加直观,并且在更新操作上会更加便捷。可以将每个用户的id定义为键后缀,多对field-value对应每…

Springboot 开发 -- 集成 JWT 构建安全的API接口服务

一、JWT简介 JSON Web Token&#xff08;JWT&#xff09;是一种基于JSON的开放标准&#xff08;RFC 7519&#xff09;&#xff0c;用于在各方之间以JSON对象的形式安全地传输信息。JWT可以被签名&#xff0c;确保信息在传输过程中的完整性和可信度。JWT通常用于身份验证和信息…

12-常用类

1. 包装类 针对八种基本数据类型封装的相应的引用类型。 有了类的特点&#xff0c;就可以调用类中的方法。&#xff08;为什么要封装&#xff09; 基本数据类型包装类booleanBooleanchar CharacterbyteByteshortShortintIntegerlongLongfloatFloatdoubleDouble 1.1 …

C# Sdcb.PaddleInference 中文分词、词性标注

C# Sdcb.PaddleInference 中文分词、词性标注 目录 效果 项目 代码 下载 参考 效果 项目 代码 using Sdcb.PaddleNLP.Lac; using System; using System.Collections.Generic; using System.Data; using System.Linq; using System.Windows.Forms; namespace C__Sdcb.Pad…

kafka-消费者组-点对点测试

文章目录 1、点对点测试1.1、获取 kafka-consumer-groups.sh 的帮助信息1.2、列出所有的 消费者组1.3、创建消费者1并指定组 my_group11.4、创建消费者2并指定组 my_group11.5、创建消费者3并指定组 my_group11.6、创建生产者发送消息到 my_topic1 主题1.6.1、发送第一条消息ro…

华为WLAN无线组网技术与解决方案

WLAN无线组网技术与解决方案 网络拓扑采用AP和AC旁挂式无线组网 配置思路&#xff1a; 1.让AP上线 1.1&#xff0c;使得AP能够获得IP地址 配置步骤&#xff1a; 1.把AC当作一个一个有管理功能的三层交换机 sys Enter system view, return user view with CtrlZ. [AC6605]vlan …

【Qt】Qt框架文件处理精要:API解析与应用实例:QFile

文章目录 前言&#xff1a;1. Qt 文件概述2. 输入输出设备类3. 文件读写类3.1. 打开open3.2. 读read / readline/ readAll3.3. 写write3.4. 关闭close 4. 读写文件示例5. 文件件和目录信息类总结&#xff1a; 前言&#xff1a; 在现代软件开发中&#xff0c;文件操作是应用程序…

如何恢复已删除/丢失或未保存的 PDF 文件?

许多用户曾因某些问题删除或丢失 PDF 文件。此外&#xff0c;一些用户在关闭应用程序时未保存 PDF 文件&#xff0c;从而丢失 PDF 文件。您可以尝试一些解决方案来恢复已删除的 PDF 文件、恢复未保存的 PDF 文件&#xff0c;以及在任何其他数据丢失情况下挽救丢失的 PDF 文件。…

优化效率,简化流程:探索工资结算系统的重要性与实施方法

在现代企业中&#xff0c;工资结算是一项重要而复杂的任务。为了更好地管理和处理员工的工资事务&#xff0c;许多企业采用工资结算系统。本文将探讨工资结算系统的重要性&#xff0c;并介绍一些实施该系统的方法。 ### 1. 概述 工资结算系统是一种自动化的软件系统&#xff0…

apexcharts数据可视化之极坐标区域图

apexcharts数据可视化之极坐标区域图 有完整配套的Python后端代码。 本教程主要会介绍如下图形绘制方式&#xff1a; 基础极坐标区域图单色极坐标区域图 基础极坐标区域图 import ApexChart from react-apexcharts;export function BasicPolar() {// 数据序列const series…

【论文阅读|cryoET】DeepETPicker:使用弱监督深度学习的快速准确cryoET三维颗粒挑选算法

题目 DeepETPicker: Fast and accurate 3D particle picking for cryo-electron tomography using weakly supervised deep learning 发表期刊&#xff1a; Nature Communications 发表时间&#xff1a;2024.02 Accepted 作者&#xff1a;Guole Liu, Tongxin Niu 中科院自动化…

2024全新升级版家政服务小程序源码 支持家政预约+上门服务+SAAS系统+可二开

随着科技的飞速发展&#xff0c;家政服务行业也迎来了数字化转型的浪潮。为了满足市场日益增长的需求&#xff0c;分享一款2024全新升级版的家政服务小程序源码。该源码不仅支持家政预约和上门服务&#xff0c;还集成了SAAS系统&#xff0c;并支持二次开发&#xff0c;为用户带…