Переполнение индекса - Python - PullRequest
0 голосов
/ 10 июня 2018

Я привык кодировать на C, и я пытаюсь передать функции, которые я реализовал, в Python, и я новичок в этом языке.Здесь эта функция отлично работает в C, но она дает мне переполнение, когда я ввожу следующий ввод:

"Rafael af rosa"

Что может быть не так?

def substr(str1,str2,str3):
    """The function analyzes a string and replaces a part with another."""
    #str1 is the function which the part will be replaced.
    #str2 is the part to be replaced.
    #str3 is the string that will replace str2 in str1.
    n=0
    while n<len(str1):
        if str1[n]==str2[0]:
            k=0
            l=n
            d=1
            while k<len(str2):
                if str1[l]!=str2[k]:
                    d=0
                    break
                k+=1
                l+=1
            if d==1:
                if len(str2)>len(str3):
                    l=0
                    while l<(len(str2)-len(str3)):
                        k=n
                        while str1[k]!=0:
                            str1[k]=str1[k+1]
                            k+=1
                        l+=1
                if len(str3)>len(str2):
                    l=0
                    while l<(len(str3)-len(str2)):
                        k=len(str1)
                        while k>=n:
                            str1[k+1]=str1[k]
                            k-=1
                        l+=1
                k=n
                l=0
                while l<len(str3):
                    str1[k]=str3[l]
                    k+=1
                    l+=1
                n+=len(str3)-1
        n+=1
    return str1

str1=input()
str2=input()
str3=input()
strf=substr(str1,str2,str3)
print(strf)

Ответы [ 2 ]

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

Или вы можете просто сделать:

'Rafael'.replace('af', 'rosa')
0 голосов
/ 10 июня 2018

Добро пожаловать в программирование на Python!Как человек, который перешел с C на Delphi на Python, я могу сказать, что ваш новый язык очень полезен и интересен.

Однако Python сильно отличается от C и имеет разные способы работы.Вместо того, чтобы переводить ваш код C в Python, вам лучше изучить Python и переделать ваш код с нуля.

Одно отличие состоит в том, что строки Python являются неизменяемыми.Это означает, что вы не можете изменить часть строки, например, символ.Вы должны заменить всю строку новой строкой.Таким образом, ваше утверждение str1[k]=str1[k+1] не будет работать вообще.

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

place = str1.find(str2)
strf = str1[:place] + str3 + str1[place+len(str2):]
print(strf)

, и это выведет

Rrosaael

, что, я думаю, то, что вы хотели.

(Вау, я чувствую себя идиотом.) Еще лучше, делай то, что предлагает @BertKellerman:

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