Как сохранить все итерации цикла в Python - PullRequest
0 голосов
/ 08 октября 2018

Так вот что у меня есть.Это программа, в которой мне нужно взять случайную строку, например) "]] [] [sfgfbd [pdsbs] \ bdgb";и лишить его всех специальных символов.функция "Strip" работает по своему назначению.

message=(str.lower(input("Enter a Coded message: ")))
offset=int(input("Enter Offset: "))
alphabet="abcdefghijklmnopqrstuvwxyz"
def strip(text):
    print("Your Lower case string is: ",message)
    print("With the specials stripped: ")
    for index in text:
        if index in alphabet:
            print(index, end="")
    print()
    return strip

Мне нужен вывод из strip в функции "decode", но я никак не могу понять, как сохранить итерации "index"

def decode(character):
    encrypted= ""
    for character in message:
        global offset
        if character == " ":
            encrypted+= " "
        elif ord(character) + offset > ord("z"):
            encrypted+=chr(ord(character) +offset - 26)
        else:
            encrypted+= chr(ord(character)+(offset))
    print("the decoded string is: ",encrypted,end=" ")
    print()

Таким образом, «декодирование» принимает только выходные данные из исходного ввода «сообщения».«Пэйлин», однако, преуспевает в получении значения декодирования.

def palin(code):
    print(code[::-1])
    print(code[:])
    if code[::-1]==code[:]:
        print("This is a Palindrome!")
    else:
        print("This is not a Palindrome.")
    return palin
print()
palin(decode(strip(message)))

1 Ответ

0 голосов
/ 08 октября 2018

Не запутайтесь между print и return.

Вам нужно внимательно посмотреть на выходные данные ваших методов (то, что они возвращают, а не то, что они печатают вконсоль):

  • методы strip() и palin() возвращают ссылки на себя, а не что-либо полезное, связанное с их входами.
  • метод decode() isn 't не возвращает ничего.

Чтобы исправить это, вы можете использовать переменную внутри вашего метода, которую вы строите на основе входных переменных, используя желаемую логику.Например:

def strip(text):
    print("Your Lower case string is: ",text)
    print("With the specials stripped: ")
    stripped_text = "" # <-- create and initialise a return variable
    for index in text:
        if index in alphabet:
            stripped_text += index # <-- update your return variable
            print(index, end="")
    print()
    return stripped_text # <-- return the updated variable

Затем вам нужно сделать нечто подобное для decode(), хотя здесь у вас уже есть выходная переменная (encrypted), поэтому вам просто нужно return в концеметод.

Метод palin() не должен ничего возвращать: он просто распечатывает результат.


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

Например, вы можете использовать replace() для упрощения вашего strip() метода:

def strip(text):
    return text.replace('[^a-z ]','') # <-- that's all you need :)
...