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] * 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() 函数来计算字符串的简单哈希值,尽管这不是一个强散列函数,但在某些简单场景下可以使用。

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() 函数来实现。

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

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

感谢阅读。

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

如若内容造成侵权/违法违规/事实不符,请联系我们进行投诉反馈qq邮箱809451989@qq.com,一经查实,立即删除!

相关文章

JD3-40/23漏电继电器 AC220V 50-500mA 0.1s 导轨安装

系列型号&#xff1a; JD3-40/13漏电继电器JD3-40/23漏电继电器JD3-40/33漏电继电器JD3-40/43漏电继电器 JD3-70/13漏电继电器JD3-70/23漏电继电器JD3-70/33漏电继电器JD3-70/43漏电继电器 JD3-100/23漏电继电器JD3-100/43漏电继电器JD3-100/33漏电继电器JD3-100/13漏电继电…

ARM架构与分类

ARM架构&#xff0c;曾称进阶精简指令集机器&#xff08;Advanced RISC Machine&#xff09;更早称作Acorn RISC Machine&#xff0c;是一个32位精简指令集&#xff08;RISC&#xff09;处理器架构。 主要是根据FPGA zynq-7000的芯片编写的知识思维导图总结&#xff0c;没有会…

【NumPy】全面解析NumPy随机数生成器:使用numpy.random的实用技巧

&#x1f9d1; 博主简介&#xff1a;阿里巴巴嵌入式技术专家&#xff0c;深耕嵌入式人工智能领域&#xff0c;具备多年的嵌入式硬件产品研发管理经验。 &#x1f4d2; 博客介绍&#xff1a;分享嵌入式开发领域的相关知识、经验、思考和感悟&#xff0c;欢迎关注。提供嵌入式方向…

【软件设计师】算法

1、算法的效率 时间复杂度:程序从开始到结束所需要的时间 空间复杂度&#xff1a;算法在运行过程中临时占用存储空间大小的度量 时间渐近复杂度&#xff1a;时间复杂度由最高次幂决定(判断大小技巧&#xff1a;将n10代入&#xff09; O(log2 n):二分查找法 O(n&#xff09;:for…

720VR三维立体小程序源码系统 手机电脑端自适应 前后端分离 带完整的安装代码包以及搭建教程

系统概述 720VR 三维立体小程序源码系统是基于先进的技术和理念打造而成的综合性平台。它融合了虚拟现实技术、移动互联网技术以及计算机编程技术&#xff0c;旨在为用户提供沉浸式的 720 度全景体验。 该系统的设计充分考虑了用户的需求&#xff0c;无论是在手机端还是电脑端…

从零学爬虫:使用比如说说解析网页结构

新书上架~&#x1f447;全国包邮奥~ python实用小工具开发教程http://pythontoolsteach.com/3 欢迎关注我&#x1f446;&#xff0c;收藏下次不迷路┗|&#xff40;O′|┛ 嗷~~ 目录 一、引言 二、网页结构概述 示例&#xff1a;查看网页结构 三、使用比如说说解析网页 1.…

抖音小程序如何生成二维码

1.页面结构 <image src{{imgUrl}}></image>2.代码结构 onLoad(options) {if (options.param) {var qrCode 13246897451257 //传入生成二维码的字符串this.generateQRCode(qrCode);}},//调起第三方库qrCodegenerateQRCode(text) {//调用了qrCode里面的apiconst api…

uniapp App去除iOS底部安全区域白边

未设置的情况下&#xff0c;iOS底部安全区域白边 如图&#xff1a; 去除方法&#xff1a; 在 mainfest.json 中加入一下代码&#xff1a; "safearea" : {"bottom" : {"offset" : "none"} }, 去除效果展示&#xff1a;

HTTP请求拦截器链

文章目录 HTTP请求拦截器链需求定义写一个Controller方法接口写三个http请求拦截器把拦截器加入到配置中&#xff0c;并且配置拦截规则在postman里面发送请求&#xff0c;看下测试结果是否正确 HTTP请求拦截器链 需求定义 我们写一个包含三个HTTP请求拦截器的拦截器链&#x…

盲人无障碍设施建设:科技之光照亮前行之路

在这个快速发展的时代&#xff0c;科技的每一次进步都在悄然改变着我们的生活&#xff0c;尤其在提升特殊群体生活质量方面&#xff0c;展现出前所未有的力量。今天&#xff0c;让我们聚焦于盲人无障碍设施建设这一重要话题&#xff0c;通过一款名为“蝙蝠避障”的辅助软件&…

饲料粉碎混合机组:打造精细化养殖

饲料粉碎混合机组是畜牧业和养殖业中不可或缺的设备。它集饲料粉碎和混合于一体&#xff0c;可以高效地处理各种饲料原料&#xff0c;提高饲料的均匀度和营养价值。 具体来说&#xff0c;饲料粉碎混合机组的主要功能包括将饲料原料进行粉碎&#xff0c;增加其表面积和调质粒度…

小程序唯品会Authorization sign

声明 本文章中所有内容仅供学习交流使用&#xff0c;不用于其他任何目的&#xff0c;抓包内容、敏感网址、数据接口等均已做脱敏处理&#xff0c;严禁用于商业用途和非法用途&#xff0c;否则由此产生的一切后果均与作者无关&#xff01;wx a15018601872 本文章未…

13.Redis之数据库管理redis客户端JAVA客户端

1.数据库管理 mysql 中有一个重要的概念,database 1个 mysql 服务器上可以有很多个 database1个 database 上可以有很多个 表mysql 上可以随心所欲的 创建/删除 数据库~~ Redis 提供了⼏个⾯向 Redis 数据库的操作&#xff0c;分别是 dbsize、select、flushdb、flushall 命令…

Web漏洞:网络安全的隐形杀手

随着互联网的深入发展&#xff0c;Web应用程序已成为企业和个人生活中不可或缺的一部分。然而&#xff0c;随着Web应用的普及&#xff0c;网络安全问题也日益凸显&#xff0c;其中Web漏洞是网络安全领域面临的重大挑战之一。本文将详细探讨一些常见的Web漏洞及其潜在的危害&…

期望薪资25K,新浪微博测试4轮面试,没想到过了。。

一面60min 1、离职原因 2、简单的算法题&#xff0c;就是我会什么让写什么&#xff1a; 冒泡排序&#xff0c;二分查找&#xff08;其实这么简单&#xff0c;我还是在指引下写出来的&#xff0c;自己实在太菜&#xff09; 3、简历问答&#xff08;随机抽几个点问&#xff0…

弘君资本:沪指跌0.46%,电力板块逆市爆发,半导体板块强势

28日&#xff0c;沪指早盘窄幅震动&#xff0c;午后回落走低&#xff1b;深证成指、创业板指大幅下探&#xff1b;两市成交额小幅萎缩。 截至收盘&#xff0c;沪指跌0.46%报3109.57点&#xff0c;深证成指跌1.23%报9391.05点&#xff0c;创业板指跌1.35%报1806.25点&#xff0c…

AutoDL搭建 ChatGLM3

租用新实例 这里选择的西北 B 区、RTX 409024GB 创建虚拟环境并激活 # 安装虚拟环境至数据盘 conda create --prefix /root/autodl-tmp/envs/chatglm3-demo python3.10# 激活虚拟环境 conda activate /root/autodl-tmp/envs/chatglm3-demo拉取ChatGLM3仓库代码 # 开启学术…

无人机+EasyDSS互联网视频平台:构建秸秆焚烧监控的“天眼”系统

一、方案背景 在每年的夏收时节&#xff0c;秸秆禁烧成为各地政府面临的一项重要任务。随着夏收季节的结束&#xff0c;大量农作物秸秆的处理问题逐渐凸显。一方面农作物种植面积辽阔&#xff0c;禁烧区域面积较大&#xff0c;监管巡逻人员的数量有限&#xff0c;无法全面顾及…

解锁数据奥秘,SPSS for Mac/WIN助您智赢未来

在信息爆炸的时代&#xff0c;数据已成为推动社会进步和企业发展的核心动力。但如何将这些海量数据转化为有价值的洞见&#xff0c;却是摆在每一位决策者面前的难题。IBM SPSS Statistics&#xff0c;一款专业的统计分析软件&#xff0c;凭借其强大的功能和易用的界面&#xff…

前端AI 工具对开发效率提升的探索

1、AI会100% 取代前端工程师吗&#xff1f; AI技术在未来可能会改变程序员的工作方式&#xff0c;将显著减少开发者的数量&#xff0c;但不太可能完全替代程序员。 AI 对技术的影响&#xff1a;可以大幅度提效。 提问AI模型&#xff1a; AI能取代开发者吗&#xff1f; AI 目前…