luk*_*uky 5 python arguments function
我的问题是如何处理我使用凯撒密码的代码片段.
函数Decrypt和Encrypt必须处理字母表的限制(A - Z和a - z).我试图在一个名为cycleencrypt的循环函数中为两个字母编写两个可能的循环.
但是该函数需要大约6个参数,而且我已经阅读了一个在一个函数中具有3个以上参数的可读性和可理解性较低的地方,所以我的问题是:
我应该通过拆分两个函数来减少参数的数量,并使代码片段更长(但可能更容易理解)?谢谢你的回答,我很感激.
编辑:删除了函数周围的文档,以使我的问题的主要目的可见.
def offsetctrl(offset):
while offset < 0:
offset += 26
return offset
def cycleencrypt(string, offset, index, listing, first, last):
offset = offsetctrl(offset)
if string >= ord(first) and string <= ord(last):
string += offset
while string > ord(last):
string = ord(first) + (string - ord(last) -1)
listing[index] = chr(string)
Run Code Online (Sandbox Code Playgroud)
循环加密有大量参数和负偏移控制
def encrypt(retezec, offset):
listing = list(retezec)
for index in range(0, len(retezec)):
string = ord(retezec[index])
cycleencrypt(string, offset, index, listing, 'A', 'Z')
cycleencrypt(string, offset, index, listing, 'a', 'z')
print(''.join(listing))
Run Code Online (Sandbox Code Playgroud)
主加密部分采用两行打印 多个参数
def decrypt(retezec, offset):
return encrypt(retezec, -offset)
if __name__ == "__main__":
encrypt("hey fellow how is it going", 5)
decrypt("mjd kjqqtb mtb nx ny ltnsl", 5)
Run Code Online (Sandbox Code Playgroud)
在这种情况下,将代码编写为类通常会更好.您的类的构造函数可以只使用所需的最少数量的参数(可能根本不需要!),然后可以将可选参数设置为类的属性或使用其他方法.
在设计这样的类时,我发现最先写入客户端代码是最有用的- 也就是说,编写将首先使用该类的代码,然后从那里开始设计该类.
例如,我可能希望代码看起来像这样:
cypher = Cypher()
cypher.offset = 17
cypher.set_alphabet('A', 'Z')
result = cypher.encrypt('hey fellow how is it going')
Run Code Online (Sandbox Code Playgroud)
希望应该清楚如何从这里开始工作到Cypher类的设计,但如果没有,请在Stack Overflow上提出一个问题!
如果您想提供encrypt和decrypt方便的方法,它仍然很容易做到.例如,您可以编写如下函数:
def encrypt(text, offset):
cypher = Cypher()
cypher.offset = offset
return cypher.encrypt(text)
Run Code Online (Sandbox Code Playgroud)