如何在Python中测试翻译对称性?

时间:2016-06-11 05:29:23

标签: python

我们从用户那里获得两个定义映射(字符转换)的字符值,例如'a' -> 'p'。我们如何测试其他字符串对,以查看字符串中的所有字符是否保持相同的映射/转换。例如:

'abcd', 'pqrs' returns True
'aaa', 'ppp' returns True
'acb', 'pqr' returns False
'aab', 'pqr' returns False

2 个答案:

答案 0 :(得分:5)

我们要确认字符从一个字符串到另一个字符串的偏移(移位)是一致的。确保目标字符串长度相同;计算偏移量并使用all()和生成器表达式组合来尝试确保逻辑在第一次未命中时完成,如果有的话,而不是继续检查:

def test(first, second, third, fourth):

    if len(third) != len(fourth):
        return False

    offset = ord(first) - ord(second)

    return all((ord(x) - ord(y)) == offset for x, y in zip(third, fourth))

>>> test('a', 'p', 'abcd', 'pqrs')
True
>>> test('a', 'p', 'aaa', 'ppp')
True
>>> test('a', 'p', 'acb', 'pqr')
False
>>> test('a', 'p', 'aab', 'pqr')
False

答案 1 :(得分:1)

您可以通过从用户中删除第一个ASCII值来实现此目的。

'abcd' = [97 98 99 100] subtract it by 'a' give you [0 1 2 3].
'pqrs' = [112 113 114 115] subtract it by 'p' give you [0 1 2 3].

因此,如果减法结果为您提供相同的结果,请返回True