Python Forum

Full Version: Writing a basic shift code
You're currently viewing a stripped down version of our content. View the full version with proper formatting.
I'm trying to write a basic shift code using this code:
print("1) Make a code")
print("2) Decode a message")
print("3) Quit")

alphabet = ['a','b','c','d','e','f','g','h','i','j','k','l','m','n','o','p','q','r','s','t','u','v','w','x','y','z',]

def shift():
    message = input("Please enter a message")
    number = int(input('Please enter the number that you would like to shift by:'))
    for letter in message:
        letter = letter.lower()
        if letter.isalpha():
            new_position = alphabet.index(letter) + number
            if new_position > 26:
                new_position = new_position - 26
            new_letter = alphabet.index(new_position)
            for letter in message:
                print(new_letter)
        elif letter.isnumeric():
            letter = letter
            print(letter)
        elif letter == " " or letter == "," or letter == "." or letter == ";" or letter == ":":
            letter = letter
            print(letter)
        else:
            print("Error in message please try a different message")
    choice = int(input("Enter your selection:"))

def decode():
    message = input("Please enter a message to decode")
    number = int(input('Please enter the number shift key'))
    for letter in message:
        letter = letter.lower()
        if letter.isalpha():
            new_position = alphabet.index(letter) - number
            new_letter = alphabet.index(new_position)
            for letter in message:
                print(new_letter)
        elif letter.isnumeric():
            letter = letter
            print(letter)
        elif letter == " " or letter == "," or letter == "." or letter == ";" or letter == ":":
            letter = letter
            print(letter)
        else:
            print("Error in message please try a different message")
    choice = int(input("Enter your selection:"))


def main():
    repeat = True
    choice = int(input("Enter your selection:"))
    while repeat == True:
        if choice == 1:
            shift()
        elif choice == 2:
            decode()
        elif choice == 3:
            repeat = False
        else:
            print("Incorrect choice please try again")
            choice = int(input("Enter your selection:"))

main()
    
But I get this error:
Error:
File "c:/Users/djwil/Documents/python/learning python/Chapter 19 - Chunky Challenges/Shift Code.py", line 64, in <module> main() File "c:/Users/djwil/Documents/python/learning python/Chapter 19 - Chunky Challenges/Shift Code.py", line 55, in main shift() File "c:/Users/djwil/Documents/python/learning python/Chapter 19 - Chunky Challenges/Shift Code.py", line 16, in shift new_letter = alphabet.index(new_position) ValueError: 4 is not in list
Can someone help me fix this?
index method from docs is:
Quote:Return zero-based index in the list of the first item whose value is equal to x. Raises a ValueError if there is no such item.
-- meaning that if you want to know at what index is f.e. char 'd' alphabet.index('d') would return:
Output:
3
and if I understand right you want new_letter to be a letter at the index of new_position from alphabet, so you should rewrite this line:
new_letter = alphabet.index(new_position)
to this:
new_letter = alphabet[new_position]
Thanks :)