Publish Date - March 8th, 2023
|Last Modified - May 11th, 2023
This is a weird question, because the default data in the solutions GUI just complicates things. While you can use a python FOR Loop to traverse through all of the letters in the string, why do that when you can just do a simple concatenate. This solution had me thinking quite a bit because of the default data. However, a very useful Stackoverflow answer steered me in the right direction. I hope my answer can steer you in the right direction as well!
The problem
We have seen that lists are mutable (they can be changed), and tuples are immutable (they cannot be changed).
Let’s try to understand this with an example.
You are given an immutable string, and you want to make changes to it.
Example
>>> string = "abracadabra"
You can access an index by:
>>> print string[5]
a
What if you would like to assign a value?
>>> string[5] = 'k'
Traceback (most recent call last):
File "<stdin>", line 1, in <module>
TypeError: 'str' object does not support item assignment
How would you approach this?
- One solution is to convert the string to a list and then change the value.
Example
>>> string = "abracadabra"
>>> l = list(string)
>>> l[5] = 'k'
>>> string = ''.join(l)
>>> print string
abrackdabra
- Another approach is to slice the string and join it back.
Example
>>> string = string[:5] + "k" + string[6:]
>>> print string
abrackdabra
Task
Read a given string, change the character at a given index and then print the modified string.
Function Description
Complete the mutate_string function in the editor below.
mutate_string has the following parameters:
- string string: the string to change
- int position: the index to insert the character at
- string character: the character to insert
Returns
- string: the altered string
Input Format
The first line contains a string, string.
The next line contains an integer position, the index location and a string character, separated by a space.
Sample Input
STDIN Function ----- -------- abracadabra s = 'abracadabra' 5 k position = 5, character = 'k'
Sample Output
abrackdabra
The solution
For this one, like I stated – don’t over think the code.
def mutate_string(string, position, character):
# string[:position] = abrac
# string[position:] = adabra
# character = k
# newstring = string[:position] + character + string[position:] = abrackadabra
# need some way to get rid of the starting a for the last part of the concatenate
newstring = string[:position] + character + string[position+1:]
return newstring
if __name__ == '__main__':
s = input()
i, c = input().split()
s_new = mutate_string(s, int(i), c)
print(s_new)
After about 25 minutes on trying to loop through and string index / insert the variable, I got some help from Stackoverflow. They had a really useful function below:
def insert_dash(string, index):
return string[:index] + '-' + string[index:]
print insert_dash("355879ACB6", 5)
You can see the similarities between the two functions (the one I wrote and the one created by Mario Cesar).
Some subtle differences are:
- There’s one more input in way of the character
- There isn’t an input function that you need to work with (thank god for return).
Due to there being a third variable (character), you need to find a way to remove the first letter of the third portion of the concatenate, because if you run just this:
newstring = string[:position] + character + string[position:]
You get this:
abrackadabra
With the string[6] being “a” (which you don’t want).
Therefore, by moving the indexing of the third string up by “+1”, you end up skipping that “a” at the end of the concatenate and you get your proper code!
While this code doesn’t really help with data science, machine learning or natural language processing – it does drive down to the fundamentals of string mutation which is important in any coding language. Whether it’s Java or JavaScript – all coding languages have string manipulation, and ensuring that your code is clean and easy to understand is important.
I hope this helps you!