Зеркальное отображение строки текста с использованием Python

Я пытаюсь написать код для зеркального отображения строки в Python. Я предположил, что это похоже на отражение изображения или звука, однако я не могу пройти цикл. Вход и выход должны быть строкой.

def mirror(text):
  mirrorPoint=(len(text)/2)
  for i in range(0,mirrorPoint):
    text=text[mirrorPoint]
  return text+''.join(string(text))
print mirror('text')

Я не уверен, правильно ли это, но это отражается на второй строке текста.

Если вход был 'abcd', вывод должен выдавать 'abba'.

2 ответа

Решение

Если я вас правильно понимаю

def mirror(text):
    mirror_point = int(len(text)/2)
    res = text[:mirror_point]  get slice of text
    return res + res[::-1] # add slice plus reverse of the slice
print mirror( 'abcd')

В вашем коде:

mirrorPoint = (len(text)/2) будет плавающим, поэтому при переходе на диапазон он не будет работать как range нужно целое число

''.join(string(text)), вы бы использовали str(text) если бы вы собирались бросить str но текст уже является строкой, поэтому нет необходимости приводить.

text = text[mirrorPoint] постоянно меняет значение text так что вы получите index error, если вы хотите хранить строковую переменную вне цикла, как res = "", вы могли бы затем использовать res += text[i] где text[i] каждый символ, который вы хотите добавить

Используя свой собственный код:

def mirror(text):
    res = ""
    mirrorPoint = int(len(text)/2)
    for i in range(mirrorPoint):
        res += text[i]
    return text[:mirrorPoint] + res[::-1]

Для обработки строк разной длины нам нужно добавить 1 в mirror_point если строка нечетной длины:

def mirror(text):
    mirror_point = int(len(text) / 2)
    if mirror_point % 2 == 0:
        res = text[:mirror_point]
    else:
        res = text[:mirror_point+1]
    return res + res[::-1]

Следующее инвертирует любой массив.

any_string[::-1]

Таким образом, используя это, вы получите среднюю точку строки, получите первую половину строки и затем объедините ее с той же половиной строки в обратном порядке.

my_string       = "hello"
middle_point    = int(len(my_string/2)) 
mirror_string   = my_string[0:middle_point]+my_string[0:middle_point][::-1]
Другие вопросы по тегам