import operator def frequencies(ciphertext): freq=[0]*26 for i in ciphertext: int_letter = ord(i) - ord('a') freq[int_letter]+=1 return freq def main(): ciphertextInput = input("input ciphertext ") ciphertextInput = ciphertextInput.replace(" ", "") ciphertextInput = ciphertextInput.replace("\t", "") ciphertextInput = ciphertextInput.replace(",", "") ciphertextInput = ciphertextInput.replace(";", "") ciphertextInput = ciphertextInput.replace("!", "") ciphertextInput = ciphertextInput.replace(":", "") ciphertextInputNoSpaces = ciphertextInput.replace(".", "") print("after removing all whitespaces and punctuations") print(ciphertextInputNoSpaces) ciphertext = ciphertextInputNoSpaces.lower() print("after transferring to lowercase letters only") print(ciphertext) cipher_length = len(ciphertext) print("cipher length is ") print(cipher_length) freq = frequencies(ciphertext) print("frequencies are ") for i in range(26): print((chr)((ord)('a')+i), freq[i]) #Creatinga dictionary, key - letter, value - frequency dict={} for i in range(26): next_char=(chr)((ord)('a')+i) dict.update({next_char:freq[i]}) #sorting dictionary by frequencies (values) s_dict=sorted(dict.items(),key=operator.itemgetter(1),reverse=True) #printing sorted dictinary print("Sorted by frequencies") for i in s_dict: print(i) #if you would like to print keys (letters) only: print("Printing letters only in decreasing order of frequencies") for i in s_dict: print(i[0]) main()