我想把十进制数从西方阿拉伯语(0,1,2,3,4,5,6)转换成东方阿拉伯语(٠,١,٢,٣))

2024-04-26 04:25:16 发布

您现在位置:Python中文网/ 问答频道 /正文

在python中有什么方法可以将十进制数(99.3)转换成(٩)吗 ٩ (图1)

我可以把简单的整数转换成阿拉伯语,但问题是十进制。你知道吗

devanagari_nums = ('۰', '۱', '۲', '۳', '۴', '۵', '۶', '۷', '۸', '۹')
number = str(numeral)
return ''.join(devanagari_nums[int(digit)] for digit in number)

Tags: 方法innumberforreturn整数intjoin
1条回答
网友
1楼 · 发布于 2024-04-26 04:25:16

有三种方法(也许更多)来解决这个问题。一种是使用输入数字的数值(例如"6"转换为6)作为带输出数字的元组的索引。正如您所发现的,这样做的困难在于小数点没有数值。您可以使用if测试来解决这个问题:

>>> numeral = 12.345
>>> number = str(numeral)
>>> number
'12.345'
>>> digits = [devanagari_nums[int(k)]  if k.isdigit() else k for k in number]
>>> ''.join(digits)
'۱۲۳.۴۵'

当需要查找时,Python程序员几乎会自动获取字典。因此,另一个明显的方法是使用字典而不是元组作为查找表。这相当于显式地声明等价'6' => '۶',而不是依赖于占据元组第6位的'۶'。你知道吗

>>> devanagari_nums = {'0':'۰', '1':'۱', '2':'۲', '3':'۳', '4':'۴', '5':'۵', '6':'۶', '7':'۷', '8':'۸', '9':'۹', '.': '.'}
>>> numeral = 12.345
>>> number = str(numeral)
>>> digits = [devanagari_nums[k] for k in number ]
>>> ''.join(digits)
'۱۲۳.۴۵'

您的问题将99.3等同于٩ ٩ .٣,但我怀疑这与SO编辑器对RTL脚本的处理有关,而不是与您的期望有关,因为您的代码暗示您期望٩٩.٣。如果我弄错了,在''.join(digits)之前做digits.reverse()。你知道吗

第三条路是不明显的,离你原来的方法很远,所以我把它留到最后:

>>> tx = str.maketrans('0123456789','۰۱۲۳۴۵۶۷۸۹')
>>> number.translate(tx)   # number as defined in the earlier examples
'۱۲۳.۴۵'

这看起来像上面的第一种方法:从输入字符到输出字符的位置映射。在Python2中,它就是这样。但是在python3中,它是第二种方法的变体,如果您检查tx,就会很快发现:

>>> tx
{48: 1776, 49: 1777, 50: 1778, 51: 1779, 52: 1780, 53: 1781, 54: 1782, 55: 1783, 56: 1784, 57: 1785}

我想我不需要解释ord('1') == 49ord('۱') == 1777。你知道吗

相关问题 更多 >