【问题标题】:why am i getting an error for my cipher function (python)?为什么我的密码函数(python)出现错误?
【发布时间】:2012-05-26 05:26:39
【问题描述】:

这是我的代码:

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()  

代码中可能存在一些缺陷,因为我只是 python 的业余爱好者,但是当我运行该函数时,文件保持不变。我做错了什么?

【问题讨论】:

    标签: python design-patterns encode encryption


    【解决方案1】:

    === 之间存在差异。 == 用于测试两个对象或原语是否相同,= 用于为对象或原语赋值。

    尝试进行这些更改:

    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(但这可能很危险因为你正在阅读它)。

    【讨论】:

    • +1。 letter 也可能包含换行和/或回车。
    • 我试过了,结果一样。我认为下面的海报可能有点意思,需要使用写入功能,虽然不确定如何..
    • @user1390754 请注意我帖子的最后一段,我说“你真正想做的是写入其他文件”
    【解决方案2】:

    我。除非我弄错了,否则即使使用r+ 模式,您实际上并没有通过分配letter 来编辑文件。您仍然需要使用write 来实际更改文件。

    二。你可能对string.translate感兴趣:

    In [112]: t = string.maketrans('abc', 'bad')
    
    In [115]: s = 'abcdef'
    
    In [116]: s.translate(t)
    Out[116]: 'baddef'
    

    【讨论】:

    • 如果你真的想要高效的就地编辑,那么 mmap 是一个很好的解决方案...
    猜你喜欢
    • 1970-01-01
    • 2014-08-03
    • 1970-01-01
    • 2019-06-23
    • 1970-01-01
    • 2019-10-28
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    相关资源
    最近更新 更多