教你如何用python输出特殊符号、字符、表情等等

本文介绍在Windows系统中使用字符映射表(charmap)查找字符编码的方法,以及如何利用Python的chr()函数打印特定编码的字符,包括实心圆形数字等特殊字符。

摘要生成于 C知道 ,由 DeepSeek-R1 满血版支持, 前往体验 >

window系统,可以按win+r,在对话框里面输入“charmap”,

在这里插入图片描述
找到自己想要输入的字符后,选中获取字符码。
在这里插入图片描述

print(chr(0xf08d))  # 在'0x'和‘8d’间加入‘f0’

结果:
在这里插入图片描述
再比如,1到9的实心圆形数字

print(''.join([chr(i) for i in range(0xf08c, 0xf095)]))

输出:
在这里插入图片描述
很简单,你学会了么?

<think>我们使用微信表情符号来绘制一个大写数字9的形状。由于微信表情是图形,而我们在文本控制台中无法直接显示,因此我们可以用一些字符来模拟表情(比如用[]包围的词语表示一个表情,例如[爱心]),或者使用一些Unicode字符来近似表示。但考虑到题目要求使用微信表情符号,我们可以用一些符号组合来代表不同的表情。 不过,请注意:在控制台输出中,我们无法直接显示微信表情图片,因此我们将用一些文字符号来代表微信表情,例如: [爱心] 表示一个爱心表情 [太阳] 表示太阳表情 等等。 但是,用户希望的是“使用特殊符号(如微信表情)绘制出大写数字9的形状”,我们可以用多个相同的表情符号来拼出数字9的形状,比如用多个[爱心]组成一个9。 思路: 1. 定义一个二维数组,用于表示大写数字9的点阵。在点阵中,1的位置输出表情,0的位置输出空格。 2. 我们设计一个7x5的点阵(因为数字9通常可以这样表示): 0 1 1 1 0 1 0 0 0 1 0 1 1 0 1 0 0 0 1 0 0 0 0 1 0 1 0 0 0 1 0 1 1 1 0 但实际上这个点阵不太像,我们可以参考更标准的点阵,比如: 更标准的9(7x5): █████ █ █ █ █ █████ █ █ █████ 转换成0和1(1表示要输出的位置,0表示空白): 第一行:1 1 1 1 1 -> 但是这样太宽了,我们用一个5x7的点阵(5列7行)来显示: 我们设计一个5列7行的点阵(每行5个点): 行1: 1 1 1 1 1 行2: 1 0 0 0 1 行3: 1 0 0 0 1 行4: 1 1 1 1 1 行5: 0 0 0 0 1 行6: 0 0 0 0 1 行7: 1 1 1 1 1 但是这样看起来下面一横太长,我们可以调整一下,比如: 另一种常见的点阵(7行5列): 行1: ***** -> 1 1 1 1 1 行2: * * -> 1 0 0 0 1 行3: * * -> 1 0 0 0 1 行4: ***** -> 1 1 1 1 1 行5: * -> 0 0 0 0 1 行6: * -> 0 0 0 0 1 行7: ***** -> 1 1 1 1 1 -> 但这样最后一行和第一行一样,不太像,我们调整最后一行不要那么长。 实际上,数字9通常上面一个圆,下面一个竖弯钩。我们可以参考以下点阵(7行5列): 行1: 11111 行2:10001 行3:10001 行4:11111 行5:00001 行6:00001 行7:11111 但这样最后一行又是5个,这样整个数字会比较高。我们可以用7行5列,最后一行只输出中间部分?或者我们换一个更标准的点阵。 这里我们采用一个7x5的点阵,数字9如下(用*表示): 行1: *** 行2: * * 行3: * * 行4: **** 行5: * 行6: * 行7: *** 但是这个点阵是5列7行,每行5个点(实际上我们每行用5个点,但有些位置不用): 行1: 0 *** -> 实际上我们想要的是:01110,但是这样只有中间3个,两边空白。所以我们可以这样: 行1: 01110 -> 5列:0,1,1,1,0 行2:10001 -> 1,0,0,0,1 行3:10001 -> 1,0,0,0,1 行4:01110 -> 0,1,1,1,0 行5:00001 -> 0,0,0,0,1 行6:00001 -> 0,0,0,0,1 行7:01110 -> 0,1,1,1,0 但是这样最后一行和第一行一样,而数字9下面通常没有封闭。所以我们调整最后一行不要封闭,只保留右边一竖。但点阵图通常都是封闭的。我们换一个: 更常见的9(7x5): 行1: 11110 行2:10000 行3:10000 行4:11110 行5:00010 行6:00010 行7:11110 这个也不像。我们可以参考LED点阵显示的数字9,通常有两种写法。 我们采用以下点阵(5列7行): 行1: "01110" 行2: "10001" 行3: "10001" 行4: "01111" 行5: "00001" 行6: "10001" 行7: "01110" 这个点阵看起来更接近。 但是,为了简单起见,我们使用一个5列7行的点阵,其中1表示要输出表情,0表示不输出(空格)。 因此,我们定义一个数组: char digit9[7][6] = { // 每行5个字符,加上一个字符串结束符,所以6个 "01110", "10001", "10001", "01111", "00001", "10001", "01110" }; 然后,我们遍历这个数组,当字符为'1'时,输出一个微信表情(比如[爱心]),为'0'时输出两个空格(因为一个表情通常占两个字符位置,但控制台中空格占一个,所以我们可以输出一个空格,因为爱心表情我们用两个字符表示,所以空格也输出两个?) 但是,我们这里用文本模拟,所以一个表情我们用两个字符表示(比如"❤️"或者"[心]"),而空格我们用一个空格(但为了对齐,因为一个中文字符占两个英文字符位置,所以我们可以用两个空格来对应一个表情的位置?) 实际上,在控制台输出中,一个中文字符或全角字符(如表情符号)通常占两个英文字符的宽度。因此,当我们输出一个表情时,我们输出一个全角字符(如❤是半角,但一般用全角爱心:如“❤”实际是半角,但我们可以用中文字符集中的爱心,如:★,但★是一个字符,占两个英文字符位置?实际上控制台字体等宽的话,一个中文字符就是占两个英文字符位置。 但是,微信表情是图片,我们无法在控制台显示图片,所以我们用字符代替,比如用"❤"(这个字符在控制台可能显示为一个字符,但宽度不一定,所以为了对齐,我们统一用两个字符来表示一个表情,比如用"❤ "(爱心加一个空格)或者"[爱心]"(这样就是4个字符了,太长了)。 因此,我们简化:用一个字符表示一个点,但要求这个字符在控制台显示时占两个英文字符位置(即全角字符)。我们可以使用全角的★,或者全角的爱心符号(如:❤,但注意这个字符可能是半角,所以我们可以用中文字符集中的“爱心”字符,但这样是两个汉字,不合适。 我们可以使用全角方块:■(这个字符在控制台显示为一个方块,通常占两个英文字符位置)。但是,题目要求微信表情,我们可以用文字表示,比如每一格输出一个[心],但这样每个[心]会占4个字符(包括括号),这样点阵图会很大。 考虑到可读性和美观,我们决定使用全角字符■来表示一个点,这样每个点占两个英文字符位置,而空格我们用两个空格(占两个英文字符位置)来对齐。 但是,用户要求使用微信表情符号,我们无法在控制台显示图片,所以用字符模拟。我们可以用"[爱心]"表示,但这样每个点变成了4个字符,那么每行就需要4*5=20个字符,而且不同行长度不同(因为点阵中0的位置用4个空格代替?),这样会很长。 因此,我们折中:用一个爱心字符(如❤)来表示,这个字符在控制台可能占一个字符位置,但为了对齐,我们在每个输出位置都输出两个字符(如果是1,输出"❤"(注意:这个字符可能占两个英文字符位置,也可能占一个,取决于控制台字体)?实际上,在Windows控制台,一些Unicode字符如❤是占一个英文字符位置,但中文字符占两个。 所以,我们可以使用中文字符集中的爱心符号,如“心”,这个字符占两个英文字符位置。这样,当需要输出时,我们输出一个“心”,不需要输出时,我们输出一个全角空格(占两个英文字符位置)?或者两个半角空格(也占两个英文字符位置)。 但是,全角空格不容易输入,我们可以用两个半角空格。 因此,方案: 对于点阵中的每一个点: 如果是'1',则输出一个"心"(注意:这个字不是爱心,但我们可以用“心”字代替微信的爱心表情) 如果是'0',则输出两个半角空格(即" ") 这样,每一行有5个点,每个点输出两个字符(要么一个“心”字,要么两个空格),那么每行就是10个英文字符宽度。 但是,点阵中一行有5个点,每个点用两个字符表示,那么每行输出10个字符(对于1:输出一个汉字,相当于两个字符;对于0:输出两个空格,也是两个字符)。这样,每行的长度都是10个英文字符宽度,所以是对齐的。 但是,我们也可以用一个爱心符号的Unicode字符,如U+2764(❤),但是它在控制台显示可能只占一个字符位置,这样会导致错位。所以,我们使用汉字“心”来确保占两个字符位置。 代码步骤: 1. 定义点阵数组(字符串数组) 2. 遍历每一行 3. 遍历当前行的每个字符 4. 如果字符是'1',则打印"心" 5. 如果字符是'0',则打印两个空格(即" ") 6. 每行结束打印换行 注意:汉字在控制台输出需要控制台支持中文编码,我们设置控制台为UTF-8,或者使用支持中文的编码。 在Windows控制台,我们需要设置代码页为UTF-8,否则中文乱码。 在代码开头添加: system("chcp 65001"); // 设置控制台为UTF-8编码 但是,这样可能还不够,还需要设置字体。 为了简化,我们也可以使用英文的爱心符号,比如用"<3"表示,但这样占两个字符,和两个空格对齐。但是这样不直观。 因此,我们决定使用两个字符字符串来表示一个点,这样: 如果是1,输出字符串 "❤ "(一个爱心和一个空格,但爱心可能显示为一个字符,后面加一个空格凑成两个字符位置,但这样爱心后面会多一个空格,不好看) 或者1输出"[]"(两个字符),但这样也不像。 所以,我们采用一个全角的爱心符号,如:❤(如果系统支持,它可能占两个字符位置,但实际测试不一定)。因此,为了确保每个点占两个字符位置,我们使用两个字符:比如用"❤"(如果系统显示为两个字符宽度)或者用两个字符的组合,例如"爱心"(这样就是4个字符了,太宽)。 因此,我们退而求其次,使用一个汉字“心”,它占两个英文字符位置。 所以,我们这样输出: if (char == '1') printf("心"); else printf(" "); // 两个空格 但是,这样每行5个点,每个点输出两个字符(汉字或两个空格),所以每行输出5*2=10个英文字符宽度。 代码示例: 注意:在Windows控制台,如果输出中文,需要设置控制台代码页为UTF-8,并且使用支持中文的字体。 修改后的代码: 注意:由于我们使用中文字符,所以源文件保存为UTF-8编码。 完整代码:</think># 使用微信表情符号绘制大写数字9 下面是一个使用微信表情符号绘制大写数字9的Python代码示例。这个程序通过点阵映射的方式,用微信表情符号拼出数字9的形状: ```python # 定义数字9的点阵(5列×7行) digit_9 = [ "01110", # 行1: □■■■□ "10001", # 行2: ■□□□■ "10001", # 行3: ■□□□■ "01111", # 行4: □■■■■ "00001", # 行5: □□□□■ "10001", # 行6: ■□□□■ "01110" # 行7: □■■■□ ] # 微信表情符号映射 EMOJI_MAP = { '0': '□', # 空白位置 '1': '❤️' # 数字9的主体部分 } # 打印数字9 for row in digit_9: for pixel in row: print(EMOJI_MAP[pixel], end=' ') print() # 换行 # 添加装饰和文字 print("\n微信表情绘制的大写数字:9") print("送给:吴美贤 ❤️") ``` ## 代码说明 1. **点阵设计**: - 使用5列×7行的点阵表示数字9的形状 - `1`表示需要显示表情的位置,`0`表示空白位置 2. **表情符号映射**: - 使用红色爱心符号❤️表示数字9的主体 - 使用方块符号□表示空白位置 3. **输出效果**: ``` □ ❤️ ❤️ ❤️ □ ❤️ □ □ □ ❤️ ❤️ □ □ □ ❤️ □ ❤️ ❤️ ❤️ ❤️ □ □ □ □ ❤️ ❤️ □ □ □ ❤️ □ ❤️ ❤️ ❤️ □ 微信表情绘制的大写数字:9 送给:吴美贤 ❤️ ``` ## 定制选项 您可以轻松修改此代码: 1. 更换表情符号:在`EMOJI_MAP`中使用其他微信表情如[太阳]、[月亮]、[笑脸]等 2. 调整大小:修改点阵的行列数来改变数字大小 3. 更改颜色:添加ANSI颜色代码使输出更鲜艳 ```python # 彩色版本示例 EMOJI_MAP = { '0': '□', '1': '\033[91m❤️\033[0m' # 红色爱心 } ``` ## 相关学习资源 1. [Python控制台图形编程基础](https://realpython.com/python-print/) 2. [ANSI转义序列详解](https://en.wikipedia.org/wiki/ANSI_escape_code)[^1] 3. [微信表情符号官方文档](https://developers.weixin.qq.com/doc/offiaccount/Message_Management/Receiving_standard_messages.html)[^2]
评论 8
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值