← Back to Community
hey everybody
Profile icon
FARHEENPALAGIRI

Hi everybody. It's me again. And I'm still stuck on the same code despite all your effort to help me. I'm sorry. But could someone please explain to me why this what I'm currently doing isn't working. I honestly don't understand. Here's the link again, but I made a few changes.

Here's the link: https://repl.it/@FARHEENPALAGIRI/Delete-every-third-character

Answered by a5rocks [earned 5 cycles]
View Answer
Voters
Profile icon
FARHEENPALAGIRI
Comments
hotnewtop
Profile icon
a5rocks

Here is something that should work. It uses modular arithmetic to find the third character, and uses continue to skip an interation. Both these are great tools, and I think you should check them out. Anyway, here :

start = input('Your string? ') end = '' for i in range(len(start)): if i%3 == 2: continue end += start[i] print(end)

Another thing is that you should join the repl.it discord (https://discord.gg/XadDsju), in which you would be able to get more comprehensive help.

Profile icon
Nanashi

@a5rocks Extremely close, just that the question specifies deletion of indices divisible by 3. Yours is the solution for deletion of every third character, though to be honest that sounds like a more likely problem.

input 0123456789abcdefghij i%3==0 12 45 78 ab de gh j i%3==2 01 34 67 9a cd fg ij
Profile icon
a5rocks

@Nanashi Oh sorry, must have misread the question. Good catch though :D

+1

Profile icon
Nanashi

As of writing, you have this:

s = input() x = 0 for i in range(len(s)): if x > len(s): break else: l = s[x] s2 = s.replace(l,'') x += 3 print(s2)

And you are getting IndexError: string index out of range. Your code will actually run on a string of length 7 or 8 but not 6 or multiples of 3. Why? When x becomes 6, l tries to become s[6], meaning the character from indices 6 to 7 (equivalent to s[6:7]), but s has length of 6 not 7 therefore the index is out of range. To stop it, break if x >= len(s).

There are more problems, though. You don't want to use replace() because it will replace every instance of the substring. With your code, input "0011" outputs "00".

Also, s itself is never changing, so s2 is being assigned to the same string with a slightly different action upon each iteration. # [...] is supposed to delete every character who's index is divisible by three. So, basically every third number including the first. With your code, input "01234" outputs "0124" when you want "124".

*I'm busy atm and will check back later.


You can use i in for i in range(len(s)): as the index and have a new string take s[i]:

s = input("Input: ") s2 = "" for i in range(len(s)): if i % 3 != 0: s2 = s2 + s[i] print(s2)

% is modulo (remainder of division). This is saying to add s[i] if the index is not evenly divisible by 3.

String slicing also works and is closer to your approach:

s = input("Input: ") x = 0 while x < len(s): s = s[0:x] + s[x+1::] x += 2 print(s)