首页 最新 热门 推荐

  • 首页
  • 最新
  • 热门
  • 推荐

Python-VBA函数之旅-chr函数

  • 25-03-03 04:30
  • 4771
  • 11397
blog.csdn.net

目录

1、chr函数:

1-1、Python:

1-2、VBA:

2、相关文章:

个人主页:非风V非雨-CSDN博客
​​​​​​​​​​​​​​


        chr函数在Python编程中有多种应用场景,它主要用于将Unicode码点转换为对应的字符。常见的应用场景有:

1、字符(串)处理:chr函数可以将Unicode编码转换为对应的字符,可以用于处理字符串中的特殊字符或者进行字符替换操作。

2、加密解密:在一些加密算法中,字符的转换和替换是常见的操作,chr函数可以用于将数字编码转换为对应的字符,从而实现加密和解密的功能。

3、字符编码转换:在处理文本文件或者网络传输时,经常需要进行字符编码的转换,chr函数可以将Unicode编码转换为对应的字符,方便进行字符编码的转换操作。

4、图形界面开发:在图形界面开发中,有时需要根据用户输入的字符来进行相应的操作或者显示,chr函数可以将Unicode编码转换为对应的字符,方便进行图形界面的开发。

5、配合ord函数使用:chr()函数经常与ord()函数一起使用,以实现字符和Unicode码点之间的双向转换,这在处理需要精确控制字符编码的场景时非常有用。

6、生成控制字符:控制字符如换行符(`\n`)、制表符(`\t`)等,在Python中通常使用转义序列来表示。但你也可以使用chr()函数和相应的Unicode码点来生成这些字符。

7、创建自定义异常:在创建自定义异常时,chr()也很有用。您可以使用chr()生成一个Unicode字符,作为异常名称的一部分,使异常更加描述性和可读性。

        总之,chr()函数是Python中处理字符串和Unicode字符的强大工具,在许多不同的情况下都有实际应用。

1、chr函数:
1-1、Python:
  1. # 1.函数:chr
  2. # 2.功能:将整型参数值转换为对应的Unicode字符
  3. # 3.语法:chr(i)
  4. # 4.参数:i可以是十进制或十六进制形式的数字:
  5. # 4-1、十进制形式:i的取值范围为[0, 1114111]
  6. # 4-2、十六进制形式:i的取值范围为[0, 0x10ffff]
  7. # 5.返回值:返回Unicode码位为整数i对应的字符,例如,chr(97)返回字符串'a',chr(65)返回字符串'A',与ord()函数相反
  8. # 6.说明:
  9. # 6-1、如果参数i的值超出取值范围,则会抛出ValueError错误:
  10. # ValueError: chr() arg not in range(0x110000)
  11. # print(chr(1114112))
  12. # 7.示例:
  13. # 应用1:字符(串)处理
  14. # 将ASCII码列表转换为字符列表
  15. ascii_codes = [65, 66, 67]
  16. chars = [chr(code) for code in ascii_codes]
  17. print(chars)
  18. # ['A', 'B', 'C']
  19. # 将字符串中的每个字符转换为对应的ASCII码列表
  20. s = "Myelsa"
  21. ascii_codes = [ord(char) for char in s]
  22. print(ascii_codes)
  23. # [77, 121, 101, 108, 115, 97]
  24. # 生成常见的特殊符号
  25. # 生成制表符(Tab)
  26. tab_char = chr(9)
  27. print(tab_char)
  28. # 生成换行符(Newline)
  29. newline_char = chr(10)
  30. print(newline_char)
  31. # 生成回车符(Carriage Return)
  32. carriage_return_char = chr(13)
  33. print(carriage_return_char)
  34. # 生成空格
  35. space_char = chr(32)
  36. print(space_char)
  37. # 生成扩展ASCII码中的特殊符号
  38. # 生成货币符号(例如美元符号)
  39. dollar_sign = chr(36)
  40. print(dollar_sign)
  41. # 生成版权符号
  42. copyright_symbol = chr(169)
  43. print(copyright_symbol)
  44. # 生成注册商标符号
  45. registered_symbol = chr(174)
  46. print(registered_symbol)
  47. # 生成商标符号
  48. trademark_symbol = chr(8482)
  49. print(trademark_symbol)
  50. # $
  51. # ©
  52. # ®
  53. # ™
  54. # 生成Unicode特殊符号
  55. # 生成笑脸符号
  56. smiley_face = chr(0x1F604)
  57. print(smiley_face)
  58. # 生成爱心符号
  59. heart_symbol = chr(0x2665)
  60. print(heart_symbol)
  61. # ?
  62. # ♥
  63. # 应用2:加密解密
  64. def encrypt(text, shift):
  65. """
  66. 加密函数,将文本中的每个字符通过ASCII码偏移进行加密。
  67. :param text: 要加密的文本
  68. :param shift: 偏移量
  69. :return: 加密后的文本
  70. """
  71. encrypted_text = ""
  72. for char in text:
  73. # 将字符转换为ASCII码
  74. ascii_code = ord(char)
  75. # 对ASCII码进行偏移
  76. shifted_code = (ascii_code + shift) % 256 # 取模保证结果在ASCII码范围内
  77. # 将偏移后的ASCII码转换回字符
  78. encrypted_char = chr(shifted_code)
  79. encrypted_text += encrypted_char
  80. return encrypted_text
  81. def decrypt(encrypted_text, shift):
  82. """
  83. 解密函数,将加密后的文本通过ASCII码偏移进行解密。
  84. :param encrypted_text: 加密后的文本
  85. :param shift: 偏移量(应与加密时使用的偏移量相同,但方向相反)
  86. :return: 解密后的文本
  87. """
  88. decrypted_text = ""
  89. for char in encrypted_text:
  90. # 将字符转换为ASCII码
  91. ascii_code = ord(char)
  92. # 对ASCII码进行反向偏移
  93. reversed_shift = -shift
  94. shifted_back_code = (ascii_code + reversed_shift) % 256 # 取模保证结果在ASCII码范围内
  95. # 将偏移回的ASCII码转换回字符
  96. decrypted_char = chr(shifted_back_code)
  97. decrypted_text += decrypted_char
  98. return decrypted_text
  99. # 主函数
  100. if __name__ == '__main__':
  101. original_text = "Hello, Python!"
  102. shift = 8 # 偏移量,可以根据需要调整
  103. # 加密文本
  104. encrypted = encrypt(original_text, shift)
  105. print(f"加密文本: {encrypted}")
  106. # 解密文本
  107. decrypted = decrypt(encrypted, shift)
  108. print(f"解密文本: {decrypted}")
  109. # 加密文本: Pmttw4(X|pwv)
  110. # 解密文本: Hello, Python!
  111. # 应用3:字符编码转换
  112. # 将ASCII码转换为字符
  113. # ASCII码列表
  114. ascii_codes = [65, 66, 67, 32, 49, 50, 51] # 对应 'A', 'B', 'C', ' ', '1', '2', '3'
  115. # 使用chr()函数将ASCII码转换为字符
  116. chars = [chr(code) for code in ascii_codes]
  117. # 输出字符列表
  118. print(''.join(chars))
  119. # ABC 123
  120. # 将Unicode码点转换为字符(用于非ASCII字符)
  121. # Unicode 码点列表(包括非ASCII字符)
  122. unicode_codes = [0x4F60, 0x597D, 0x1F604] # 对应 '你', '好', '?'
  123. # 使用chr()函数将Unicode码点转换为字符
  124. chars = [chr(code) for code in unicode_codes]
  125. # 输出字符列表
  126. print(''.join(chars)) # 输出: 你好? (注意:这需要在支持Unicode的环境中才能正确显示)
  127. # 你好?
  128. # 从二进制数据转换到字符(假设数据是ASCII编码的)
  129. # 二进制数据(ASCII编码)
  130. binary_data = [100, 101, 108, 108, 111] # 对应 'd', 'e', 'l', 'l', 'o'
  131. # 使用chr()函数将二进制数据转换为字符
  132. chars = [chr(byte) for byte in binary_data]
  133. # 输出字符串
  134. print(''.join(chars))
  135. # dello
  136. # 从十六进制字符串转换到字符(假设数据是ASCII编码的)
  137. # 十六进制字符串表示的ASCII码
  138. hex_string = '48 65 6c 6c 6f' # 对应 'H', 'e', 'l', 'l', 'o'
  139. # 将十六进制字符串分割并转换为整数,然后使用chr()转换为字符
  140. chars = [chr(int(hex_byte, 16)) for hex_byte in hex_string.split()]
  141. # 输出字符串
  142. print(''.join(chars))
  143. # Hello
  144. # 应用4:图形界面开发
  145. import tkinter as tk
  146. def on_enter_pressed():
  147. # 获取输入框中的ASCII码
  148. ascii_code = entry.get()
  149. try:
  150. # 将ASCII码转换为字符
  151. character = chr(int(ascii_code))
  152. # 显示字符
  153. result_label.config(text=f"字符: {character}")
  154. except ValueError:
  155. # 如果输入的不是有效的整数,显示错误消息
  156. result_label.config(text="Error: 请输入一个有效的ASCII码!")
  157. # 主函数
  158. if __name__ == '__main__':
  159. # 创建主窗口
  160. root = tk.Tk()
  161. root.title("ASCII码到字符转换器")
  162. # 创建标签用于显示提示信息
  163. prompt_label = tk.Label(root, text="请输入一个ASCII码:")
  164. prompt_label.pack()
  165. # 创建输入框用于输入ASCII码
  166. entry = tk.Entry(root)
  167. entry.pack()
  168. # 创建按钮,点击时调用on_enter_pressed函数
  169. enter_button = tk.Button(root, text="输入", command=on_enter_pressed)
  170. enter_button.pack()
  171. # 创建标签用于显示结果
  172. result_label = tk.Label(root, text="")
  173. result_label.pack()
  174. # 运行主循环
  175. root.mainloop()
  176. # 应用5:配合ord函数使用
  177. # 定义一个字符
  178. character = 'A'
  179. # 使用ord()函数将字符转换为 ASCII 码
  180. ascii_code = ord(character)
  181. print(f"The ASCII code for '{character}' is: {ascii_code}")
  182. # 使用chr()函数将ASCII码转换回字符
  183. recovered_character = chr(ascii_code)
  184. print(f"The character for ASCII code {ascii_code} is: '{recovered_character}'")
  185. # 验证转换是否正确
  186. assert recovered_character == character, "The character was not recovered correctly!"
  187. print("The character was recovered correctly!")
  188. # The ASCII code for 'A' is: 65
  189. # The character for ASCII code 65 is: 'A'
  190. # The character was recovered correctly!
  191. # 应用6:生成控制字符
  192. # 定义一些控制字符的ASCII码
  193. newline_code = ord('\n') # 换行符
  194. tab_code = ord('\t') # 制表符
  195. carriage_return_code = ord('\r') # 回车符
  196. # 使用chr()函数生成控制字符
  197. newline_char = chr(newline_code)
  198. tab_char = chr(tab_code)
  199. carriage_return_char = chr(carriage_return_code)
  200. # 创建一个包含控制字符的字符串
  201. control_string = f"Hello{tab_char}World{newline_char}This is a new line{carriage_return_char}Going back to the start"
  202. # 打印控制字符串
  203. print(control_string)
  204. # 如果你在支持这些控制字符的环境中运行此代码(如命令行或终端).
  205. # 你将看到"Hello"和"World"之间有一个制表符的间隔,
  206. # "World"和"This is a new line"之间有一个换行符,
  207. # 以及"Going back to the start"将会从行的开始处打印,因为有一个回车符。
  208. # Hello World
  209. # Going back to the start
  210. # 应用7:创建自定义异常
  211. class InvalidCharacterException(Exception):
  212. """自定义异常类,用于处理无效的字符异常"""
  213. def __init__(self, ascii_code):
  214. # 使用chr()函数将ASCII码转换为字符,并构造异常消息
  215. character = chr(ascii_code) if 0 <= ascii_code <= 127 else '?'
  216. self.message = f"无效的字符,其ASCII码为: {ascii_code} ({character})"
  217. super().__init__(self.message)
  218. # 主函数
  219. if __name__ == '__main__':
  220. try:
  221. # 假设我们有一个无效的 ASCII 码
  222. invalid_ascii_code = 128
  223. raise InvalidCharacterException(invalid_ascii_code)
  224. except InvalidCharacterException as e:
  225. print(f"捕捉到异常: {e}")
  226. # 捕捉到异常: 无效的字符,其ASCII码为: 128 (?)
1-2、VBA:
  1. ' 1.函数:Chr
  2. ' 2.功能:将一个ASCII(American Standard Code for Information Interchange,美国信息交换标准代码)值转换为对应的字符
  3. ' 3.语法:Chr(number)
  4. ' 4.参数:number,必需参数,表示要转换的ASCII值。这个值应该是一个介于0到255之间的整数
  5. ' 5.返回值:返回与number参数对应的字符
  6. ' 6.说明:
  7. ' 7.示例:
  8. '---------------------------------------------------------------------------------------------------------------------------
  9. Rem 模拟Python中chr函数应用1:字符(串)处理
  10. ' 将ASCII码列表转换为字符列表
  11. Sub TestRun_1()
  12. Dim ascii_codes() As Variant
  13. Dim chars() As Variant
  14. Dim i As Integer
  15. ascii_codes = Array(65, 66, 67)
  16. ReDim chars(LBound(ascii_codes) To UBound(ascii_codes))
  17. For i = LBound(ascii_codes) To UBound(ascii_codes)
  18. chars(i) = Chr(ascii_codes(i))
  19. Next i
  20. ' 显示字符列表
  21. Dim charResult As String
  22. charResult = Join(chars, ", ")
  23. MsgBox charResult, vbInformation, "信息提醒"
  24. End Sub
  25. ' 将字符串中的每个字符转换为对应的ASCII码列表
  26. Sub TestRun_2()
  27. Dim s As String
  28. Dim ascii_codes() As Variant
  29. Dim i As Integer
  30. Dim char As String
  31. ' 定义字符串
  32. s = "Myelsa"
  33. ' 初始化ASCII码数组大小
  34. ReDim ascii_codes(Len(s))
  35. ' 遍历字符串中的每个字符
  36. For i = 1 To Len(s)
  37. char = mid(s, i, 1) ' 获取第i个字符
  38. ascii_codes(i - 1) = Asc(char) ' 获取字符的ASCII码并存储在数组中
  39. Next i
  40. ' 输出ASCII码
  41. For i = 0 To UBound(ascii_codes)
  42. Debug.Print ascii_codes(i)
  43. Next i
  44. End Sub
  45. ' 其他特殊字符处理
  46. Sub TestRun_3()
  47. ' 生成制表符(Tab)
  48. Dim tab_char As String
  49. tab_char = Chr(9)
  50. Debug.Print tab_char
  51. ' 或者使用MsgBox显示制表符
  52. ' MsgBox tab_char
  53. ' 生成换行符(Newline)
  54. Dim newline_char As String
  55. newline_char = Chr(10)
  56. Debug.Print newline_char
  57. ' MsgBox newline_char
  58. ' 生成回车符(Carriage Return)
  59. Dim carriage_return_char As String
  60. carriage_return_char = Chr(13)
  61. Debug.Print carriage_return_char
  62. ' MsgBox carriage_return_char
  63. ' 生成空格
  64. Dim space_char As String
  65. space_char = Chr(32)
  66. Debug.Print space_char
  67. ' MsgBox space_char
  68. ' 生成扩展ASCII码中的特殊符号
  69. ' 生成货币符号(例如美元符号)
  70. Dim dollar_sign As String
  71. dollar_sign = Chr(36)
  72. Debug.Print dollar_sign
  73. End Sub
  74. Rem 模拟Python中chr函数应用2:加密解密
  75. Sub EncryptText(text As String, shift As Integer)
  76. Dim encryptedText As String
  77. Dim char As String
  78. Dim asciiCode As Integer
  79. Dim shiftedCode As Integer
  80. Dim encryptedChar As String
  81. encryptedText = ""
  82. For i = 1 To Len(text)
  83. char = mid(text, i, 1)
  84. asciiCode = Asc(char)
  85. shiftedCode = (asciiCode + shift) Mod 256
  86. encryptedChar = Chr(shiftedCode)
  87. encryptedText = encryptedText & encryptedChar
  88. Next i
  89. ' 显示加密后的文本
  90. MsgBox "加密文本: " & encryptedText
  91. End Sub
  92. Rem 执行程序,功能:实现Chr函数的加密操作
  93. Sub TestRun_4()
  94. Dim originalText As String
  95. Dim shift As Integer
  96. Dim encrypted As String
  97. Dim decrypted As String
  98. originalText = "Hello, Python!"
  99. shift = 8
  100. ' 加密文本
  101. EncryptText originalText, shift
  102. End Sub
  103. Rem 模拟Python中chr函数应用3:字符编码转换
  104. ' 将ASCII码转换为字符
  105. Sub TestRun_5()
  106. Dim ascii_codes() As Variant
  107. Dim chars() As String
  108. Dim i As Integer
  109. Dim result As String
  110. ' 定义ASCII码列表
  111. ascii_codes = Array(65, 66, 67, 32, 49, 50, 51)
  112. ' 初始化字符数组的大小与ASCII码列表相同
  113. ReDim chars(LBound(ascii_codes) To UBound(ascii_codes))
  114. ' 使用Chr()函数将ASCII码转换为字符
  115. For i = LBound(ascii_codes) To UBound(ascii_codes)
  116. chars(i) = Chr(ascii_codes(i))
  117. Next i
  118. ' 将字符数组连接成字符串
  119. result = Join(chars, "")
  120. ' 输出字符串
  121. MsgBox result, vbInformation, "信息提醒"
  122. End Sub
  123. ' 从二进制数据转换到字符(假设数据是ASCII编码的)
  124. Sub TestRun_6()
  125. Dim binary_data() As Variant
  126. Dim chars As String
  127. Dim i As Integer
  128. ' 定义ASCII编码的二进制数据
  129. binary_data = Array(100, 101, 108, 108, 111) ' 对应 'd', 'e', 'l', 'l', 'o'
  130. ' 初始化结果字符串
  131. chars = ""
  132. ' 使用Chr()函数将每个ASCII编码转换为字符,并连接成字符串
  133. For i = LBound(binary_data) To UBound(binary_data)
  134. chars = chars & Chr(binary_data(i))
  135. Next i
  136. ' 输出字符串
  137. MsgBox chars, vbInformation, "信息提醒"
  138. End Sub
  139. Rem 模拟Python中chr函数应用5:配合ord函数使用
  140. Sub TestRun_7()
  141. Dim character As String
  142. Dim ascii_code As Integer
  143. Dim recovered_character As String
  144. ' 设置字符
  145. character = "A"
  146. ' 使用Asc()函数将字符转换为ASCII码
  147. ascii_code = Asc(character)
  148. ' 显示ASCII码
  149. MsgBox "The ASCII code for '" & character & "' is: " & ascii_code, vbInformation, "信息提醒"
  150. ' 使用Chr()函数将ASCII码转换回字符
  151. recovered_character = Chr(ascii_code)
  152. ' 显示转换后的字符
  153. MsgBox "The character for ASCII code " & ascii_code & " is: '" & recovered_character & "'", vbInformation, "信息提醒"
  154. ' 验证转换是否正确
  155. If recovered_character = character Then
  156. MsgBox "The character was recovered correctly!", vbInformation, "信息提醒"
  157. Else
  158. MsgBox "The character was not recovered correctly!", vbInformation, "信息提醒"
  159. End If
  160. End Sub
  161. Rem 模拟Python中chr函数应用6:生成控制字符
  162. Sub TestRun_8()
  163. Dim newline_char As String
  164. Dim tab_char As String
  165. Dim carriage_return_char As String
  166. Dim control_string As String
  167. ' 换行符、制表符和回车符在VBA中可以直接使用其特殊字符表示
  168. newline_char = Chr(10) ' 换行符,ASCII码为10
  169. tab_char = Chr(9) ' 制表符,ASCII码为9
  170. carriage_return_char = Chr(13) ' 回车符,ASCII码为13
  171. ' 创建一个包含控制字符的字符串
  172. control_string = "Hello" & tab_char & "World" & newline_char & _
  173. "This is a new line" & carriage_return_char & _
  174. "Going back to the start"
  175. ' 输出到立即窗口(VBA的调试输出窗口)
  176. Debug.Print control_string
  177. ' 或者输出到Excel的某个单元格(例如A1)
  178. Range("A1").value = control_string
  179. ' 使用MsgBox显示字符串(但请注意,MsgBox可能不会正确显示控制字符)
  180. ' MsgBox control_string, vbInformation, "Control Characters String"
  181. End Sub
  182. '
  183. '
  184. '
  185. '
  186. '
  187. '
  188. '$Hello World
  189. 'This is a new line
  190. 'Going back to the start
2、相关文章:

2-1、Python-VBA函数之旅-callable()函数

Python算法之旅:Algorithm

个人主页:非风V非雨-CSDN博客
文章知识点与官方知识档案匹配,可进一步学习相关知识
算法技能树首页概览60120 人正在系统学习中
遨游码海,我心飞扬
微信名片
注:本文转载自blog.csdn.net的神奇夜光杯的文章"https://myelsa1024.blog.csdn.net/article/details/137642811"。版权归原作者所有,此博客不拥有其著作权,亦不承担相应法律责任。如有侵权,请联系我们删除。
复制链接
复制链接
相关推荐
发表评论
登录后才能发表评论和回复 注册

/ 登录

评论记录:

未查询到任何数据!
回复评论:

分类栏目

后端 (14832) 前端 (14280) 移动开发 (3760) 编程语言 (3851) Java (3904) Python (3298) 人工智能 (10119) AIGC (2810) 大数据 (3499) 数据库 (3945) 数据结构与算法 (3757) 音视频 (2669) 云原生 (3145) 云平台 (2965) 前沿技术 (2993) 开源 (2160) 小程序 (2860) 运维 (2533) 服务器 (2698) 操作系统 (2325) 硬件开发 (2492) 嵌入式 (2955) 微软技术 (2769) 软件工程 (2056) 测试 (2865) 网络空间安全 (2948) 网络与通信 (2797) 用户体验设计 (2592) 学习和成长 (2593) 搜索 (2744) 开发工具 (7108) 游戏 (2829) HarmonyOS (2935) 区块链 (2782) 数学 (3112) 3C硬件 (2759) 资讯 (2909) Android (4709) iOS (1850) 代码人生 (3043) 阅读 (2841)

热门文章

101
推荐
关于我们 隐私政策 免责声明 联系我们
Copyright © 2020-2024 蚁人论坛 (iYenn.com) All Rights Reserved.
Scroll to Top