I have a problem with a function I am trying to implement that needs to replace some letters (in a given string), for some other characters, defined on a dictionary.
I have this dictionary:
chars = {
'A': ['4', '@'],
'E': ['3', '€', '&', '£'],
'T': ['7'],
'S': ['$', '§', '5'],
'I': ['1', '!'],
'O': ['0'],
'B': ['8'],
'C': ['<'],
'L': ['1']
}
I want to pass a string that when a character matches any key from the dictionary (case insensitive match), it tries to save all the possible combinations for that letter, using the values on the dictionary.
Here’s what I currently have:
def type4 (words, v):
chars = {
'A': ['4', '@'],
'E': ['3', '€', '&', '£'],
'T': ['7'],
'S': ['$', '§', '5'],
'I': ['1', '!'],
'O': ['0'],
'B': ['8'],
'C': ['<'],
'L': ['1']
}
tmp = []
string = []
for w in words: # each character in a word
for key in chars.keys(): # [A, E, T, S, I, O, B, C, L]
for c in chars[key]: # [4, @, 3, €, &, £, ...]
string = list(w)
k = 0
ya = ""
for char in string:
if (char == key or char == key.lower()):
string[k] = c
else:
string[k] = char
k += 1
if (not string == list(w)):
for i in string:
ya += i
print(ya, end="nn")
tmp.append(ya)
return tmp
In the current code, I have only replaced a character on the string. I need to change it so that it matches the output below,
The desired output, using the word sopa, should be like the following:
sopa
sop4
sop@
s0pa
s0p4
s0p@
$opa
$op4
$op@
$0pa
$0p4
$0p@
§opa
§op4
§op@
§0pa
§0p4
§0p@
5opa
5op4
5op@
50pa
50p4
50p@
I appreciate any help. Thank y’all in advance.
Advertisement
Answer
You were on the right track. Here is your modified function without recursion or itertools. This code also allows the function to take either a single word or a list of words.
def type4 (words):
chars = {'A': ['4', '@'],'E': ['3', '€', '&', '£'],'T': ['7'],'S': ['$', '§', '5'],
'I': ['1', '!'],'O': ['0'],'B': ['8'],'C': ['<'],'L': ['1']}
tmp = []
#This allows you to take a single word or list of words as argument
if type(words) is str:
tmp = [words]
elif type(words) is list:
tmp.extend(words)
for word in tmp:
for letter in word:
if letter.upper() in chars:
for new_letter in chars[letter.upper()]:
new_word = word.replace(letter, new_letter)
tmp.append(new_word)
return set(tmp)
print(type4("sopa"))
#{'$op@', '$opa', 's0pa', '$0pa', '§opa', '5op@', '§0pa', '$0p4', '50pa', '$op4', 'sopa', '$0p@', 's0p4', '5op4', '§op@', '5opa', '50p4', '§0p@', '50p@', 'sop4', '§0p4', '§op4', 's0p@', 'sop@'}