鱼C论坛

 找回密码
 立即注册
查看: 2452|回复: 16

[已解决]字典问题

[复制链接]
发表于 2021-4-1 19:16:47 | 显示全部楼层 |阅读模式
10鱼币
  1. #去除字符串中的空格
  2. complex_font = []
  3. familiar_style = []
  4. pompt = '''砵 妸 屙 讹 俄 娥 峨 莪 锇 鹅 蛾 额 婀 厄 阨 呃 扼 苊 轭 垩 恶 饿 谔 鄂 阏 愕
  5. 萼 遏 腭 锷 鹗 颚 噩 諤 鳄 恩 蒽 摁 儿 而 鸸 鲕 尔 耳 迩 洱 饵 珥 铒 二 佴 贰 唔 诶'''
  6. str1 = pompt
  7. for each in str1:
  8.     if each == ' ':#去除空格
  9.         str1.replace(each,' ')

  10.     else:
  11.         complex_font.append(each)

  12. pormpt = '''砵 妸 屙 訛 俄 娥 峨 莪 锇 鵝 蛾 額 婀 厄 阨 呃 扼 苊 轭 垩 惡 餓 谔 鄂 阏 愕
  13. 萼 遏 腭 锷 鹗 颚 噩 諤 鳄 恩 蒽 摁 兒 而 鸸 鲕 爾 耳 迩 洱 餌 珥 铒 二 佴 貳唔 诶'''
  14. str2 = pormpt
  15. for each in str2:
  16.     if each == ' ':#去除空格
  17.         str2.replace(each,' ')
  18.     else:
  19.         familiar_style.append(each)

  20. dict1 = {}
  21. dict1 = dict(zip(complex_font,familiar_style))#设置键和键值


  22. def fun(content):
  23.     list_reverse = list(content)
  24.     for each in list_reverse:
  25.         for each_font in complex_font:
  26.             if each in each_font:
  27.                  print(dict1[each_font],end = '')
  28.             
  29. content = input('请输入一个字符串:')
  30. fun(content)
复制代码
现在能够实现简体转换成繁体,有什么方法可以将繁简互转吗?
最佳答案
2021-4-1 19:16:48
huangdongdong 发表于 2021-4-2 23:50
我按照你提供的方法进行了改进,可以实现但出现了未知的bug,不知道如何解决

你的变量命名,怎么那么奇怪,哈哈哈

我也不知道我为啥要 重新造轮子。。
就这样吧,
  1. #简体转繁体        
  2. def to_ft(s, jt_set, ft_set):
  3.     return ft_set[jt_set.index(s)]

  4. #繁体转简体
  5. def to_jt(s, jt_set, ft_set):
  6.     return jt_set[ft_set.index(s)]
  7.    

  8. # 互转
  9. def hz(s, jt_set, ft_set):
  10.     j_and_f = []

  11.     for e in s.strip():
  12.         if e in jt_set:
  13.             j_and_f.append(to_ft(e, jt_set, ft_set))

  14.         if e in ft_set and e not in jt_set: # 繁体中 有和 简体 一样的字,要排除掉
  15.             j_and_f.append(to_jt(e, jt_set, ft_set))
  16.             
  17.     return j_and_f


  18. if __name__ == '__main__':
  19.    
  20.     jt, ft = '所有简体字 例如:中华民国', '所有簡體字 例如:中華民國'  #注意:这里必须一一对应,本程序逻辑才正常
  21.     jt_set = [x for x in jt]
  22.     ft_set = [y for y in ft]

  23.     # s = input('请输入一个字符串:')
  24.     # print(to_jt(s, jt_set, ft_set))
  25.     test_case = '簡 简国 中华民国 中華民國'
  26.     changed = hz(test_case, jt_set, ft_set)
  27.     print(test_case)
  28.     print(''.join(changed))
复制代码

最佳答案

查看完整内容

你的变量命名,怎么那么奇怪,哈哈哈 我也不知道我为啥要 重新造轮子。。 就这样吧,
想知道小甲鱼最近在做啥?请访问 -> ilovefishc.com
回复

使用道具 举报

发表于 2021-4-1 19:16:48 | 显示全部楼层    本楼为最佳答案   
huangdongdong 发表于 2021-4-2 23:50
我按照你提供的方法进行了改进,可以实现但出现了未知的bug,不知道如何解决

你的变量命名,怎么那么奇怪,哈哈哈

我也不知道我为啥要 重新造轮子。。
就这样吧,
  1. #简体转繁体        
  2. def to_ft(s, jt_set, ft_set):
  3.     return ft_set[jt_set.index(s)]

  4. #繁体转简体
  5. def to_jt(s, jt_set, ft_set):
  6.     return jt_set[ft_set.index(s)]
  7.    

  8. # 互转
  9. def hz(s, jt_set, ft_set):
  10.     j_and_f = []

  11.     for e in s.strip():
  12.         if e in jt_set:
  13.             j_and_f.append(to_ft(e, jt_set, ft_set))

  14.         if e in ft_set and e not in jt_set: # 繁体中 有和 简体 一样的字,要排除掉
  15.             j_and_f.append(to_jt(e, jt_set, ft_set))
  16.             
  17.     return j_and_f


  18. if __name__ == '__main__':
  19.    
  20.     jt, ft = '所有简体字 例如:中华民国', '所有簡體字 例如:中華民國'  #注意:这里必须一一对应,本程序逻辑才正常
  21.     jt_set = [x for x in jt]
  22.     ft_set = [y for y in ft]

  23.     # s = input('请输入一个字符串:')
  24.     # print(to_jt(s, jt_set, ft_set))
  25.     test_case = '簡 简国 中华民国 中華民國'
  26.     changed = hz(test_case, jt_set, ft_set)
  27.     print(test_case)
  28.     print(''.join(changed))
复制代码
想知道小甲鱼最近在做啥?请访问 -> ilovefishc.com
回复

使用道具 举报

发表于 2021-4-1 19:42:07 From FishC Mobile | 显示全部楼层
我感觉汉字简繁体之间没有一一对应关系
所以没办法互转
想知道小甲鱼最近在做啥?请访问 -> ilovefishc.com
回复

使用道具 举报

 楼主| 发表于 2021-4-1 21:18:57 | 显示全部楼层
wp231957 发表于 2021-4-1 19:42
我感觉汉字简繁体之间没有一一对应关系
所以没办法互转

每一个简体字都是键,每一个繁体字都是简体字对应的键值
想知道小甲鱼最近在做啥?请访问 -> ilovefishc.com
回复

使用道具 举报

 楼主| 发表于 2021-4-1 21:20:15 | 显示全部楼层
huangdongdong 发表于 2021-4-1 21:18
每一个简体字都是键,每一个繁体字都是简体字对应的键值

这不是对应关系吗?
想知道小甲鱼最近在做啥?请访问 -> ilovefishc.com
回复

使用道具 举报

发表于 2021-4-1 21:50:08 | 显示全部楼层
huangdongdong 发表于 2021-4-1 21:20
这不是对应关系吗?

汉语这么多字,
这。。。写不过来吧
想知道小甲鱼最近在做啥?请访问 -> ilovefishc.com
回复

使用道具 举报

 楼主| 发表于 2021-4-1 21:56:02 | 显示全部楼层
小伤口 发表于 2021-4-1 21:50
汉语这么多字,
这。。。写不过来吧

汉字只要复制粘贴就行
想知道小甲鱼最近在做啥?请访问 -> ilovefishc.com
回复

使用道具 举报

发表于 2021-4-1 22:04:52 | 显示全部楼层
  1. # python繁体字简体字互转第三方库

  2. import zhconv
  3. # print(zhconv.convert('中华民国', 'zh-tw'))
  4. print(zhconv.convert('中華民國', 'zh-cn'))

  5. # 可选中文字符集:
  6. # ('zh-hans', 'zh-hant', 'zh-cn', 'zh-sg', 'zh-tw', 'zh-hk', 'zh-my', 'zh-mo')
复制代码
想知道小甲鱼最近在做啥?请访问 -> ilovefishc.com
回复

使用道具 举报

发表于 2021-4-1 22:06:23 | 显示全部楼层
用第三方中文简繁体互转模块,即可

  1. # python繁体字简体字互转第三方库

  2. import zhconv
  3. # print(zhconv.convert('中华民国', 'zh-tw'))
  4. print(zhconv.convert('中華民國', 'zh-cn'))

  5. # 可选中文字符集:
  6. # ('zh-hans', 'zh-hant', 'zh-cn', 'zh-sg', 'zh-tw', 'zh-hk', 'zh-my', 'zh-mo')
复制代码
想知道小甲鱼最近在做啥?请访问 -> ilovefishc.com
回复

使用道具 举报

发表于 2021-4-1 22:09:00 | 显示全部楼层
huangdongdong 发表于 2021-4-1 21:56
汉字只要复制粘贴就行

为啥我的回答没显示。。这是我第三次尝试回答。。

------用第三方中文简繁体互转模块,即可
  1. # python繁体字简体字互转第三方库

  2. import zhconv
  3. # print(zhconv.convert('中华民国', 'zh-tw'))
  4. print(zhconv.convert('中華民國', 'zh-cn'))

  5. # 可选中文字符集:
  6. # ('zh-hans', 'zh-hant', 'zh-cn', 'zh-sg', 'zh-tw', 'zh-hk', 'zh-my', 'zh-mo')
复制代码
想知道小甲鱼最近在做啥?请访问 -> ilovefishc.com
回复

使用道具 举报

发表于 2021-4-1 23:09:58 | 显示全部楼层
你的第二个汉字最后三个有问题,没分开。
互转是不是得先确定哪个是繁体哪个是简体吧?
你这程序就是固定顺序,输入上边汉字群里的字,然后到下边汉字群里寻找对应的值。
要想不固定,你还得再写一个函数就行反转。也就是把下边的汉字群作为关键字,上边的汉字群作为键值。
想知道小甲鱼最近在做啥?请访问 -> ilovefishc.com
回复

使用道具 举报

发表于 2021-4-1 23:33:20 | 显示全部楼层
python执行excel的VBA 在VBA中使用word自带的函数ToolsSCTCTranslate就可以繁体转换    曲线救国
想知道小甲鱼最近在做啥?请访问 -> ilovefishc.com
回复

使用道具 举报

 楼主| 发表于 2021-4-2 17:57:13 | 显示全部楼层
江湖散人 发表于 2021-4-1 23:09
你的第二个汉字最后三个有问题,没分开。
互转是不是得先确定哪个是繁体哪个是简体吧?
你这程序就是固定 ...

complwx_font#简体字,familiar_style#繁体字。
因为键和键值是对应的,所以可以通过键可以找到键值,难道不能通过键值找到键吗?
想知道小甲鱼最近在做啥?请访问 -> ilovefishc.com
回复

使用道具 举报

 楼主| 发表于 2021-4-2 17:59:15 | 显示全部楼层
阿奇_o 发表于 2021-4-1 22:09
为啥我的回答没显示。。这是我第三次尝试回答。。

------用第三方中文简繁体互转模块,即可

我想自己做出来。算是完成小甲鱼老师的作业吧
想知道小甲鱼最近在做啥?请访问 -> ilovefishc.com
回复

使用道具 举报

发表于 2021-4-2 19:38:36 | 显示全部楼层
huangdongdong 发表于 2021-4-2 17:59
我想自己做出来。算是完成小甲鱼老师的作业吧

哈哈,那既然你已经实现 从简体到繁体,那从繁体到简体,不也可以吗?
你当做练习,那就分别创建两个函数,
to_jt() #繁体->简体
to_ft() #简体->繁体
再创建一个 互转的 fun_convt(is_j_or_f) ,
里面判断一下参数属于简/繁,对应调用上面其中一个转换函数,OK。

想知道小甲鱼最近在做啥?请访问 -> ilovefishc.com
回复

使用道具 举报

发表于 2021-4-2 20:28:48 | 显示全部楼层
直接转应该要导入模块,不过如果你是吧简体和繁体字弄成了一个字典然后在将字典里的键值对互转的话倒好办
  1. simple = "哎 哀 唉 埃 挨 锿 捱 皑 癌 嗳 矮 蔼 霭 艾 爱 砹 隘 嗌 嫒 碍 暧"
  2. complex = "哎 哀 唉 埃 挨 锿 捱 皚 癌 噯 矮 藹 靄 艾 愛 砹 隘 嗌 嬡 礙 曖"
  3. my_dict = {}

  4. def msplit(string):
  5.     s = ''
  6.     for each in string.split(' '):
  7.         s += each
  8.     return s

  9. def trans(dit):
  10.     dit2 = {}
  11.     for key,value in dit.items():
  12.         dit2[value] = key
  13.     return dit2

  14. simple = msplit(simple)
  15. complex = msplit(complex)

  16. for i in range(len(simple)):
  17.     my_dict[simple[i]] = complex[i]

  18. new_dict = trans(my_dict)

  19. print(new_dict['礙'])
复制代码
想知道小甲鱼最近在做啥?请访问 -> ilovefishc.com
回复

使用道具 举报

 楼主| 发表于 2021-4-2 23:50:52 | 显示全部楼层
阿奇_o 发表于 2021-4-2 19:38
哈哈,那既然你已经实现 从简体到繁体,那从繁体到简体,不也可以吗?
你当做练习,那就分别创建两个函 ...
  1. #去除文字中的空格
  2. complex_font = []#简体
  3. familiar_style = []#繁体
  4. pompt = '''砵 妸 屙 讹 俄 娥 峨 莪 锇 鹅 蛾 额 婀 厄 阨 呃 扼 苊 轭 垩 恶 饿 谔 鄂 阏 愕
  5. 萼 遏 腭 锷 鹗 颚 噩 諤 鳄 恩 蒽 摁 儿 而 鸸 鲕 尔 耳 迩 洱 饵 珥 铒 二 佴 贰 唔 诶'''
  6. str1 = pompt
  7. for each in str1:
  8.     if each == ' ':#去除空格
  9.         str1.replace(each,' ')

  10.     else:
  11.         complex_font.append(each)

  12. pormpt = '''砵 妸 屙 訛 俄 娥 峨 莪 锇 鵝 蛾 額 婀 厄 阨 呃 扼 苊 轭 垩 惡 餓 谔 鄂 阏 愕
  13. 萼 遏 腭 锷 鹗 颚 噩 諤 鳄 恩 蒽 摁 兒 而 鸸 鲕 爾 耳 迩 洱 餌 珥 铒 二 佴 貳唔 诶'''
  14. str2 = pormpt
  15. for each in str2:
  16.     if each == ' ':#去除空格
  17.         str2.replace(each,' ')
  18.     else:
  19.         familiar_style.append(each)

  20. #简体转繁体        
  21. dict1 = {}
  22. dict1 = dict(zip(complex_font,familiar_style))#设置键和键值
  23. def fun(content):
  24.     list_reverse = list(content)
  25.     for each in list_reverse:
  26.         for each_font in complex_font:
  27.             if each in each_font:
  28.                  print(dict1[each_font],end = '')

  29. #繁体转简体
  30. dict2 = {}
  31. dict2 = dict(zip(familiar_style,complex_font))
  32. def function(content):
  33.     list_preserve = list(content)
  34.     for each in list_preserve:
  35.         for each_font in familiar_style:
  36.             if each in each_font:
  37.                 print(dict2[each_font],end = '')


  38.    
  39. #判断字体
  40. def font(content):
  41.     list_font = list(content)
  42.     for each in list_font:
  43.         if each in complex_font:
  44.             fun(content)
  45.         else:
  46.             function(content)

  47. content= input('请输入一个字符串:')
  48. font(content)
  49.    


复制代码
我按照你提供的方法进行了改进,可以实现但出现了未知的bug,不知道如何解决
  1. ==================== RESTART: C:\Users\ASUS\Desktop\modle.py ===================
  2. 请输入一个字符串:洱 饵 珥 铒 二 佴 贰 唔 诶
  3. 洱餌珥铒二佴貳唔诶洱珥铒二佴唔诶洱餌珥铒二佴貳唔诶洱珥铒二佴唔诶洱餌珥铒二佴貳唔诶洱珥铒二佴唔诶洱餌珥铒二佴貳唔诶洱珥铒二佴唔诶洱餌珥铒二佴貳唔诶洱珥铒二佴唔诶洱餌珥铒二佴貳唔诶洱珥铒二佴唔诶洱餌珥铒二佴貳唔诶洱珥铒二佴唔诶洱餌珥铒二佴貳唔诶洱珥铒二佴唔诶洱餌珥铒二佴貳唔诶
  4. >>>
  5. ==================== RESTART: C:\Users\ASUS\Desktop\modle.py ===================
  6. 请输入一个字符串:厄 阨 呃
  7. 厄阨呃厄阨呃厄阨呃厄阨呃厄阨呃
  8. >>>
复制代码


想知道小甲鱼最近在做啥?请访问 -> ilovefishc.com
回复

使用道具 举报

您需要登录后才可以回帖 登录 | 立即注册

本版积分规则

小黑屋|手机版|Archiver|鱼C工作室 ( 粤ICP备18085999号-1 | 粤公网安备 44051102000585号)

GMT+8, 2024-5-17 17:12

Powered by Discuz! X3.4

© 2001-2023 Discuz! Team.

快速回复 返回顶部 返回列表