Change Character Based Off Of Its Position? Python 2.7
I have a string on unknown length, contain the characters a-z A-Z 0-9. I need to change each character using their position from Left to Right using a dictionary. Example: string =
Solution 1:
Alright, hopefully this is understandable, otherwise feel free to ask questions.
import random
import string
# Letter pool, these are all the possible characters# you can have in your string
letter_pool = list(string.ascii_letters + string.digits)
input_string = "HelloWorld"
string_length = len(input_string)
# Generate one random dictionary for each character in string
dictionaries = []
for i inrange(string_length):
# Copy letter_pool to avoid overwriting letter_pool
keys = list(letter_pool)
values = list(letter_pool)
# Randomise values, (keep keys the same)
random.shuffle(values)
# This line converts two lists into a dictionary
scrambled_dict = dict(zip(keys, values))
# Now each letter (key) maps to a random letter (value)
dictionaries.append(scrambled_dict)
# Initiate a fresh string to start adding characters to
out_string = ""# Loop though the loop string, record the current place (index) and character each loopfor index, char inenumerate(input_string):
# Get the dictionary for this place in the string
dictionary = dictionaries[i]
# Get the randomised character from the dictionary
new_char = dictionary[char]
# Place the randomised character at the end of the string
out_string += new_char
# Print out the random stringprint(out_string)
Edit: If you want to only generate the random dictionaries once, and load them in everytime, you can serialise the dictionaries
array. My favourite is json.
Solution 2:
With the help of Mark Tolonen in this post, I was able to come up with a solution. The following example only uses 4 dictionaries, while i intend to do more:
# Input Stringstring = "ttttttttttttttttttttttttttttttt"# Defining dictionarys for 0-4
dicnums = [{"0":"n","1":"Q","2":"k","3":"W","4":"F","5":"g","6":"9","7":"e","8":"v","9":"3","a":"r","b":"T","c":"c","d":"o","e":"b","f":"y","g":"2","h":"A","i":"i","j":"p","k":"1","l":"P","m":"w","n":"x","o":"s","p":"Y","q":"h","r":"G","s":"7","t":"S","u":"6","v":"K","w":"Z","x":"M","y":"C","z":"J","A":"u","B":"f","C":"j","D":"E","E":"a","F":"H","G":"O","H":"N","I":"l","J":"U","K":"I","L":"V","M":"m","N":"5","O":"R","P":"4","Q":"z","R":"L","S":"0","T":"q","U":"D","V":"8","W":"B","X":"X","Y":"d","Z":"t"}, {"0":"q","1":"6","2":"W","3":"4","4":"J","5":"u","6":"n","7":"T","8":"I","9":"O","a":"V","b":"3","c":"Z","d":"s","e":"R","f":"E","g":"G","h":"P","i":"5","j":"l","k":"e","l":"m","m":"F","n":"t","o":"8","p":"K","q":"L","r":"Y","s":"M","t":"D","u":"j","v":"z","w":"H","x":"g","y":"9","z":"f","A":"0","B":"p","C":"o","D":"d","E":"X","F":"S","G":"k","H":"1","I":"Q","J":"C","K":"U","L":"i","M":"r","N":"w","O":"y","P":"B","Q":"2","R":"x","S":"A","T":"c","U":"7","V":"h","W":"v","X":"N","Y":"b","Z":"a"}, {"0":"x","1":"W","2":"q","3":"B","4":"j","5":"I","6":"E","7":"g","8":"U","9":"e","a":"8","b":"3","c":"5","d":"k","e":"9","f":"N","g":"7","h":"Q","i":"t","j":"r","k":"L","l":"Z","m":"b","n":"n","o":"Y","p":"H","q":"R","r":"6","s":"P","t":"1","u":"S","v":"M","w":"p","x":"l","y":"F","z":"2","A":"c","B":"T","C":"G","D":"h","E":"X","F":"v","G":"s","H":"O","I":"D","J":"4","K":"a","L":"A","M":"m","N":"d","O":"C","P":"f","Q":"V","R":"i","S":"o","T":"u","U":"w","V":"0","W":"K","X":"z","Y":"y","Z":"J"}, {"0":"x","1":"W","2":"q","3":"B","4":"j","5":"I","6":"E","7":"g","8":"U","9":"e","a":"8","b":"3","c":"5","d":"k","e":"9","f":"N","g":"7","h":"Q","i":"t","j":"r","k":"L","l":"H","m":"b","n":"n","o":"Y","p":"Z","q":"R","r":"6","s":"P","t":"1","u":"S","v":"M","w":"p","x":"l","y":"F","z":"2","A":"c","B":"T","C":"G","D":"h","E":"X","F":"v","G":"s","H":"O","I":"D","J":"4","K":"a","L":"A","M":"m","N":"d","O":"C","P":"f","Q":"V","R":"i","S":"o","T":"u","U":"w","V":"0","W":"K","X":"z","Y":"y","Z":"J"}]
# Changing my string characters
string_fin = ''.join(dicnums[i%4][c] for i,c in enumerate(string))
# Print resultprint string_fin
The result is "SD11SD11SD11SD11SD11SD11SD11SD1"
if i use all 't's. If i make the dict range broader, and am not using the same characters repeatedly(which i wont be) then the output would be much better. Once combined with the rest of my encryption concept, my program might actually work like i want.
Post a Comment for "Change Character Based Off Of Its Position? Python 2.7"