0

我正在努力从 o-string 二进制到 Unicode,这个过程的一部分需要将 Raised Position 转换为 Binary。我似乎无法完成它。文档测试将解释需要执行的操作。

我在下面提供了我的代码,但离得到正确答案还差得很远。

def raisepos_to_binary(s): ''' (str) -> str 将表示在提升位置表示中的盲文字符的字符串转换为二进制表示。TODO:供学生完成。

>>> raisedpos_to_binary('')
'00000000'
>>> raisedpos_to_binary('142536')
'11111100'
>>> raisedpos_to_binary('14253678')
'11111111'
>>> raisedpos_to_binary('123')
'11100000'
>>> raisedpos_to_binary('125')
'11001000'
'''

res = ''
lowest_value = '00000000'
for i, c in enumerate(s):
    if c == i:
        lowest_value = lowest_value.replace('0', '1')
return lowest_value
4

1 回答 1

0

看起来您可以创建一个个位数的集合(转换为整数),然后在 1..8 的范围内迭代生成“1”或“0”,例如:

def raisedpos_to_binary(digits):
    raised = {int(digit) for digit in digits}
    return ''.join('1' if n in raised else '0' for n in range(1, 9))

测试:

for test in ['', '142536', '14253678', '123', '125']:
    print(test, '->', raised_pos_to_binary(test))

给你:

 -> 00000000
142536 -> 11111100
14253678 -> 11111111
123 -> 11100000
125 -> 11001000

因此,您的模块应包含以下内容:

def raisedpos_to_binary(digits):
    """
    >>> raisedpos_to_binary('')
    '00000000'
    >>> raisedpos_to_binary('142536')
    '11111100'
    >>> raisedpos_to_binary('14253678')
    '11111111'
    >>> raisedpos_to_binary('123')
    '11100000'
    >>> raisedpos_to_binary('125')
    '11001000'
    """

    raised = {int(digit) for digit in digits}
    return ''.join('1' if n in raised else '0' for n in range(1, 9))


if __name__ == '__main__':
    import doctest
    doctest.testmod()

然后使用以下命令运行您的脚本:

python your_script.py -v
于 2019-10-16T18:28:18.897 回答