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),

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

Edited 7 Years Ago by jlm699: n/a

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

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.

Edited 7 Years Ago by DEATHMASTER: n/a

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

Edited 7 Years Ago by jlm699: n/a

This question has already been answered. Start a new discussion instead.