Python镜像字符串函数

时间:2013-11-04 03:01:33

标签: python string python-3.x

我正在尝试开发一个函数mirror(),它接受​​一个字符串并返回其镜像字符串,但前提是镜像字符串可以使用给定字符串中的“镜像”字母表示。

例如,

>>>mirror('vow')
'wov'
>>>mirror('wood')
'boow'
>>>mirror('bed')
'INVALID'

也就是说,镜像bd。字母e没有任何镜像等价物。

到目前为止,我已经开始使用

def mirror(s):
    return str[::-1]

如何将其扩展为完整的单词?

5 个答案:

答案 0 :(得分:3)

首先,你应该有一个存储每个角色的镜像的字典。

mirrored = {'b': 'd', 'd': 'b', 'v': 'v', ...}

因此,对于我们需要生成镜像的每个字符串,您应该检查给定字符串中的每个字符是否都在字符串本身中具有镜像值。

given_string = input()
valid = True
for char in given_string:
    if not mirrored[char] in given_string:
        valid = False
        break
if valid:
    # generate mirrored string

您正在使用的反向字符串方法是正确的。只需添加上面的检查&你将会在生成镜像字符串的路上!

另一种方法是使用for的简单Python hack ... else

given_string = input()
valid = True
for char in given_string:
    if not mirrored[char] in given_string:
        break
else:
    # generate mirrored string

答案 1 :(得分:1)

您可以在迭代字符串时查找生成器表达式中的替换字符(反向)。您可以使用str.join将字符重新组合为字符串。我建议使用“更容易请求宽恕而不是权限”的习惯来处理无效字符(如果字符有效,请不要检查,而是使用trycatch语句来处理异常如果不是则提出。

def mirror(s):
    mir={'b':'d','d':'b','o':'o','p':'q','q':'p','v':'v','w':'w','x':'x'}
    try:
        return "".join(mir[c] for c in reversed(s))
    except KeyError:
        return "INVALID"

答案 2 :(得分:0)

您有正确的想法以相反的顺序迭代给定的字母。但是,您不一定只是将每个字母本身作为自己的镜像版本。一个例子是bd,它们是彼此的镜像版本。

如果您正在学习编程,最简单的方法是使用for循环向后移动给定的字母,并为每个字母使用一些if语句来确定镜像字母(如果有的话。)

答案 3 :(得分:0)

试试这个:

def mirror(s):
    mir = {'b': 'd', 'd': 'b', 'o': 'o', 'p': 'q',
           'q': 'p', 'v': 'v', 'w': 'w', 'x': 'x'}
    if not set(s).issubset(mir.keys()):
        return 'INVALID'
    return ''.join(map(lambda x: mir[x], s[::-1]))

这里使用set来判断str s中的字符是否有效。

答案 4 :(得分:-1)

def mirror(lst):
  return lst + lst[-2::-1]

print(mirror([0, 2, 4, 6]))