懂了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)运行结果:
-
之所以讲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 endendshow_info
贼方便,后面搞个字典把它们对应起来,控制台输入判断,得出结果,哦了~
ruby有字典反转的函数:hash.invert 创建一个新的 hash,倒置 hash 中的 keys 和values
后续搞个 循环,不用每次匹配完都要重新点击运行
解决方法:
文件头部 加 utf-8 注释,文件头加 GBK编码,系统改成 utf8结果。。随机
(反正我没成功,转到 Linux 【默认使用utf-8 编码,贼舒服】)
用其他语言都差不多,关键就是一个字符转换问题,哎,溜了溜了