2012-05-26 80 views
1

這裏是我的代碼:爲什麼我得到我的密碼函數(python)的錯誤?

def encode(pattern, filename): 
    pattern = ['a','e','s','3'] 
    message = open(filename, 'r+') 
    for letter in message: 
     if letter == pattern[0]: 
     letter == pattern[1] 

     elif letter == pattern[1]: 
     letter == pattern[0] 

     elif letter == pattern[2]: 
     letter == pattern[3] 

     else: 
     continue 

    message.close() 

可能是代碼的一些瑕疵因爲我只在蟒蛇一個業餘愛好者,但是當我運行的功能,該文件保持不變。我究竟做錯了什麼?

回答

2

===之間有區別。 ==用於測試兩個對象或基元是否相同,=用於將值分配給對象或基元。

嘗試做了這些改變:

for letter in message: 
     if letter == pattern[0]: 
     letter = pattern[1] ## <-- change 
     elif letter == pattern[1]: 
     letter = pattern[0] ## <-- change 
     elif letter == pattern[2]: 
     letter = pattern[3] ## <-- change 
     else: 
     continue 

但這只是分配一個值letter將通過循環來改變下一個迭代,你真正想做的事就是寫一些其他的文件,或寫回到message(但是由於您正在閱讀,這可能會很危險)。

+0

+1。 'letter'也可能包含換行符和/或回車符。 – bernie

+0

我嘗試過,結果雖然相同。我認爲下面的海報可能是對的東西,寫功能需要使用,雖然不知道如何.. – user1390754

+0

@ user1390754請注意我的帖子的最後一段,我說'你真正想做的是寫給其他人文件' –

2

I.除非我誤解了,即使使用r+模式,您實際上也沒有編輯該文件,通過將作業分配到letter。您仍然需要使用write實際更改文件。

二,您可能對以下產品感興趣string.translate

In [112]: t = string.maketrans('abc', 'bad') 

In [115]: s = 'abcdef' 

In [116]: s.translate(t) 
Out[116]: 'baddef' 
+0

如果你真的想高效就地編輯,那麼mmap是一個很好的解決方案... –

相關問題