从右到左,从左到右印刷得很好

Ser*_*hya 3 python hebrew right-to-left python-3.x left-to-right

我想让它产生一个单词旁边的数字,这样我就可以要求用户使用相应的数字来选择单词.

这是我的代码

alt_words = hlst
loopnum = 8
for i in range(loopnum):
        if i < len(alt_words):
            print('{0}. {1:<20}'.format((i+1), alt_words[i]), end =' ')
            if i == 0:
                print('', end=' ')
        if i + 9 <= len(alt_words):
            print('{0}. {1:<20}'.format((i+9), alt_words[i+8]), end =' ')
        if i + 17 <= len(alt_words):
            print('{0}.  {1:<20}'.format((i+17), alt_words[i+16]), end=' ')
        print('\n'+'-'*80)
Run Code Online (Sandbox Code Playgroud)

它产生了这个 代码输出

每行的第一个数字打印在左侧,但是右侧的单词,而其余的数字和单词打印在RTL上.似乎一旦python开始在LTR线上打印,它就可以切换到RTL,但不能从RTL返回到LTR.请注意,即使周期打印在每行第二组数字的数字右侧.

它工作得很好,用英文单词看起来不错:

python表在英语中工作

我猜一个工作可能涉及把数字放在后面,但我认为必须有一个更好的方法.

kpo*_*zin 6

在每个希伯来词的开头放置一个从右到左的嵌入字符,u'\u202B'在每个单词的末尾放置一个Pop Directional Formatting字符u'\u202C'.

这将把希伯来语单词设置为另外的LTR文档中的RTL部分.

(请注意,虽然这将产生正确的输出,但您还依赖于正在运行此脚本的终端应用程序,该脚本已正确实现了Unicode双向算法.)

  • 我认为你想要`u'\u2067'` RIGHT-TO-LEFT ISOLATE 和`u'\u2069'` POP DIRECTIONAL ISOLATE,而不是RIGHT-TO-LEFT 嵌入和POP 方向格式化。从右到左的方向嵌入大致具有强 RTL 字符对周围文本的影响,这可能会导致 [不良重新排序](https://ideone.com/VOysHA) 您想要与嵌入中的 RTL 字符。 (2认同)

dvb*_*dvb 6

请参阅纯 python 中的双向 (BiDi) 布局实现

\n

安装:

\n
pip install python-bidi\n
Run Code Online (Sandbox Code Playgroud)\n

用法示例:

\n
from bidi.algorithm import get_display\nprint(get_display(\'LTR text with RTL text (\xd7\x98\xd7\xa7\xd7\xa1\xd7\x98 \xd7\x9c\xd7\x93\xd7\x95\xd7\x92\xd7\x9e\xd7\x90) will be printed correctly\'))\n
Run Code Online (Sandbox Code Playgroud)\n

如果您使用 Django,还可以使用以下包:\n http://pypi.python.org/pypi/django-bidi-utils

\n