Question 5
The function replaces the old string in a sentence with the new string, only if the sentence ends with the old string. If more than one occurrence of the old string in sentence, only the one at the end is replaced. For example, replace_ending("abcabc", "abc", "xyz") should return abcxyz, not xyzxyz.
My code:
def replace_ending(sentence, old, new):
new_sentence=''
new_sentence1=''
if old in sentence:
start_i = sentence.index(old)
oldword_length=len(old)
new_sentence1=sentence[start_i len(old):]
while old in new_sentence1:
start_i = new_sentence1.index(old)
oldword_length=len(old)
new_sentence1 = new_sentence1[start_i len(old):]
new_sentence=sentence[:start_i] new sentence[start_i len(old):]
return new_sentence
return sentence
print(replace_ending("It's raining cats and cats","cats","dogs"))
# Should display "It's raining cats and dogs"
CodePudding user response:
I removed your comments and replaced with comments showing you what is happening at each stage with the first input. This is something you can do yourself to diagnose issues with your code, or use a debugger to see the values of each variable at each stage and do the same thing.
def replace_ending(sentence, old, new):
# sentence = "It's raining cats and cats"
# old = "cats"
# new = "dogs"
new_sentence=''
new_sentence1=''
if old in sentence:
# "Cats" is in "It's raining cats and cats", so this code executes
start_i = sentence.index(old)
# start_i = 13
new_sentence1=sentence[start_i len(old):]
# start_i len(old) = 13 4 = 17
# new_sentence1 = sentence[17:] = "and cats"
while old in new_sentence1:
# "cats" is in "and cats", so this code executes
start_i = new_sentence1.index(old)
# start_i = 4
new_sentence1 = new_sentence1[start_i len(old):]
# new_sentence1 = new_sentence1[8:] = "" (empty string)
# "Cats is not in the empty string so the while loop finishes here"
new_sentence=sentence[:start_i] new sentence[start_i len(old):]
# new_sentence = sentence[:4] new sentence[8:] = "It's " "dogs" "ing cats and cats"
return new_sentence
return sentence
I can kind of see what you are trying to do and where you went wrong, but this it feels like you are making it quite complicated. Research the built-in string method endswith as this might make it a lot easier.
