2024-04-26 04:25:16 发布
网友
在python中有什么方法可以将十进制数(99.3)转换成(٩)吗 ٩ (图1)
我可以把简单的整数转换成阿拉伯语,但问题是十进制。你知道吗
devanagari_nums = ('۰', '۱', '۲', '۳', '۴', '۵', '۶', '۷', '۸', '۹') number = str(numeral) return ''.join(devanagari_nums[int(digit)] for digit in number)
有三种方法(也许更多)来解决这个问题。一种是使用输入数字的数值(例如"6"转换为6)作为带输出数字的元组的索引。正如您所发现的,这样做的困难在于小数点没有数值。您可以使用if测试来解决这个问题:
"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位的'۶'。你知道吗
'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()。你知道吗
99.3
٩ ٩ .٣
٩٩.٣
''.join(digits)
digits.reverse()
第三条路是不明显的,离你原来的方法很远,所以我把它留到最后:
>>> tx = str.maketrans('0123456789','۰۱۲۳۴۵۶۷۸۹') >>> number.translate(tx) # number as defined in the earlier examples '۱۲۳.۴۵'
这看起来像上面的第一种方法:从输入字符到输出字符的位置映射。在Python2中,它就是这样。但是在python3中,它是第二种方法的变体,如果您检查tx,就会很快发现:
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。你知道吗
ord('1') == 49
ord('۱') == 1777
有三种方法(也许更多)来解决这个问题。一种是使用输入数字的数值(例如
"6"
转换为6
)作为带输出数字的元组的索引。正如您所发现的,这样做的困难在于小数点没有数值。您可以使用if
测试来解决这个问题:当需要查找时,Python程序员几乎会自动获取字典。因此,另一个明显的方法是使用字典而不是元组作为查找表。这相当于显式地声明等价
'6' => '۶'
,而不是依赖于占据元组第6位的'۶'
。你知道吗您的问题将
99.3
等同于٩ ٩ .٣
,但我怀疑这与SO编辑器对RTL脚本的处理有关,而不是与您的期望有关,因为您的代码暗示您期望٩٩.٣
。如果我弄错了,在''.join(digits)
之前做digits.reverse()
。你知道吗第三条路是不明显的,离你原来的方法很远,所以我把它留到最后:
这看起来像上面的第一种方法:从输入字符到输出字符的位置映射。在Python2中,它就是这样。但是在python3中,它是第二种方法的变体,如果您检查
tx
,就会很快发现:我想我不需要解释
ord('1') == 49
和ord('۱') == 1777
。你知道吗相关问题 更多 >
编程相关推荐