Reputation: 3
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
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
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