python - AttributeError in python3 -


i want adapt this code work in persian text.

i changed can seen in code bellow in english_frequency , orda changed. but, has error uppercase in line:

cleaned = [ord(c) c in input.upper() if c.isupper()]. 

can me adapt it?

from string import ascii_uppercase operator import itemgetter  def vigenere_decrypt(target_freqs, input): nchars = len(ascii_uppercase) orda = ord('ا') sorted_targets = sorted(target_freqs)  def frequency(input):     result = [[c, 0.0] c in ascii_uppercase]     c in input:         result[c - orda][1] += 1     return result  def correlation(input):     result = 0.0     freq = frequency(input)     freq.sort(key=itemgetter(1))      i, f in enumerate(freq):         result += f[1] * sorted_targets[i]     return result  cleaned = [ord(c) c in input.upper() if c.isupper()] best_len = 0 best_corr = -100.0  # assume if there less 20 characters # per column, key's long guess in xrange(2, len(cleaned) // 20):     pieces = [[] _ in xrange(i)]     j, c in enumerate(cleaned):         pieces[j % i].append(c)      # correlation seems increase smaller     # pieces/longer keys, weigh against them little     corr = -0.5 * + sum(correlation(p) p in pieces)      if corr > best_corr:         best_len =         best_corr = corr  if best_len == 0:     return ("text short analyze", "")  pieces = [[] _ in xrange(best_len)] i, c in enumerate(cleaned):     pieces[i % best_len].append(c)  freqs = [frequency(p) p in pieces]  key = "" fr in freqs:     fr.sort(key=itemgetter(1), reverse=true)      m = 0     max_corr = 0.0     j in xrange(nchars):         corr = 0.0         c = orda + j         frc in fr:             d = (ord(frc[0]) - c + nchars) % nchars             corr += frc[1] * target_freqs[d]          if corr > max_corr:             m = j             max_corr = corr      key += chr(m + orda)  r = (chr((c - ord(key[i % best_len]) + nchars) % nchars + orda)      i, c in enumerate(cleaned)) return (key, "".join(r))   def main(): encoded = "بفعاع پهيتش غعهدد ذصلدي هزفضر کنهرظ ضذکاح يصتمد فهزگع "  english_frequences = [     14, 4.2, 0.7, 5.2, 0.1, 1.2, 0.4,     1, 1.4, 7.5, 0.1, 8.5, 2.1, 0.1,     3.3, 2.6, 0.7, 0.3, 0.6, 0.2, 1.5,     0.2, 1.6, 1.2, 3, 1.7, 2.7, 5.7, 7.1, 6, 5.7, 9.1]  (key, decoded) = vigenere_decrypt(english_frequences, encoded) print ("key:", key) print ("\ntext:", decoded)  main() 

this python 2 code, , running using python 3 interpreter.

use python 2.

also, compared the original, ruined indentation of many blocks.


Comments

Popular posts from this blog

c++ - llvm function pass ReplaceInstWithInst malloc -

java.lang.NoClassDefFoundError When Creating New Android Project -

Decoding a Python 2 `tempfile` with python-future -