python中有什么方法可以将十进制数(99.3)转换为(٩٩.٣)
我可以将简单的整数转换为东部阿拉伯语,但问题在于十进制。
devanagari_nums = ('۰', '۱', '۲', '۳', '۴', '۵', '۶', '۷', '۸', '۹')
number = str(numeral)
return ''.join(devanagari_nums[int(digit)] for digit in number)
python中有什么方法可以将十进制数(99.3)转换为(٩٩.٣)
我可以将简单的整数转换为东部阿拉伯语,但问题在于十进制。
devanagari_nums = ('۰', '۱', '۲', '۳', '۴', '۵', '۶', '۷', '۸', '۹')
number = str(numeral)
return ''.join(devanagari_nums[int(digit)] for digit in number)
有三种方法(也许更多)来解决这个问题。一种是使用输入数字的数值(例如"6"
转换为6
)作为带有输出数字的元组的索引。正如您所发现的,这样做的困难在于小数点没有数值。您可以使用if
-test 解决此问题:
>>> 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 脚本的处理比您期望的更多,因为您的代码暗示您期望٩٩.٣
. 如果我错了,digits.reverse()
请先做''.join(digits)
。
第三种方法不明显,与您原来的方法相去甚远,所以我把它留到最后:
>>> tx = str.maketrans('0123456789','۰۱۲۳۴۵۶۷۸۹')
>>> number.translate(tx) # number as defined in the earlier examples
'۱۲۳.۴۵'
这看起来像上面的第一种方式:从输入字符到输出字符的位置映射。而在 Python 2 中,情况正是如此。但在 Python 3 的底层,它是第二种方式的变体,如果你检查一下,你会很快发现tx
:
>>> tx
{48: 1776, 49: 1777, 50: 1778, 51: 1779, 52: 1780, 53: 1781, 54: 1782, 55: 1783, 56: 1784, 57: 1785}
我想我不需要解释ord('1') == 49
和ord('۱') == 1777
。