Зеркальное отображение строки текста с использованием 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]