欧美bbbwbbbw肥妇,免费乱码人妻系列日韩,一级黄片

python實(shí)現(xiàn)emoji對(duì)齊特殊字符對(duì)齊高級(jí)文本對(duì)齊

 更新時(shí)間:2023年11月06日 09:23:24   作者:三塊錢  
這篇文章主要為大家介紹了python實(shí)現(xiàn)emoji對(duì)齊特殊字符對(duì)齊高級(jí)文本對(duì)齊方法實(shí)例詳解,有需要的朋友可以借鑒參考下,希望能夠有所幫助,祝大家多多進(jìn)步,早日升職加薪

問(wèn)題引出

我們?cè)诔绦虼蛴≥敵鰰r(shí),如何我們所輸出的字符中包含emoji文本,或者其它特殊的字符文本,則我們的打印對(duì)齊效果將出現(xiàn)錯(cuò)位。

以下代碼復(fù)現(xiàn)了這一效果(tips: 馬老師 前面的 | 符號(hào)是為了觀察對(duì)齊效果):

# -*- coding:UTF-8 -*-
# region 引入必要依賴
from DebugInfo.DebugInfo import *
# endregion
if __name__ == "__main__":
    畫板 = 打印模板()
    畫板.打印空行(2)
    畫板.準(zhǔn)備表格()
    畫板.添加一行('序號(hào)', '姓名', '自評(píng)', '班主任').修飾行(青字)  # 作為標(biāo)題行
    畫板.添加一行('1', '小紅', '我很開(kāi)朗', '|馬老師')
    畫板.添加分隔行()
    畫板.添加一行('2', '豬小明', '我得了很多小花 ?', '|馬老師')
    畫板.添加分隔行()
    畫板.添加一行('3', '趙虹', '我有愛(ài)心?', '|馬老師')
    畫板.添加分隔行()
    畫板.添加一行('4', '張?zhí)熘?, '我是女生♀?我有長(zhǎng)頭發(fā)', '|馬老師')
    畫板.添加空行()
    畫板.展示表格()

??以上代碼的運(yùn)行打印對(duì)齊如下:

我們可以觀察到,豬小明行,馬老師靠前了

我們又可以觀察到,張?zhí)熘拘?,馬老師靠后了

原因解釋

為什么會(huì)出現(xiàn)上面的對(duì)齊的現(xiàn)象呢?這就要從字體說(shuō)起了。
我們電腦上,所顯示的符號(hào)肯定是通過(guò)某一個(gè)字體來(lái)顯示的。所以同一個(gè)字,我們?cè)谒误w下看到的效果,和在黑體下看到的效果,是不一樣的。

一個(gè)字符,顯示其效果所占用的屏幕像素?cái)?shù)量,稱為字符的顯示像素寬度;為方便其見(jiàn),我們將字符的像素寬度相對(duì)于英文字符空格所占用的像素寬度的比值,做為下文我們要描述的字符顯示寬度值。

  • 顯然,英文空格的字符顯示寬度值是 1
  • 一個(gè)英文字符(大寫和小寫)的顯示寬度值是 1

對(duì)于以下顯示的楷體字體下的中文,一個(gè)字符的顯示寬度值是 2

顯示,對(duì)于任何可以在電腦上顯示的字符,其都有一個(gè)顯示寬度,只是不同的字符,在不同的字體下,其顯示寬度值不同罷了。

有了以上規(guī)律后,我們?nèi)绻枰獙?duì)齊文本,就會(huì)比較容易了。我們計(jì)算字符的顯示寬度,根據(jù)其顯示寬度,計(jì)算并補(bǔ)充對(duì)應(yīng)數(shù)量的空格后,文本就可以達(dá)到對(duì)齊的效果。

那現(xiàn)在來(lái)說(shuō)上面馬老師對(duì)不齊的問(wèn)題。根據(jù)上文中的對(duì)齊原理的解釋,馬老師對(duì)不齊,肯定是文本中存在了這樣的字符,這字符計(jì)算的顯示寬度,與其實(shí)際顯示所占用的寬度不一致,導(dǎo)致在補(bǔ)充空格時(shí)空格數(shù)量計(jì)算錯(cuò)誤。

找出真兇

在上面的表格中,我們發(fā)現(xiàn)符號(hào) ? ♥ ♀? 是不常的字符。我們把這幾個(gè)字符拿掉,再來(lái)觀察對(duì)齊效果,如下??:

# -*- coding:UTF-8 -*-
# region 引入必要依賴
from DebugInfo.DebugInfo import *
# endregion
if __name__ == "__main__":
    畫板 = 打印模板()
    畫板.打印空行(2)
    畫板.準(zhǔn)備表格()
    畫板.添加一行('序號(hào)', '姓名', '自評(píng)', '班主任').修飾行(青字)  # 作為標(biāo)題行
    畫板.添加一行('1', '小紅', '我很開(kāi)朗', '|馬老師')
    畫板.添加分隔行()
    # 畫板.添加一行('2', '豬小明', '我得了很多小花 ?', '|馬老師')
    畫板.添加一行('2', '豬小明', '我得了很多小花 ', '|馬老師')
    畫板.添加分隔行()
    # 畫板.添加一行('3', '趙虹', '我有愛(ài)心?', '|馬老師')
    畫板.添加一行('3', '趙虹', '我有愛(ài)心', '|馬老師')
    畫板.添加分隔行()
    # 畫板.添加一行('4', '張?zhí)熘?, '我是女生♀?我有長(zhǎng)頭發(fā)', '|馬老師')
    畫板.添加一行('4', '張?zhí)熘?, '我是女生我有長(zhǎng)頭發(fā)', '|馬老師')
    畫板.添加空行()
    畫板.展示表格()

??以上代碼運(yùn)行效果如下??:

嗯,對(duì)齊效果非常漂亮。

所以,我們將問(wèn)題的焦點(diǎn)放在符號(hào) ? ? ♀? 這三個(gè)字符上。 以下代碼打印并顯示了這三個(gè)字符的顯示寬度和實(shí)際占用寬度。

# -*- coding:UTF-8 -*-
# region 引入必要依賴
from DebugInfo.DebugInfo import *
# endregion
if __name__ == "__main__":
    畫板 = 打印模板()
    畫板.打印空行(2)
    畫板.準(zhǔn)備表格()
    畫板.添加一行('字符','顯示寬度值').修飾行(青字)
    畫板.添加分隔行()
    畫板.添加一行('?|',顯示寬度('?'))
    畫板.添加一行('?|',顯示寬度('?'))
    畫板.添加一行('♀?|',顯示寬度('♀?'))
    畫板.添加空行()
    畫板.展示表格()

??以上代碼運(yùn)行效果如下??:

上圖我們可以看到(注意看參考符號(hào) | 的位置):

  • 字符 ? 顯示占用寬度為1, 計(jì)算的顯示寬度是2 (這將導(dǎo)致在對(duì)齊補(bǔ)空格時(shí),少補(bǔ)一個(gè)空格)
  • 字符 ♥ 顯示占用寬度為1,計(jì)算的顯示寬度也是1 (實(shí)際顯示寬度和計(jì)算顯示寬度一致,對(duì)齊補(bǔ)齊空格正常)
  • 字符 ♀? 顯示占用寬度為2,但計(jì)算的顯示寬度為1 (這將導(dǎo)致在對(duì)齊補(bǔ)空格時(shí),多補(bǔ)一個(gè)空格)

所以,對(duì)齊出錯(cuò)的根本原因在于符號(hào) ♥ 和 ♀? 在終端顯示時(shí),顯示這兩個(gè)字符所占用的字符寬度與計(jì)算的字符寬度不一致,導(dǎo)致在計(jì)算對(duì)齊補(bǔ)空格時(shí),補(bǔ)了錯(cuò)誤數(shù)量的空格。

補(bǔ)救措施

有了以上的分析,我們知道了出現(xiàn)對(duì)齊錯(cuò)位的根本原因在于部分特殊的字符顯示寬度值的計(jì)算與實(shí)際不符導(dǎo)致,那么我們對(duì)應(yīng)的解決方案也就明朗了:修正特殊字符的顯示寬度值

如下的代碼,我們指定了特殊字符的顯示寬度值,并將其告訴了【打印模板對(duì)象】(這里是畫板),然后我們又打印顯示了帶有特殊字符的文本,觀察其對(duì)齊效果:

# -*- coding:UTF-8 -*-
# region 引入必要依賴
from DebugInfo.DebugInfo import *
# endregion
if __name__ == "__main__":
    畫板 = 打印模板()
    畫板.打印空行(2)
    畫板.準(zhǔn)備表格()
    畫板.設(shè)置特殊字符寬度字典({'?': 1, '♀': 2})  # 修正特殊符號(hào)的顯示寬度值
    畫板.添加一行('序號(hào)', '姓名', '自評(píng)', '班主任').修飾行(青字)  # 作為標(biāo)題行
    畫板.添加一行('1', '小紅', '我很開(kāi)朗', '|馬老師')
    畫板.添加一行('2', '豬小明', '我得了很多小花?', '|馬老師')
    畫板.添加一行('3', '趙虹', '我有愛(ài)心?', '|馬老師')
    畫板.添加一行('4', '張?zhí)熘?, '我是女生♀?我有長(zhǎng)頭發(fā)', '|馬老師')
    畫板.添加空行()
    畫板.展示表格()

??上面的代碼中,請(qǐng)留意 設(shè)置特殊字符寬度字典 方法,其修正了符號(hào) ?和 ♀? 的顯示寬度值,這幫助程序正確的理解和計(jì)算了字符的實(shí)際顯示寬度,從而在對(duì)齊補(bǔ)齊空格時(shí),可以補(bǔ)齊正確數(shù)量的空格。

其它的坑

在以上的分析過(guò)程中,我們所提到,所有在電腦上顯示處理的符號(hào),都依賴于字體,這也就是說(shuō),在不同的字體下,同一個(gè)符號(hào)可能顯示的寬度(相對(duì)于空格或者符號(hào) -),是有可能不同的,現(xiàn)觀察到的部分字體中,英文字符的寬度如果計(jì)算為單位1,中文字符的寬度是1.5,在這種非整數(shù)倍的字體下,遇到中英文混合情況時(shí),對(duì)齊處理是非常難的,甚至是無(wú)法做到的。

對(duì)于特殊字符,同樣在不同的字體下,其顯示寬度也是不同的,在實(shí)際的應(yīng)用中要多加留意處理。

另外,為了方便文本對(duì)齊的計(jì)算,大家在實(shí)際使用時(shí),需要注意終端所使用的字體是否是等寬字體,非等寬字體下,可能出現(xiàn)字體寬度不是整數(shù)的情況,對(duì)齊處理效果會(huì)受到影響。

小結(jié)

以上就是python實(shí)現(xiàn)emoji對(duì)齊特殊字符對(duì)齊高級(jí)文本對(duì)齊的詳細(xì)內(nèi)容,更多關(guān)于python特殊文本字符對(duì)齊的資料請(qǐng)關(guān)注腳本之家其它相關(guān)文章!

相關(guān)文章

  • Python使用QRCode模塊生成二維碼實(shí)例詳解

    Python使用QRCode模塊生成二維碼實(shí)例詳解

    這篇文章主要介紹了Python使用QRCode模塊生成二維碼實(shí)例詳解的相關(guān)資料,需要的朋友可以參考下
    2017-06-06
  • 關(guān)于Python核心框架tornado的異步協(xié)程的2種方法詳解

    關(guān)于Python核心框架tornado的異步協(xié)程的2種方法詳解

    今天小編就為大家分享一篇關(guān)于Python核心框架tornado的異步協(xié)程的2種方法詳解,具有很好的參考價(jià)值,希望對(duì)大家有所幫助。一起跟隨小編過(guò)來(lái)看看吧
    2019-08-08
  • WxPython中控件隱藏與顯示的小技巧

    WxPython中控件隱藏與顯示的小技巧

    這篇文章主要介紹了WxPython中控件隱藏與顯示的小技巧,具有很好的參考價(jià)值,希望對(duì)大家有所幫助。如有錯(cuò)誤或未考慮完全的地方,望不吝賜教
    2022-11-11
  • Python中如何添加自定義模塊

    Python中如何添加自定義模塊

    在本篇文章里小編給大家分享了關(guān)于Python中添加自定義模塊的實(shí)例方法,需要的朋友們可以學(xué)習(xí)下。
    2020-06-06
  • Python使用Pandas讀寫Excel實(shí)例解析

    Python使用Pandas讀寫Excel實(shí)例解析

    這篇文章主要介紹了Python使用Pandas讀寫Excel實(shí)例解析,文中通過(guò)示例代碼介紹的非常詳細(xì),對(duì)大家的學(xué)習(xí)或者工作具有一定的參考學(xué)習(xí)價(jià)值,需要的朋友可以參考下
    2019-11-11
  • python 字典中取值的兩種方法小結(jié)

    python 字典中取值的兩種方法小結(jié)

    今天小編就為大家分享一篇python 字典中取值的兩種方法小結(jié),具有很好的參考價(jià)值,希望對(duì)大家有所幫助。一起跟隨小編過(guò)來(lái)看看吧
    2018-08-08
  • Django url反向解析的實(shí)現(xiàn)

    Django url反向解析的實(shí)現(xiàn)

    本文主要介紹了Django url反向解析的實(shí)現(xiàn),文中通過(guò)示例代碼介紹的非常詳細(xì),具有一定的參考價(jià)值,感興趣的小伙伴們可以參考一下
    2021-12-12
  • 使用python創(chuàng)建生成動(dòng)態(tài)鏈接庫(kù)dll的方法

    使用python創(chuàng)建生成動(dòng)態(tài)鏈接庫(kù)dll的方法

    這篇文章主要介紹了使用python創(chuàng)建生成動(dòng)態(tài)鏈接庫(kù)dll的方法,本文通過(guò)示例代碼給大家介紹的非常詳細(xì),對(duì)大家的學(xué)習(xí)或工作具有一定的參考借鑒價(jià)值,需要的朋友可以參考下
    2020-05-05
  • Tensorflow 定義變量,函數(shù),數(shù)值計(jì)算等名字的更新方式

    Tensorflow 定義變量,函數(shù),數(shù)值計(jì)算等名字的更新方式

    今天小編就為大家分享一篇Tensorflow 定義變量,函數(shù),數(shù)值計(jì)算等名字的更新方式,具有很好的參考價(jià)值,希望對(duì)大家有所幫助。一起跟隨小編過(guò)來(lái)看看吧
    2020-02-02
  • Python3匿名函數(shù)用法示例

    Python3匿名函數(shù)用法示例

    這篇文章主要介紹了Python3匿名函數(shù)用法,結(jié)合實(shí)例形式分析了Python3匿名函數(shù)的概念、功能、使用方法及相關(guān)操作注意事項(xiàng),代碼中備有較為詳盡的注釋說(shuō)明便于理解,需要的朋友可以參考下
    2018-07-07

最新評(píng)論