Как именно этот код работает, чтобы перевернуть строку в Python - PullRequest
1 голос
/ 27 июня 2019
def reverse(x):
    output = ""
    for c in x:
        output = c + output

    return output

print(reverse("Hello"))

Этот код прекрасно работает для обращения строки в Python, я просто не могу понять, почему она работает и как.

Если, например, я перебираю строку, обычно она перебирает и печатает, начиная с «H», и переходит к «O». Как это здесь, это идет назад?

Ответы [ 3 ]

2 голосов
/ 27 июня 2019

Если вы поместите какой-то вывод в ваш цикл, вы увидите, как код заполняет строку.

def reverse(x):
    output = ""
    for c in x:
        output = c + output
        print(output)

    return output

print(reverse("Hello"))

Итак, вы можете увидеть, как это работает:

H
eH
leH
lleH
olleH
olleH

Таким образом, вы рекламируете последний до конца, и именно так вы обращаетесь к нему.Если вы переключите следующую строку в вашем цикле:

output = output + c 

, тогда порядок не будет обратным:

H
He
Hel
Hell
Hello
Hello
1 голос
/ 27 июня 2019

Этот цикл проходит по символам строки, и для каждого символа добавляет его к текущему результату.

Давайте отследим значение output при переходе по символам(значения c):

c output
H H
e eH
l leH
l lleH
o olleH
0 голосов
/ 27 июня 2019

Каждый раз, когда персонаж входит в цикл, он добавляется в вывод. Изначально выход = ""

Итак, для итерации 1: output = ""

c = "H"
output = "H" + "" = "H"

Итерация 2: выход = "H"

c = "e"
output = "e" + "H" = "eH"

Итерация 3: выход = "eH"

c = "l"
output = "l" + "eH" = "leH"

Итерация 4: output = "leH"

c = "l"
output = "l" + "leH" = "lleH"

Итерация 5: output = "lleH"

c = "o"
output = "o" + "lleH" = "olleH"

Таким образом, окончательный результат выходит на «olleH»

...