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.rhkb.cn/news/334849.html

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

相关文章

网易面试:手撕定时器

概述&#xff1a; 本文使用STL容器-set以及Linux提供的timerfd来实现定时器组件 所谓定时器就是管理大量定时任务&#xff0c;使其能按照超时时间有序地被执行 需求分析&#xff1a; 1.数据结构的选择&#xff1a;存储定时任务 2.驱动方式&#xff1a;如何选择一个任务并执…

微火问答:全域外卖和本地生活服务是同个项目吗?

当前&#xff0c;本地生活赛道火爆程度不断升级&#xff0c;作为其主要板块之一的团购外卖也持续迸发出新的活力。而全域运营的出现无疑是给团购外卖这把正在熊熊燃烧的烈火&#xff0c;又添了一把新柴&#xff01; 所谓全域运营&#xff0c;简单来说&#xff0c;就是指所有领…

xjar加密springboot的jar包,并编译为执行程序

场景&#xff1a;当前项目需要进行jar包部署在windows环境和linux环境&#xff0c;并要求使用xjar加密。 1. xjar加密 源码程序自行搜索&#xff0c;这里只介绍加密及运行&#xff0c;运行加密程序&#xff0c;指定jar包&#xff0c;输入密码 2. 加密后的目录 3. go程序编译 …

HCIP-Datacom-ARST自选题库__BGP/MPLS IP VPN简答【3道题】

1.在BGP/MPLSIPVPN场景中&#xff0c;如果PE设备收到到达同一目的网络的多条路由时&#xff0c;将按照定的顺序选择最优路由。请将以下内容按照比较顺序进行排序。 2.在如图所示的BGP/MPLSIP VPN网络中&#xff0c;管理员准备通过Hub-Spoke组网实现H站点对VPM流量的集中管控&am…

HNU-人工智能-作业3

人工智能-作业3 计科210X 甘晴void 202108010XXX 1.贝叶斯网络 根据图所给出的贝叶斯网络&#xff0c;其中&#xff1a;P(A)0.5&#xff0c;P(B|A)1&#xff0c; P(B|A)0.5&#xff0c; P(C|A)1&#xff0c; P(C|A)0.5&#xff0c;P(D|BC)1&#xff0c;P(D|B, C)0.5&#xff…

如何将天猫内容保存为PDF格式?详细步骤与实战解析

新书上架~&#x1f447;全国包邮奥~ python实用小工具开发教程http://pythontoolsteach.com/3 欢迎关注我&#x1f446;&#xff0c;收藏下次不迷路┗|&#xff40;O′|┛ 嗷~~ 目录 一、引言&#xff1a;保存天猫内容的重要性 二、环境准备与工具安装 1. 安装必要的Python包…

宝塔部署Java+Vue前后端分离项目

1. 服务器 服务器选择Linux的CentOS7的版本 2. 宝塔Linux面板 2.1 百度搜索宝塔 2.2 进去之后点击立即免费安装 2.3 选择Linux在线安装&#xff0c;输入服务器信息进行安装(也可以选择其他方式) 安装完成之后会弹一个宝塔的应用面板&#xff0c;并附带有登录名称和密码&…

Linux快速定位日志 排查bug技巧和常用命令

1. 快速根据关键字定位错误信息 grep 在 Linux 系统中&#xff0c;可以使用 grep 命令来查找日志文件中包含特定关键字的行。假设你的日志文件路径为 /var/log/myapp.log&#xff0c;你想要查找包含关键字 "abc" 的日志内容&#xff0c;可以按照以下步骤操作&#…

【机器学习聚类算法实战-5】机器学习聚类算法之DBSCAN聚类、K均值聚类算法、分层聚类和不同度量的聚集聚类实例分析

&#x1f3a9; 欢迎来到技术探索的奇幻世界&#x1f468;‍&#x1f4bb; &#x1f4dc; 个人主页&#xff1a;一伦明悦-CSDN博客 ✍&#x1f3fb; 作者简介&#xff1a; C软件开发、Python机器学习爱好者 &#x1f5e3;️ 互动与支持&#xff1a;&#x1f4ac;评论 &…

【微服务】安装docker以及可视化界面

1.配置yum下载源为aliyun源 yum-config-manager --add-repo https://mirrors.aliyun.com/docker-ce/linux/centos/docker-ce.repo2.下载docker不加版本号默认为最新版本 yum install -y docker-ce3.启动以及开机自启 #启动docker命令 systemctl start docker #设置开机自启命令…

软件功能测试的类型和流程分享

在现代社会&#xff0c;软件已经成为人们生活中不可或缺的一部分&#xff0c;而在软件的开发过程中&#xff0c;功能测试是不可或缺的环节。软件功能测试指的是对软件系统的功能进行检查和验证&#xff0c;以确保软件在各种情况下能够正常运行&#xff0c;并且能够按照用户需求…

【CTF Web】CTFShow web5 Writeup(SQL注入+PHP+位运算)

web5 1 阿呆被老板狂骂一通&#xff0c;决定改掉自己大意的毛病&#xff0c;痛下杀手&#xff0c;修补漏洞。 解法 注意到&#xff1a; <!-- flag in id 1000 -->拦截很多种字符&#xff0c;连 select 也不给用了。 if(preg_match("/\|\"|or|\||\-|\\\|\/|\…

【电路笔记】-状态可变滤波器

状态可变滤波器 文章目录 状态可变滤波器1、概述2、**状态可变滤波器电路**3、状态可变滤波器示例4、陷波滤波器设计5、总结状态可变滤波器是一种多反馈滤波器电路,可以从同一单个有源滤波器设计中同时产生所有三种滤波器响应:低通、高通和带通。 1、概述 状态可变滤波器使用…

Vue中使用Vue-scroll做表格使得在x轴滑动

页面效果 首先 npm i vuescroll 在main.js中挂载到全局 页面代码 <template><div class"app-container"><Header :titletitle gobackgoBack><template v-slot:icon><van-icon clickgoHome classicon namewap-home-o /></templat…

HackTheBox-Machines--Beep

Beep测试过程 1 信息收集 nmap端口扫描 gryphonwsdl ~ % nmap -sC -sV 10.129.137.179 Starting Nmap 7.94 ( https://nmap.org ) at 2024-05-28 14:39 CST Nmap scan report for 10.129.229.183 Host is up (0.28s latency). Not shown: 988 closed tcp ports (conn-refused…

DSP6657 GPIO中断学习

1 简介 使用创龙板卡的KEY2按键通过中断的方式控制LED3的亮灭 2 中断学习 在C665x设备上&#xff0c;CPU中断是通过C66x CorePac中断控制器进行配置的。该中断控制器允许最多128个系统事件被编程到任意12个CPU可屏蔽中断输入&#xff08;CPUINT4至CPUINT15&#xff09;、CPU…

如何成为一名合格的JAVA程序员?

如何成为一名称职的Java编程人员&#xff1f;你一定不能错过的两本书。 第一本《Java核心技术速学版&#xff08;第3版&#xff09;》&#xff01; 1.经典Java作品《Java核心技术》的速学版本&#xff0c;降低学习门槛&#xff0c;帮助读者更容易学习Java&#xff0c;更快地把…

HTML+CSS TAB导航栏

效果演示 这段代码实现了一个名为"Tab导航栏"的效果,它是一个基于CSS的导航栏,包含五个选项卡,每个选项卡都有一个带有渐变背景色的滑块,当用户点击选项卡时,滑块会滑动到相应的位置。同时,选中的选项卡会变为白色,未选中的选项卡会变为灰色。 Code <!DOC…

基于FPGA实现LED的闪烁——HLS

基于FPGA实现LED的闪烁——HLS 引言&#xff1a; ​ 随着电子技术的飞速发展&#xff0c;硬件设计和开发的速度与效率成为了衡量一个项目成功与否的关键因素。在传统的硬件开发流程中&#xff0c;工程师通常需要使用VHDL或Verilog等硬件描述语言来编写底层的硬件逻辑&#xff0…

kafka-主题创建(主题操作的命令)

文章目录 1、topic主题操作的命令1.1、创建一个3分区1副本的主题1.1.1、获取 kafka-topics.sh 的帮助信息1.1.2、副本因子设置不能超过集群中broker的数量1.1.3、创建一个3分区1副本的主题1.1.4、查看所有主题1.1.5、查看主题详细描述 1、topic主题操作的命令 kafka发送消息会存…