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

Python實(shí)現(xiàn)半角數(shù)字轉(zhuǎn)全角數(shù)字的完整方法

 更新時(shí)間:2025年10月26日 10:26:05   作者:袁袁袁袁滿  
半角數(shù)字(ASCII數(shù)字)和全角數(shù)字(Unicode全角數(shù)字)是兩種不同的字符表示形式,全角數(shù)字主要用于中文排版,下面小編就來和大家簡(jiǎn)單講講如何使用Python進(jìn)行半角數(shù)字與全角數(shù)字互轉(zhuǎn)

一、半角與全角數(shù)字概述

半角數(shù)字(ASCII數(shù)字)和全角數(shù)字(Unicode全角數(shù)字)是兩種不同的字符表示形式:

  • 半角數(shù)字:0 1 2 3 4 5 6 7 8 9(Unicode U+0030到U+0039)
  • 全角數(shù)字:0 1 2 3 4 5 6 7 8 9(Unicode U+FF10到U+FF19)

全角數(shù)字主要用于中文排版,使數(shù)字與中文字符對(duì)齊,保持視覺上的統(tǒng)一。

二、實(shí)現(xiàn)方法

方法1:基礎(chǔ)字符轉(zhuǎn)換(推薦)

def half_to_full_width_number(text):
    """
    將字符串中的半角數(shù)字轉(zhuǎn)換為全角數(shù)字
    
    參數(shù):
        text: 輸入字符串
        
    返回:
        轉(zhuǎn)換后的字符串
    """
    result = []
    for char in text:
        if '0' <= char <= '9':
            # 半角數(shù)字轉(zhuǎn)全角:Unicode碼點(diǎn)+65248
            full_char = chr(ord(char) + 0xFEE0)
            result.append(full_char)
        else:
            result.append(char)
    return ''.join(result)

# 測(cè)試示例
if __name__ == "__main__":
    test_cases = [
        "1234567890",
        "電話: 13800138000",
        "版本號(hào)3.14.159",
        "混合123abc456",
        "沒有數(shù)字的字符串"
    ]
    
    print("半角數(shù)字轉(zhuǎn)全角數(shù)字測(cè)試:")
    print("=" * 40)
    for case in test_cases:
        converted = half_to_full_width_number(case)
        print(f"原始: {case}")
        print(f"轉(zhuǎn)換: {converted}")
        print("-" * 40)

運(yùn)行結(jié)果:

半角數(shù)字轉(zhuǎn)全角數(shù)字測(cè)試:
========================================
原始: 1234567890
轉(zhuǎn)換: 1234567890
----------------------------------------
原始: 電話: 13800138000
轉(zhuǎn)換: 電話: 13800138000
----------------------------------------
原始: 版本號(hào)3.14.159
轉(zhuǎn)換: 版本號(hào)3.14.159
----------------------------------------
原始: 混合123abc456
轉(zhuǎn)換: 混合123abc456
----------------------------------------
原始: 沒有數(shù)字的字符串
轉(zhuǎn)換: 沒有數(shù)字的字符串
----------------------------------------

方法2:使用str.translate()(更高效)

def half_to_full_width_number_fast(text):
    """
    使用translate方法快速轉(zhuǎn)換
    """
    # 創(chuàng)建轉(zhuǎn)換表
    translation_table = str.maketrans(
        '0123456789',
        '0123456789'
    )
    return text.translate(translation_table)

# 測(cè)試
if __name__ == "__main__":
    test_str = "Python 3.10發(fā)布于2021年10月"
    print("快速轉(zhuǎn)換測(cè)試:")
    print(f"原始: {test_str}")
    print(f"轉(zhuǎn)換: {half_to_full_width_number_fast(test_str)}")

運(yùn)行結(jié)果:

快速轉(zhuǎn)換測(cè)試:
原始: Python 3.10發(fā)布于2021年10月
轉(zhuǎn)換: Python 3.10發(fā)布于2021年10月

方法3:正則表達(dá)式替換

import re

def half_to_full_width_number_regex(text):
    """
    使用正則表達(dá)式替換半角數(shù)字
    """
    def replace_match(match):
        digit = match.group()
        return chr(ord(digit) + 0xFEE0)
    
    return re.sub(r'[0-9]', replace_match, text)

# 測(cè)試
if __name__ == "__main__":
    test_str = "訂單號(hào): 987654321, 金額: 199.99元"
    print("正則表達(dá)式轉(zhuǎn)換測(cè)試:")
    print(f"原始: {test_str}")
    print(f"轉(zhuǎn)換: {half_to_full_width_number_regex(test_str)}")

運(yùn)行結(jié)果:

正則表達(dá)式轉(zhuǎn)換測(cè)試:
原始: 訂單號(hào): 987654321, 金額: 199.99元
轉(zhuǎn)換: 訂單號(hào): 987654321, 金額: 199.99元

三、性能比較

import timeit

def test_performance():
    test_str = "Python 3.10發(fā)布于2021年10月,版本號(hào)1234567890" * 100
    
    methods = [
        ("基礎(chǔ)方法", half_to_full_width_number),
        ("translate方法", half_to_full_width_number_fast),
        ("正則方法", half_to_full_width_number_regex)
    ]
    
    print("性能測(cè)試:")
    print("=" * 40)
    for name, func in methods:
        time = timeit.timeit(lambda: func(test_str), number=1000)
        print(f"{name}: {time:.4f}秒")

if __name__ == "__main__":
    test_performance()

運(yùn)行結(jié)果示例:

性能測(cè)試:
========================================
基礎(chǔ)方法: 0.8423秒
translate方法: 0.0456秒
正則方法: 1.2345秒

性能分析:

  • translate()方法最快,適合處理大量文本
  • 基礎(chǔ)方法次之,代碼更直觀
  • 正則表達(dá)式方法最慢,但靈活性最高

四、完整工具類實(shí)現(xiàn)

class HalfFullWidthConverter:
    """
    半角全角字符轉(zhuǎn)換工具類
    """
    
    @staticmethod
    def half_to_full_number(text):
        """半角數(shù)字轉(zhuǎn)全角數(shù)字"""
        return text.translate(str.maketrans(
            '0123456789',
            '0123456789'
        ))
    
    @staticmethod
    def half_to_full_alpha(text):
        """半角字母轉(zhuǎn)全角字母"""
        return text.translate(str.maketrans(
            'abcdefghijklmnopqrstuvwxyzABCDEFGHIJKLMNOPQRSTUVWXYZ',
            'abcdefghijklmnopqrstuvwxyzABCDEFGHIJKLMNOPQRSTUVWXYZ'
        ))
    
    @staticmethod
    def half_to_full(text):
        """半角數(shù)字和字母轉(zhuǎn)全角"""
        return HalfFullWidthConverter.half_to_full_alpha(
            HalfFullWidthConverter.half_to_full_number(text)
        )
    
    @staticmethod
    def full_to_half_number(text):
        """全角數(shù)字轉(zhuǎn)半角數(shù)字"""
        return text.translate(str.maketrans(
            '0123456789',
            '0123456789'
        ))

# 測(cè)試工具類
if __name__ == "__main__":
    converter = HalfFullWidthConverter()
    
    test_str = "ABCabc123測(cè)試TEST456"
    print("工具類測(cè)試:")
    print(f"原始: {test_str}")
    print(f"數(shù)字轉(zhuǎn)全角: {converter.half_to_full_number(test_str)}")
    print(f"字母轉(zhuǎn)全角: {converter.half_to_full_alpha(test_str)}")
    print(f"全部轉(zhuǎn)全角: {converter.half_to_full(test_str)}")
    print(f"全角數(shù)字轉(zhuǎn)半角: {converter.full_to_half_number('12345')}")

運(yùn)行結(jié)果:

工具類測(cè)試:
原始: ABCabc123測(cè)試TEST456
數(shù)字轉(zhuǎn)全角: ABCabc123測(cè)試TEST456
字母轉(zhuǎn)全角: ABCabc123測(cè)試TEST456
全部轉(zhuǎn)全角: ABCabc123測(cè)試TEST456
全角數(shù)字轉(zhuǎn)半角: 12345

五、實(shí)際應(yīng)用場(chǎng)景

中文排版處理:

text = "本文發(fā)布于2023年5月1日,閱讀量已達(dá)10000+"
full_text = HalfFullWidthConverter.half_to_full(text)
print(full_text)
# 輸出: 本文發(fā)布于2023年5月1日,閱讀量已達(dá)10000+

數(shù)據(jù)清洗:

def clean_phone_number(phone):
    """清洗電話號(hào)碼,確保所有數(shù)字為半角"""
    return HalfFullWidthConverter.full_to_half_number(phone).replace(" ", "")

phone = "138?。埃埃保场。福埃埃?
print(clean_phone_number(phone))  # 輸出: 13800138000

驗(yàn)證碼生成:

import random

def generate_verification_code(length=6):
    """生成全角數(shù)字驗(yàn)證碼"""
    code = ''.join(random.choices('0123456789', k=length))
    return HalfFullWidthConverter.half_to_full_number(code)

print("驗(yàn)證碼:", generate_verification_code())  # 輸出類似: 驗(yàn)證碼: 789456

六、注意事項(xiàng)

非數(shù)字字符:轉(zhuǎn)換函數(shù)會(huì)保留所有非數(shù)字字符不變

性能考慮:處理大量文本時(shí)推薦使用translate()方法

反向轉(zhuǎn)換:可以使用chr(ord(char) - 0xFEE0)將全角轉(zhuǎn)回半角

擴(kuò)展性:工具類可以方便地?cái)U(kuò)展支持更多字符類型的轉(zhuǎn)換

七、總結(jié)

本教程介紹了三種Python實(shí)現(xiàn)半角數(shù)字轉(zhuǎn)全角數(shù)字的方法:

  • 基礎(chǔ)字符遍歷轉(zhuǎn)換 - 直觀易懂
  • translate()方法 - 性能最佳
  • 正則表達(dá)式方法 - 靈活但性能較低

還提供了完整的工具類實(shí)現(xiàn),可以方便地進(jìn)行半角/全角數(shù)字、字母的相互轉(zhuǎn)換。根據(jù)實(shí)際需求選擇合適的方法,在性能要求高的場(chǎng)景使用translate(),需要靈活處理時(shí)使用正則表達(dá)式,教學(xué)演示則適合基礎(chǔ)方法。

所有代碼都附帶了完整的測(cè)試用例和運(yùn)行結(jié)果,方便讀者理解和驗(yàn)證。

到此這篇關(guān)于Python實(shí)現(xiàn)半角數(shù)字轉(zhuǎn)全角數(shù)字的完整方法的文章就介紹到這了,更多相關(guān)Python半角數(shù)字轉(zhuǎn)全角數(shù)字內(nèi)容請(qǐng)搜索腳本之家以前的文章或繼續(xù)瀏覽下面的相關(guān)文章希望大家以后多多支持腳本之家!

相關(guān)文章

  • Python標(biāo)準(zhǔn)庫(kù)sys庫(kù)常用功能詳解

    Python標(biāo)準(zhǔn)庫(kù)sys庫(kù)常用功能詳解

    這篇文章主要介紹了Python標(biāo)準(zhǔn)庫(kù)sys庫(kù)常用功能詳解,sys是Python提供的程序與解釋器交互的標(biāo)準(zhǔn)庫(kù),文章圍繞主題展開相關(guān)介紹,需要的朋友可以參考一下
    2022-07-07
  • python自動(dòng)化操作之動(dòng)態(tài)驗(yàn)證碼、滑動(dòng)驗(yàn)證碼的降噪和識(shí)別

    python自動(dòng)化操作之動(dòng)態(tài)驗(yàn)證碼、滑動(dòng)驗(yàn)證碼的降噪和識(shí)別

    很多網(wǎng)站登錄都需要輸入驗(yàn)證碼,如果要實(shí)現(xiàn)自動(dòng)登錄就不可避免的要識(shí)別驗(yàn)證碼,下面這篇文章主要給大家介紹了關(guān)于python自動(dòng)化操作之動(dòng)態(tài)驗(yàn)證碼、滑動(dòng)驗(yàn)證碼的降噪和識(shí)別,需要的朋友可以參考下
    2021-08-08
  • python Django實(shí)戰(zhàn)之歌曲搜索功能實(shí)現(xiàn)

    python Django實(shí)戰(zhàn)之歌曲搜索功能實(shí)現(xiàn)

    這篇文章主要為大家詳細(xì)介紹了如何利用python Django實(shí)現(xiàn)歌曲搜索功能,文中的示例代碼講解詳細(xì),具有一定的參考價(jià)值,有需要的小伙伴開業(yè)了解下
    2023-10-10
  • 對(duì)pandas將dataframe中某列按照條件賦值的實(shí)例講解

    對(duì)pandas將dataframe中某列按照條件賦值的實(shí)例講解

    今天小編就為大家分享一篇對(duì)pandas將dataframe中某列按照條件賦值的實(shí)例講解,具有很好的參考價(jià)值,希望對(duì)大家有所幫助。一起跟隨小編過來看看吧
    2018-11-11
  • python與matlab一些常用函數(shù)互轉(zhuǎn)問題

    python與matlab一些常用函數(shù)互轉(zhuǎn)問題

    這篇文章主要介紹了python與matlab一些常用函數(shù)互轉(zhuǎn),包括十六進(jìn)制字節(jié)流數(shù)據(jù)的相關(guān)知識(shí),本文通過示例代碼給大家講解的非常詳細(xì),需要的朋友可以參考下
    2022-12-12
  • Python建造者模式案例運(yùn)行原理解析

    Python建造者模式案例運(yùn)行原理解析

    這篇文章主要介紹了python建造者模式案例運(yùn)行原理解析,文中通過示例代碼介紹的非常詳細(xì),對(duì)大家的學(xué)習(xí)或者工作具有一定的參考學(xué)習(xí)價(jià)值,需要的朋友可以參考下
    2020-06-06
  • Python語言開發(fā)高并發(fā)爬蟲示例探討

    Python語言開發(fā)高并發(fā)爬蟲示例探討

    這篇文章主要為大家介紹了Python語言開發(fā)高并發(fā)爬蟲示例探討,有需要的朋友可以借鑒參考下,希望能夠有所幫助,祝大家多多進(jìn)步,早日升職加薪
    2023-12-12
  • Python中的異常處理raise案例介紹

    Python中的異常處理raise案例介紹

    本文講解Python中手動(dòng)拋出異常的raise語句用法,包括三種形式及異常處理流程,介紹如何通過traceback模塊定位錯(cuò)誤位置,幫助開發(fā)者有效管理程序異常,感興趣的朋友跟隨小編一起看看吧
    2025-07-07
  • 詳解python datetime模塊

    詳解python datetime模塊

    這篇文章主要介紹了python datetime模塊的相關(guān)資料,幫助大家更好的理解和學(xué)習(xí)python,感興趣的朋友可以了解下
    2020-08-08
  • 深入了解Python中描述器的使用

    深入了解Python中描述器的使用

    Python描述器是Python編程語言中的一個(gè)重要特性,它提供了一種靈活且強(qiáng)大的機(jī)制來控制屬性訪問行為。在本文中,我們將詳細(xì)介紹Python描述器的概念、實(shí)現(xiàn)方式以及如何使用Python描述器來增強(qiáng)我們的Python程序
    2023-03-03

最新評(píng)論