天天看點

平假名與片假名 互相轉換python3:RUBY

python3:

  • 編碼:python3 支援UTF-8, 還搞了個 unicode (這是好東西)
  • 通過 unicode進行 字元轉換
#轉換原理
from six import unichr
str1 = "\u3041"  # 代表一個字元:即 あ
code = ord(str1)  # 擷取該字元的 unicode 值-->一個int 類型的值,可進行加減
print(code, type(ord(str1)))  # 12353 <class 'int'> 值和類型
# unicode 值加1: 該字元的下一個字元:  あ + 1-->い
print(chr(code + 1))  # ord(str1)+1 :代表該字元的下一個字元的unicode 值
print(chr(code + 1))  # chr() 把unicode轉換成字元
print(unichr(code + 1))  # unichr()與 chr()作用相同:具體差别百度吧
           

懂了python3的 unicode 轉換,那剩下的就好辦了,

平假名範圍:"\u3041", “\u3096”

片假名範圍: “\u30A1”, "\u30F6"

字元編碼查詢
  • 片假名與平假名轉換:

    兩種思路:

  • 一:
    • ord(平)+ x =ord(片),隻要知道中間 內插補點 x ,就可以明白字元 的unicode對應關系
    • 例如假設 A , a unicode 插值為:10
    • - //沒寫ord(),應該明白是他們對應的 unicode 值進行加減
                 
    • 即: a + 10 =A , A - 10 = a
    • 可以推出: b+10=B,c + 10=C
    • 平假名範圍:"\u3041", “\u3096”
    • 片假名範圍: “\u30A1”, “\u30F6”
    • 知道範圍了,分别周遊呗,便利結果存到字典裡,字典查詢,直接哦耶~

這裡貼出第二種思路(第一種太簡單)

#參數: 平假名起始,結束, 片假名起始,結束  
#傳回值: 一個包含兩個字典的數組
def make_dic(Hiragana, endH, Katakana, endK):
    dic = {}
    start1, end1 = ord(Hiragana), ord(endH)#先轉換成對應  unicode值,用于後續計算
    start2, end2 = ord(Katakana), ord(endK)
    
    num = 0  # 用于計數
    #實際上 這個key沒啥用,因為  start1,  start2,等不是從零開始的
    #for key in range(end2-start2):  # 85個數
    # dic[chr(start1 + key)] = chr(start2 + key)

    for key in range(start2, end2):  # 85個數 
        dic[chr(start1 + num)] = chr(start2 + num)
        #解釋: 例如 ABCDEFG與 abcdefg
        # 字典添加元素: dic[A]=a  A 與a 對應
        # A +1 與 a + 1 對應 (unicode) --》B 與 b
		#來個循環就把 所有元素都對應起來了
        num += 1

    ldict = dict(zip(dic.values(), dic.keys()))  # 字典倒轉
    return [dic, ldict]  #  傳回一個包含兩個字典的數組

def check_chart(input_str, arr):
    for v in input_str:#字元數組裡的單個字元
        print(v, end=" : ")
        if v in arr[0]:#arr[0]— {平:片} 字典,判斷是否在字典裡,有的話輸出
            print(arr[0][v])
        elif v in arr[-1]:#arr[-1]— {片:平} 字典,上面字典沒有就在這個字典尋找,
            print(arr[-1][v])


input_str = input("輸入:\n")#從控制台輸入 一串 假名,不能有換行
# 平假名範圍,片假名範圍:範圍一樣, 元素對應
arr = make_dic("\u3041", "\u3096", "\u30A1", "\u30F6")
check_chart(base_str, arr)
           

運作結果:

-

平假名與片假名 互相轉換python3:RUBY

RUBY

之是以講RUBY。。因為它太友善了

Python3 轉位元組 轉其他編碼 不能直接加減 得到其他字元(正則和進制 就算了,不會呀),是以用unicode

ruby可以直接在 字元範圍 間 周遊,不需要格外 轉碼

def show_info
   #平假名範圍:"\u3041", "\u3096" 
  for index in "\u3041".."\u3096" do
    printf index
  end
  puts "\n"
  #片假名範圍: "\u30A1", "\u30F6"
  for index in "\u30A1".."\u30F6" do
    printf index
    # print index
  end
end
show_info
           
平假名與片假名 互相轉換python3:RUBY

賊友善,後面搞個字典把它們對應起來,控制台輸入判斷,得出結果,哦了~

ruby有字典反轉的函數:hash.invert 建立一個新的 hash,倒置 hash 中的 keys 和values

後續搞個 循環,不用每次比對完都要重新點選運作

注意:

  • ruby 在windows下中文日文 會亂碼(有的是輸出正常,輸入亂碼)
  • 測試: 建立一個.rb 檔案: puts gets.chomp #列印輸入的字元

解決方法:

  • 檔案頭部 加 utf-8 注釋,檔案頭加 GBK編碼,系統改成 utf8

    結果。。随機

    (反正我沒成功,轉到 Linux 【預設使用utf-8 編碼,賊舒服】)

用其他語言都差不多,關鍵就是一個字元轉換問題,哎,溜了溜了