在我最后一个问题没有得到好评之后,我决定考虑该问题的所有答案(对吧?)。困扰我的是定义/调用一个简单的函数。
我理解主要想法,并且可以在小(简单)规模上完成。例如:
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
答案 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 我们自己。