Попытка поиска 2 символов одновременно в python - PullRequest
0 голосов
/ 09 июня 2018

Я просто возвращаюсь в python и пытаюсь искать по двум символам за раз в строке и заменять их чем-то другим.Например, поиск в строке «aah» строки «aa» и замена ее чем-то другим, например, «xx», но когда я пытаюсь его запустить, он говорит, что type должен быть строкой, а не int.Это мой код, любая помощь будет принята с благодарностью, спасибо

test = input("enter words to encrypt\n")
#print(test)

#change a letter
def changea(test):
    #print(test)
    outp = ""
    for i in test:
        if i & i+1  == "aa":
            outp += "x"
        else:
            outp += i

    print(outp)
changea(test)

Ответы [ 2 ]

0 голосов
/ 09 июня 2018

В идеале вы должны использовать replace или re.sub.Но если вы решили использовать цикл, вот что вы можете попробовать:

def changea(test):
    pairs = zip(test, test[1:] + "$")
    out = ""
    for x, y in pairs:
        if x == "a" and y == "a":
            out += "x"
            next(pairs) # Skip the next iteration
        else:
            out += x
    return out

changea("Maary haad aa little laamb")
#'Mxry hxd x little lxmb'
0 голосов
/ 09 июня 2018

Оператор & делает bitwise and для двух целых чисел.Ваш цикл for проходит по строке, поэтому переменная цикла i принимает в качестве значений последовательные символы строки.Отсюда ошибка: вы применяете оператор & к персонажу.Кроме того, i+1 не имеет смысла: он пытается применить оператор + к символу, и целое число - python будет жаловаться, что вы не можете объединить символ и целое число.

Выражение i & i+1 былонамеревался дать вам два смежных символа, но это неправильно.

Есть несколько способов продолжить: один - перебрать строку, используя индексы (что, я думаю, вы и пытались сделать, так как вы назвалипеременная for-loop i (традиционное имя для индекса цикла).

for i in range(len(test)):

сделает i целым числом в диапазоне от 0 до len(test)-1.Затем вам нужно вырезать два символа строки, начиная с позиции i:

for i in range(len(test)):
     if test[i:i+2] == "aa":
         outp += "x"
     else:
         outp += test[i]

Вы должны помнить, что индекс по строке идет от 0 до len(string) - 1, и у вас также естьпомнить, что срез test[i:j] - это фрагмент строки между индексами i и j-1 ( NOT j).

Это не особо идиоматический питон, ноНадеюсь, это понятно.

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...