Member Avatar

Hi everyone. I'm new here and would like some help with some Python code. I'm trying to use modulus to shift decode an input line (regular sentence or word like "Bill") but I keep going over the regular alphabet in ascii and the "B" becomes an "=" How do I make "B" become "W" or any other letter that goes over the regular alphabet?

c_string = raw_input("Enter desired sentence to convert: ")

cs_string = 5

ci_string = cs_string % 26

upper_string = c_string.upper()

for ch in upper_string:
    ascii = ord(ch)

    if ch.isalpha():
        ascii -= cs_string
        if ascii > ord("z"):
            ascii -= 26

    print chr(ascii),
Member Avatar

Tried that but it only shifts in the other direction, which I definitely don't want.

Why don't you try something like this:

from string import letters
# Upper letters only
letters = letters[26:]

c_string = raw_input("Enter desired sentence to convert: ")

cs_string = 5
ci_string = cs_string % 26
upper_string = c_string.upper()

for ch in upper_string:
    lett_idx = letters.find(ch)

    if lett_idx != -1:
        lett_idx -= cs_string
        if lett_idx < 0:
            lett_idx += len(letters)

    print letters[lett_idx],

You don't actually need to do the check for if lett_idx < 0 since negative indices in Python will still give you the same result, I was just keeping your logic intact

Member Avatar

Hmm, haven't learned any of that stuff, I think I should keep to modulus, any idea on how to use it? Thanks.

Member Avatar

Hey guys I managed to figure it out myself. Thanks for the help.
However what in my code makes it insert a space after every letter and how do I undo that? like if I input "BJ" the output is "W E" and I just want "WE." And how can I restrict it to an 80 character window without wrapping if the input is a very long single line? Thanks a ton.

Hey guys I managed to figure it out myself. Thanks for the help.
However what in my code makes it insert a space after every letter and how do I undo that? like if I input "BJ" the output is "W E" and I just want "WE." And how can I restrict it to an 80 character window without wrapping if the input is a very long single line? Thanks a ton.

Having a comma in your print statement gives you the spaces. Either upgrade to Python3.X with the new print function or use sys.stdout like so:

import sys

# Your code here

#Instead of print chr(ascii), use this:
sys.stdout.write(chr(ascii))

Either that or simply create a new string variable in your loop and print it after the loop exits:

new_str = ''

# Do stuff

for ch in usr_input:
    # Do stuff
    new_str += new_character

print new_str

HTH