2016-06-23 6 views
0

Я должен заменить каждый символ символом после него двумя в алфавите. Например, g - i и a - c. Я всегда получаю эту ошибку в то время как я делал программу для ее решенияПодстрока не найдена ошибка

substring not found 

Вот мой код:

string="g fmnc wms bgblr rpylqjyrc gr zw fylb. rfyrq ufyr amknsrcpq ypc dmp. bmgle gr gl zw fylb gq glcddgagclr ylb rfyr'q ufw rfgq rcvr gq qm jmle. sqgle qrpgle.kyicrpylq() gq pcamkkclbcb. lmu ynnjw ml rfc spj." 
#=========this is the string on the site 
alphapet="abcdefghijklmnopqrstuvwxyz" 
#this is the alphapet ofcourse 
x="" 
y=0 
z="" 
m=0 
#that was declaring variables 
#the following is a loop which would go through string 
for i in string: 
    #the if statement should check if i was in alphapet string 
    if i in alphapet: 
     if i=="y": 
      string.replace(i,"a") 
     elif i=="z": 
      string.replace(i,"b") 
     #the previous two conditions were special cases 
     else: 
      #the x will equal the first character as m =0 which is"g" 
      x=string[m] 
      #the y should equal the index of the character in alphapet this is were the error comes 
      y=alphapet.index(x) 
      #the z should equal the letter that comes after it by 2 in alphapet 
      z=alphapet[y+2] 
      #the following line should replace it 
      string.replace(i,z) 
      m+=1 
print(string) 
+0

В какой строке говорится, что ваша ошибка возникает? – nbryans

+1

Он должен быть: y = alphapet.index (x) – Ohumeronen

+2

Ничто в коде, который вы включили в свой вопрос, никогда не будет напечатано 'substring not found'. –

ответ

1
s = "g fmnc wms bgblr rpylqjyrc gr zw fylb." 
alphapet = "abcdefghijklmnopqrstuvwxyz" 
alphapet += alphapet #This is a Trick. You can use it. 
new_string = "" 
for i in s:#once edited:"for i in string:" 
    if i not in alphapet: 
     new_string += i 
    else: 
     new_string += alphapet[alphapet.index(i)+2] 
print new_string 
+1

Вам нужно изменить 'for i в строке' на' for i in s' или переименовать 's'. – roganjosh

+1

, который был супер умным человеком, спасибо –

+1

его также можно решить, добавив только «ab» в конце –

1

При запуске

x=string[m] 

x будет равен индексу m в string, включая знаки препинания и пробелы и т. д.

Таким образом, при работе

y=alphapet.index(x) 

Программа выдаст сообщение об ошибке, потому что нет знаков препинания или пробелы в вашем alphapet.

Что вам нужно сделать, это либо изменить код для обработки пунктуации, либо добавить знаки препинания в alphapet.

+0

вы заметили «если я в алфавите» над первым случаем –

+0

@ islamzidan, я еще не тестировал его, но мне кажется, что 'i' отличается от' string [m] ', потому что' m' только увеличивается, если i в alphapet', а 'i' изменяется с каждая итерация цикла 'for'. – JAW

0

Проблема заключается в том, что вы увеличиваете m только в другом, а не каждый раз. Как только i является символом, не находящимся в алфавите, это не то же самое, что и строка [m]. Если вы зададите свой m+=1, он решит эту проблему, но на самом деле вам просто не нужно m, так как у вас уже есть i.

В коде есть и другие проблемы: str.replace не изменяет строку на месте (строки неизменяемы), но возвращает измененную строку, и вы не назначаете этот результат, поэтому это бесполезно.

Но даже если replace() изменил вашу строку, у вас все еще есть проблема.

string = 'abcdef' 
string = string.replace('a', 'c') # 'cbcdef' 
string = string.replace('b', 'd') # 'cdcdef' 
string = string.replace('c', 'e') # 'ededef' <- not what you want 

Так что вам нужно построить новую отдельную строку, итерации, чтобы делать то, что вы хотите.

Или вы можете посмотреть метод str.maketrans().

0

См. Измененную версию, ниже которой работает. Строковые замены должны быть сохранены обратно в строку, конкретно string = string.replace(...). Как указывалось другими, m не всегда увеличивалось в исходном коде. Вместо этого я использовал enumerate, чтобы получить как строковые символы, так и индексы.

string="g fmnc wms bgblr rpylqjyrc gr zw fylb. rfyrq ufyr amknsrcpq ypc dmp. bmgle gr gl zw fylb gq glcddgagclr ylb rfyr'q ufw rfgq rcvr gq qm jmle. sqgle qrpgle.kyicrpylq() gq pcamkkclbcb. lmu ynnjw ml rfc spj." 
#=========this is the string on the site 
alphapet="abcdefghijklmnopqrstuvwxyz" 
#this is the alphapet ofcourse 
x="" 
y=0 
z="" 
m=0 
#that was declaring variables 

#temporarily convert the special cases 
string = string.replace("y","Y") 
string = string.replace("z","Z") 

#the following is a loop which would go through string 
#enumerate gets each string character(i) as well as its index (j) 
for j,i in enumerate(string): 
    if i in alphapet: 
     x=string[j] 
     y=alphapet.index(x) 
     z=alphapet[y+2] 
     string = string[:j]+string[j].replace(i,z)+string[j+1:] 

#convert the special cases 
string = string.replace("Y","a") 
string = string.replace("Z","b") 
Смежные вопросы