greg-bt
greg-bt

Reputation: 71

Comparing spaces in python

I am creating a cipher script in python without any modules but I have come accross a problem that i cant solve. When I am comparing msg[3] which has the value (space) it should be equal to bet[26] which is also a space. If i compare msg[3] with bet[26] in the shell...

>>>msg[3] == bet[26]
True

The output is True. However when i run the program and output the value of enmsg there is no value 26 where the value 26 should be.

enmsg = []
msg = "try harder"    
bet = "abcdefghijklmnopqrstuvwxyz "
for x in range(0, len(msg)):
    for i in range(0, 26):
        if msg[x] == bet[i]:
            print(msg[x])
            enmsg.append(i)

Upvotes: 0

Views: 789

Answers (3)

Patrick Haugh
Patrick Haugh

Reputation: 60944

You should get out of the habit of iterating over a range of indices and then looking up the value at the index. Instead iterate directly over your iterables, using enumerate when necessary.

enmsg = []
msg = "try harder"    
bet = "abcdefghijklmnopqrstuvwxyz "
for msg_char in msg:
    for index, bet_char in enumerate(bet):
        if msg_char == bet_char:
            print(msg_char)
            enmsg.append(index)

Upvotes: 1

Benjamin Engwall
Benjamin Engwall

Reputation: 294

The upper bound of range is not inclusive; you'll need to extend this by one to actually check the 26th index of the string. Better yet, iterate up through len(bet) as you did for len(msg) for the outer loop.

Upvotes: 0

m33n
m33n

Reputation: 1751

Your second loop iterations are too short so it is not reaching the space symbol. Try with this:

enmsg = []
msg = "try harder"    
bet = "abcdefghijklmnopqrstuvwxyz "
for x in range(0, len(msg)):
    for i in range(len(bet)):
        if msg[x] == bet[i]:
            print(msg[x])
            enmsg.append(i)

Upvotes: 0

Related Questions