user12181087
user12181087

Reputation:

How to find vowels in the odd positions of a string?

For my code, I have to make a function that counts the number of vowels in the odd positions of a string.

For example, the following will produce an output of 2.

st = "xxaeixxAU"
res = countVowelsOdd(st)
print (res)

For my code, the only problem I have is figuring out how to tell python to count the vowels in the ODD positions.

This is found in the second part of the "if statement" in my code where I tried to make the index odd by putting st[i] %2 == 1. I get all types of errors trying to fix this.

Any idea how to resolve this?

def countVowelsOdd(st):
    vowels = "aeiouAEIOU"
    count = 0
    for i, ch in enumerate(st):
        if i in vowels and st[i] % 2 == 1:
            count += 1
    return count

Upvotes: 3

Views: 919

Answers (4)

gboffi
gboffi

Reputation: 25053

Please, have a look at this

In [1]: a = '01234567'                                                                    

In [2]: print(*(c for c in a[0::2]))                                                       
0 2 4 6

In [3]: print(*(c for c in a[1::2]))                                                      
1 3 5 7

In [4]: print(*(c in '12345' for c in a[1::2]))                                           
True True True False

In [5]: print(sum(c in '12345' for c in a[1::2]))                                         
3

does it help with your problem?

Upvotes: 0

Max Voitko
Max Voitko

Reputation: 1629

enumerate provides you first argument i as position.

def countVowelsOdd(st):
    vowels = "aeiouAEIOU"
    count = 0
    for i, ch in enumerate(st):
        if ch in vowels and i % 2 == 1:
            count += 1

    return count

Upvotes: 1

Tim Biegeleisen
Tim Biegeleisen

Reputation: 521914

I don't know if your assignment/project precludes the use of regex, but if you are open to it, here is one option. We can first do a regex replacement to remove all even-positioned characters from the input. Then, do a second replacement to remove all non-vowel characters. Finally, what remains gives us correct vowel count.

st = "xxaeixxAU"
st = re.sub(r'(.).', '\\1', st)
print(st)
st = re.sub(r'[^aeiou]', '', st, flags=re.IGNORECASE)
print(len(st))

This prints:

xaixU
3

Upvotes: 0

Sayse
Sayse

Reputation: 43320

if i in vowels ...

i is the index, you want the letter

if ch in vowels ...

and then since you have the index, that is what you find the modulo on

if ch in vowels and i % 2 == 1:

Upvotes: 1

Related Questions