1

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

例如,

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

也就是说,镜像bd. 这封信e没有任何镜像等价物。

到目前为止,我已经开始了

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

我怎样才能将它扩展到整个单词?

4

5 回答 5

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

您使用的反向字符串方法是正确的。只需添加上面的检查,您就可以生成镜像字符串了!

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

given_string = input()
valid = True
for char in given_string:
    if not mirrored[char] in given_string:
        break
else:
    # generate mirrored string
于 2013-11-04T03:12:30.570 回答
1

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

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"
于 2014-05-21T05:35:02.573 回答
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中的chars是否s有效。

于 2014-05-21T05:52:07.437 回答
0

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

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

于 2013-11-04T03:12:19.197 回答
-1
def mirror(lst):
  return lst + lst[-2::-1]

print(mirror([0, 2, 4, 6]))
于 2019-05-23T03:19:03.293 回答