最新国产好看的视频,伊人天堂AV在线,国产Aaaaaa视频,蜜臀视频在线观看一区,人妻av色图,密臀久久久精品影片,青青视频免费观看毛片,久草在线观看视,国产三级精品色情在线

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

 更新時間:2025年10月26日 10:26:05   作者:袁袁袁袁滿  
半角數(shù)字(ASCII數(shù)字)和全角數(shù)字(Unicode全角數(shù)字)是兩種不同的字符表示形式,全角數(shù)字主要用于中文排版,下面小編就來和大家簡單講講如何使用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ù)字與中文字符對齊,保持視覺上的統(tǒng)一。

二、實現(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)

# 測試示例
if __name__ == "__main__":
    test_cases = [
        "1234567890",
        "電話: 13800138000",
        "版本號3.14.159",
        "混合123abc456",
        "沒有數(shù)字的字符串"
    ]
    
    print("半角數(shù)字轉(zhuǎn)全角數(shù)字測試:")
    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ù)字測試:
========================================
原始: 1234567890
轉(zhuǎn)換: 1234567890
----------------------------------------
原始: 電話: 13800138000
轉(zhuǎn)換: 電話: 13800138000
----------------------------------------
原始: 版本號3.14.159
轉(zhuǎn)換: 版本號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)

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

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

快速轉(zhuǎn)換測試:
原始: 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)

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

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

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

三、性能比較

import timeit

def test_performance():
    test_str = "Python 3.10發(fā)布于2021年10月,版本號1234567890" * 100
    
    methods = [
        ("基礎(chǔ)方法", half_to_full_width_number),
        ("translate方法", half_to_full_width_number_fast),
        ("正則方法", half_to_full_width_number_regex)
    ]
    
    print("性能測試:")
    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é)果示例:

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

性能分析:

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

四、完整工具類實現(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'
        ))

# 測試工具類
if __name__ == "__main__":
    converter = HalfFullWidthConverter()
    
    test_str = "ABCabc123測試TEST456"
    print("工具類測試:")
    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é)果:

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

五、實際應(yī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):
    """清洗電話號碼,確保所有數(shù)字為半角"""
    return HalfFullWidthConverter.full_to_half_number(phone).replace(" ", "")

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

驗證碼生成:

import random

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

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

六、注意事項

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

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

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

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

七、總結(jié)

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

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

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

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

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

相關(guān)文章

  • python實現(xiàn)將視頻按幀讀取到自定義目錄

    python實現(xiàn)將視頻按幀讀取到自定義目錄

    今天小編就為大家分享一篇python實現(xiàn)將視頻按幀讀取到自定義目錄,具有很好的參考價值,希望對大家有所幫助。一起跟隨小編過來看看吧
    2019-12-12
  • Python中異常重試的解決方案詳解

    Python中異常重試的解決方案詳解

    這篇文章主要給大家介紹了在Python中異常重試的解決方案,文中介紹的非常詳細(xì),相信對大家學(xué)習(xí)或者使用python具有一定的參考學(xué)習(xí)價值,需要的朋友們下面隨著小編一起來看看吧。
    2017-05-05
  • Python線程threading(Thread類)

    Python線程threading(Thread類)

    這篇文章主要介紹了Python線程threading(Thread類),線程是進(jìn)程的組成部分,一個進(jìn)程可以擁有多個線程,更多詳細(xì)內(nèi)容需要的朋友可以參考一下下面文章詳細(xì)內(nèi)容
    2022-07-07
  • python3 使用函數(shù)求兩個數(shù)的和與差

    python3 使用函數(shù)求兩個數(shù)的和與差

    這篇文章主要介紹了python3 使用函數(shù)求兩個數(shù)的和與差,具有很好的參考價值,希望對大家有所幫助。
    2021-05-05
  • 如何基于Python代碼實現(xiàn)高精度免費(fèi)OCR工具

    如何基于Python代碼實現(xiàn)高精度免費(fèi)OCR工具

    這篇文章主要介紹了如何基于Python代碼實現(xiàn)高精度免費(fèi)OCR工具,文中通過示例代碼介紹的非常詳細(xì),對大家的學(xué)習(xí)或者工作具有一定的參考學(xué)習(xí)價值,需要的朋友可以參考下
    2020-06-06
  • wxPython 入門教程

    wxPython 入門教程

    您可以在幾分鐘內(nèi)編寫一段 Python腳本和讓桌面擁有令人難以置信的相當(dāng)漂亮的 GUI應(yīng)用程序。這篇文章向您展示如何使用一 Python-著稱的 GUI 庫wxPython,來做到這一點(diǎn)的。向您的朋友和鄰居介紹!
    2008-10-10
  • Python新手入門最容易犯的錯誤總結(jié)

    Python新手入門最容易犯的錯誤總結(jié)

    這篇文章主要總結(jié)了一些關(guān)于Python新手入門最容易犯的錯誤,希望通過學(xué)習(xí)本文總結(jié)的十二點(diǎn)易犯錯誤點(diǎn),能夠給新手們帶來一定的幫助,需要的朋友可以參考學(xué)習(xí),下面來一起看看吧。
    2017-04-04
  • Python使用enumerate獲取迭代元素下標(biāo)

    Python使用enumerate獲取迭代元素下標(biāo)

    這篇文章主要介紹了python使用enumerate獲取迭代元素下標(biāo),文中通過示例代碼介紹的非常詳細(xì),對大家的學(xué)習(xí)或者工作具有一定的參考學(xué)習(xí)價值,需要的朋友可以參考下
    2020-02-02
  • Python通過TensorFLow進(jìn)行線性模型訓(xùn)練原理與實現(xiàn)方法詳解

    Python通過TensorFLow進(jìn)行線性模型訓(xùn)練原理與實現(xiàn)方法詳解

    這篇文章主要介紹了Python通過TensorFLow進(jìn)行線性模型訓(xùn)練原理與實現(xiàn)方法,結(jié)合實例形式詳細(xì)分析了Python通過TensorFLow進(jìn)行線性模型訓(xùn)練相關(guān)概念、算法設(shè)計與訓(xùn)練操作技巧,需要的朋友可以參考下
    2020-01-01
  • 發(fā)布你的Python模塊詳解

    發(fā)布你的Python模塊詳解

    這篇文章主要介紹了發(fā)布你的Python模塊詳解的相關(guān)資料,需要的朋友可以參考下
    2016-09-09

最新評論

延川县| 三江| 德惠市| 三都| 金门县| 伽师县| 明光市| 泽州县| 新田县| 佛山市| 伊金霍洛旗| 西乡县| 保亭| 湖州市| 龙游县| 随州市| 大新县| 汉川市| 鄯善县| 会泽县| 西畴县| 南川市| 汉川市| 买车| 牡丹江市| 阿拉善右旗| 长宁区| 田东县| 汉沽区| 麟游县| 宁河县| 津市市| 石嘴山市| 铜鼓县| 松阳县| 沅江市| 上饶市| 察隅县| 汝城县| 佳木斯市| 桂林市|