2016-03-02 141 views
-3
<pre>import os, sys, codecs 
from collections import defaultdict 
letters = 'abcdefghijklmnopqrstuvwxyz' 
bigLetters = 'ABCDEFGHIJKLMNOPQRSTUVWXYZ' 

def countLetters(file): 
    results = defaultdict(int) 
    for line in file: 
     for char in line: 
      if char.lower() in letters: 
       c = char.lower() 
       results[c] += 1 
    return results 

def main(): 
    file = codecs.open('szyfrogram.txt','r',encoding='utf-8') 
    content = file.readlines() 
    file.close() 

    dictionary = countLetters(content) 

    most_popular = (max(dictionary, key=dictionary.get)) 
    shift_for_a = 122 - ord(most_popular.lower()) + 1 
    saveDecoded(content, shift_for_a,'results_decoded.txt') 

def saveDecoded(encoded, shift,file_output): 
    decoded = '' 
    for line in encoded: 
     line = line.strip('\n') 
     for char in line: 
      decoded = decoded + move(char,shift) 
    output = open(filr_output,mode = 'w') 
    output.write(decoded) 
    output.close 

def move(letter,shift): 
    moveletter = letter 
    if letter in letters: 
     lower_range = 96 
     top_range = 122 
     moveCharLetters = ord(letter) + shift 
     if moveCharLetters > top_range: 
      moveCharLetters = lower_range + moveCharLetters-top_range 
      moveletter = chr(moveCharLetters)  
     else: 
      moveletter = chr(moveCharLetters)  
    elif letter in bigLetters: 
     lower_range = 64 
     top_range = 90 
     moveCharLetters = ord(letter) + shift 
     if moveCharLetters > top_range: 
      moveCharLetters = lower_range + moveCharLetters-top_range 
      moveletter = chr(moveCharLetters)  
     else: 
      moveletter = chr(moveCharLetters)  
    else: 
     moveletter = letter 
    return moveletter 

print('countLetters') 
main()<code> 

回溯(最近通話最後一個): 文件 「C:\用戶\瓦爾德馬\應用程序數據\本地\程序\ Python的\ Python35-32 \ Rot14.py」 61行,在 main() 文件「C:\ Users \ waldemar \ AppData \ Local \ Programs \ Python \ Python35-32 \ Rot14.py」,第18行,主要內容爲 content = file.readlines() 文件「C:\ Users \ waldemar \ AppData \ Local \ Programs \ Python \ Python35-32 \ lib \ codecs.py「,第706行,在readlines中 return self.reader.readlines(sizehint) 文件」C:\ Users \ waldemar \ AppData \ Local \ Programs \ Python \ Python35-32 \ lib \ codecs.py「,第615行,在readlines中 data = self.read() 文件「C:\ Users \ waldemar \ AppData \ Local \ Programs \ Python \ Python35-32 \ lib \ codecs.py」,第501行,在讀 newchars,decodedbytes = self.decode(data,self.errors) UnicodeDecodeError:'utf-8'編解碼器無法解碼位置28中的字節0xea:無效延續字節 如何修復錯誤

+3

你可以在文章中包含你的代碼作爲文本(只需要縮進它的另外4個字符,這樣格式化程序使它成爲一個不錯的塊),而不是將它鏈接爲圖像。 –

+2

在您的問題中包含代碼。 – zondo

+1

你確定你的源文件是utf-8編碼,而不是拉丁文或其他? – antikantian

回答

0

輸入文件不是UTF-8,或者您不會在content = file.readlines()上收到錯誤。

如果正確保存輸入文件爲UTF-8,那麼另一個錯誤是需要編寫以及在UTF-8的輸出文件:

output = open(file_output,mode = 'w', encoding='utf8') 

然後輸出文件包含:

Od godziny zerowej mam wachtę na Morzu Lewantyńskim. 

需要注意的另一件事是Python 3不需要codecs.open。輸出文件,例如,只使用Python 3內置的open

+0

是的你是對的。我的老師告訴我必須使用codes.open。我仍然有錯誤。程序仍然不起作用。 –

+0

我的問題有什麼不好。 –