BergsvingKollektiv
BergsvingKollektiv

Reputation: 3

program doesnt change letters in string

Ive been trying to make a program that encodes text you input. Everything should be working but every time i run it and input text, it outputs the same text i inputed.

def code_check(letter, letter_check, code_letter):
    if letter == letter_check:
        letter = code_letter
    return letter


def encode(code1):
    for letter in code1:
        letter = code_check(letter, "X", "Y")
        letter = code_check(letter, "F", "A")
        letter = code_check(letter, "V", "M")
        letter = code_check(letter, "D", "E")
        letter = code_check(letter, "O", "U")
        letter = code_check(letter, "T", "C")
        letter = code_check(letter, "B", "N")
        letter = code_check(letter, "L", "Q")
        letter = code_check(letter, "W", "H")
        letter = code_check(letter, "J", "P")
        letter = code_check(letter, "G", "K")
        letter = code_check(letter, "Z", "I")
        letter = code_check(letter, "R", "S")
        letter = code_check(letter, "x", "y")
        letter = code_check(letter, "f", "a")
        letter = code_check(letter, "v", "m")
        letter = code_check(letter, "d", "e")
        letter = code_check(letter, "o", "u")
        letter = code_check(letter, "t", "c")
        letter = code_check(letter, "b", "n")
        letter = code_check(letter, "l", "q")
        letter = code_check(letter, "w", "h")
        letter = code_check(letter, "j", "p")
        letter = code_check(letter, "g", "k")
        letter = code_check(letter, "z", "i")
        letter = code_check(letter, "r", "s")
    return code1


code = input("Type code here: ")


print(encode(code))

Upvotes: 0

Views: 45

Answers (2)

Ahndwoo
Ahndwoo

Reputation: 1025

You can use regular expressions to make this a little less verbose:

import re

# Much tidier!
encode_map = {
    "X": "Y", "F": "A", "V": "M", "D": "E", "O": "U", "T": "C", "B": "N", "L": "Q",
    "W": "H", "J": "P", "G": "K", "Z": "I", "R": "S", "x": "y", "f": "a", "v": "m",
    "d": "e", "o": "u", "t": "c", "b": "n", "l": "q", "w": "h", "j": "p", "g": "k",
    "z": "i", "r": "s"
}

def code_check(match):
    letter = match.group(0)  # Assigns the variable 'letter' with our matched letter

    # Attempts to get the letter from the dictionary, otherwise, just return itself
    return encode_map.get(letter, letter)  

# '\w' will match every letter in code1 in turn, and pass it to 'code_check'
# Once all substitutions are complete, it will pass the replaced string back to code1
code1 = re.sub(r'\w', code_check, code1)

This should get you the same result are you're attempting to get now, but makes it tidier, and more modular.

Upvotes: 1

Barmar
Barmar

Reputation: 780869

Assigning to letter doesn't change the corresponding character in code1. You need to collect the results in a new variable and return that.

def encode(code1):
    result = ''
    for letter in code1:
        letter = code_check(letter, "X", "Y")
        letter = code_check(letter, "F", "A")
        letter = code_check(letter, "V", "M")
        letter = code_check(letter, "D", "E")
        letter = code_check(letter, "O", "U")
        letter = code_check(letter, "T", "C")
        letter = code_check(letter, "B", "N")
        letter = code_check(letter, "L", "Q")
        letter = code_check(letter, "W", "H")
        letter = code_check(letter, "J", "P")
        letter = code_check(letter, "G", "K")
        letter = code_check(letter, "Z", "I")
        letter = code_check(letter, "R", "S")
        letter = code_check(letter, "x", "y")
        letter = code_check(letter, "f", "a")
        letter = code_check(letter, "v", "m")
        letter = code_check(letter, "d", "e")
        letter = code_check(letter, "o", "u")
        letter = code_check(letter, "t", "c")
        letter = code_check(letter, "b", "n")
        letter = code_check(letter, "l", "q")
        letter = code_check(letter, "w", "h")
        letter = code_check(letter, "j", "p")
        letter = code_check(letter, "g", "k")
        letter = code_check(letter, "z", "i")
        letter = code_check(letter, "r", "s")
        result += letter
    return result

Upvotes: 1

Related Questions