Logo Questions Linux Laravel Mysql Ubuntu Git Menu
 

Trouble with alternating string case

Working through exercises on the CodeWars website and I need help being pointed in the right direction for a simple function:

Write a function toWeirdCase (weirdcase in Ruby) that accepts a string, and returns the same string with all even indexed characters in each word upper cased, and all odd indexed characters in each word lower cased. The indexing just explained is zero based, so the zero-ith index is even, therefore that character should be upper cased.

The passed in string will only consist of alphabetical characters and spaces(' '). Spaces will only be present if there are multiple words. Words will be separated by a single space(' ').

The code I have so far is this:

def to_weird_case(string):
    #TODO
    new_string = ''
    add = 0 
    for letter in range(len(string)):
        if string[letter] == ' ':
            add += 1
            new_string += string[letter]
            continue

        if (letter+add)%2 == 0:
            new_string += string[letter].upper()
        else:
            new_string += string[letter].lower()

    print("Returning: " + new_string)
    return new_string

I am trying to iterate over each letter while taking in to account the spaces but I am unsure how to 'skip over' the spaces and that is what is messing up my function? If someone could point me in the right direction that would be helpful, thanks.

like image 789
SlowRaise Avatar asked Jul 26 '26 02:07

SlowRaise


2 Answers

def to_weird_case(string):
    #TODO
    counter = 0
    new_string = ''
    add = 0 
    for letter in range(len(string)):
        if string[letter] == ' ':
            new_string += string[letter]
            continue

        if (counter)%2 == 0:
             new_string += string[letter].upper()
        else:
            new_string += string[letter].lower()
        # Increment counter after one place as 0th position is even
        counter = counter + 1
    print("Returning: " + new_string)
    return new_string


to_weird_case("HELLO MY NAME IS abcdefghijk")

Output : Returning: HeLlO mY nAmE iS aBcDeFgHiJk

like image 53
JyotiGrover Avatar answered Jul 28 '26 15:07

JyotiGrover


Just create a counter (an integer variable) that will keep track of whether you are in an even or odd index. The counter will not increment if you encounter a space, thereby ignoring it.

def to_weird_case(string):
    #TODO
    counter = 0
    new_string = ''
    add = 0 
    for letter in range(len(string)):
        if string[letter] == ' ':
            new_string += string[letter]
            continue

        # Increment counter only if not space
        counter = counter + 1
        if (counter)%2 == 0:
             new_string += string[letter].upper()
        else:
            new_string += string[letter].lower()

        print("Returning: " + new_string)
        return new_string
like image 27
Thomas James Tiam-Lee Avatar answered Jul 28 '26 16:07

Thomas James Tiam-Lee



Donate For Us

If you love us? You can donate to us via Paypal or buy me a coffee so we can maintain and grow! Thank you!