我该如何定义这些功能?

时间:2014-10-22 01:37:38

标签: python encryption function

在我最后一个问题没有得到好评之后,我决定考虑该问题的所有答案(对吧?)。困扰我的是定义/调用一个简单的函数。

我理解主要想法,并且可以在小(简单)规模上完成。例如:

def multiply(x, y):
     return x*y

numb1 = 2
numb2 = 3

print(multiply(numb1, numb2))

简单。现在我要做的是通过定义函数来清理我的Vigenere密码,让我感到困惑的是使用什么参数以及为什么。我不想改变(可能编写得不好,不要嘲笑)代码,但我只想看看使用定义函数后的样子。

message = input("Enter a message to encrypt:\n").upper().replace(" ", "")
print("Enter your encryption key ("+str(len(message)),"or less letters.): ")
key = input().upper().replace(" ", "") 
div_times = int(int(len(message))/int(len(key)))
remainder = int(len(message))%int(len(key))
key_ring = (((key)*(div_times+1))[:-(len(key)-remainder)])
alph = 26 

print("-------\n"
      "Message:  ",message,"\n"
      "Key:      ",key_ring,
      "\n-------")
mvalues = [0]*len(message)
kvalues = [0]*len(key_ring)
m_position = 0
k_position = 0

for letter in message:
    mvalues[m_position] = ord(letter)
    m_position += 1

for key in key_ring:
    num = alph - (int(ord("Z")) - int(ord(key)))
    kvalues[k_position] = num - 1
    k_position += 1

m_position = 0
k_position = 0
print("\nEncrypted message: ", end="")
for character in message:
    newletter_v = (mvalues[m_position] + kvalues[k_position])
    if newletter_v > ord("Z"):
        newletter_v -= 26
    elif newletter_v < ord("A"):
        newletter_v += 26
    print(chr(newletter_v)+"", end="")
    m_position += 1
    k_position += 1

我尝试过各种各样的事情,但我一直收到错误或输出错误:

def encryptMessage(message, key):
    mvalues = [0]*len(message)
    kvalues = [0]*len(key_ring)
    m_position = 0
    k_position = 0
    for letter in message:
        mvalues[m_position] = ord(letter)
        m_position += 1

    for key in key_ring:
        num = alph - (int(ord("Z")) - int(ord(key)))
        kvalues[k_position] = num - 1
        k_position += 1


message = input("Enter a message to encrypt:\n").upper().replace(" ", "")
print("Enter your encryption key ("+str(len(message)),"or less letters.): ")
key = input().upper().replace(" ", "") 
div_times = int(int(len(message))/int(len(key)))
remainder = int(len(message))%int(len(key))
key_ring = (((key)*(div_times+1))[:-(len(key)-remainder)])
alph = 26 

print("-------\n"
      "Message:  ",message,"\n"
      "Key:      ",key_ring,
      "\n-------")
mvalues = [0]*len(message)
kvalues = [0]*len(key_ring)
m_position = 0
k_position = 0

encryptMessage(message, key)

m_position = 0
k_position = 0
print("\nEncrypted message: ", end="")
for character in message:
    newletter_v = (mvalues[m_position] + kvalues[k_position])
    if newletter_v > ord("Z"):
        newletter_v -= 26
    elif newletter_v < ord("A"):
        newletter_v += 26
    print(chr(newletter_v)+"", end="")
    m_position += 1
    k_position += 1

1 个答案:

答案 0 :(得分:0)

我能给出的最好建议是始终根据输入输出来考虑功能。

参数是输入,函数返回的是输出。在你的密码的情况下,考虑什么可以变化(并且需要提供而不是总是相同的东西) - 这些是输入:

  • 要加密的邮件
  • 加密密钥

您可以为函数编写声明,然后填写正文:

def encrypt(message, encryptionKey):
    """encrypts message using vignere cipher"""
    # TO DO in here perform encryption to produce 
    # the return variable encryptedMessage...
    return encryptedMessage

定义函数时,总是尝试在程序中使用可能多次使用的东西并将其封装起来。通过创建函数encrypt,您可以重复执行该操作,但只编写一次代码。这是DRY原则 - 代表 D on R epeat Y 我们自己。