Vio*_*let 3 python coding-style
我在我的节目一个可笑的代码段现在:
str(len(str(len(var_text)**255)))
Run Code Online (Sandbox Code Playgroud)
有没有简单的方法来缩短它?因为,坦率地说,这太荒谬了.
转换一个数> 500位到科学记数法一个选项也将是有益的(这就是我想要做的)
完整代码:
print("Useless code rating:" , str(len(var_text)**255)[1] + "e" + str(len(str(len(var_text)**255))))
Run Code Online (Sandbox Code Playgroud)
TL; DR:y = 2.408 * len(var_text)
让我们假设您的密钥是一个字符串,有256个字符可用(0-255).然后正如16位数字保持65536个数字(2**16)一样,相等长度的字符串的排列将是
n_perms = 256**len(passkey)
Run Code Online (Sandbox Code Playgroud)
如果你想要n_perms中的(十进制)数字,请考虑对数:
>>> from math import log10
>>> log10(1000)
3.0
>>> log10(9999)
3.9999565683801923
>>>
Run Code Online (Sandbox Code Playgroud)
所以我们有length = floor(log10(n_perms)) + 1.在python中,int无论如何都会向下舍入,所以我想说你想要的
n_perms = 256**len(var_text)
length = int(log10(n_perms)) + 1
Run Code Online (Sandbox Code Playgroud)
我认为"缩短"丑陋的代码并不总是最好的方式 - 你希望它能清楚你正在做什么.
编辑:进一步考虑我意识到选择base-10来找到你的排列的长度无论如何都是任意的 - 所以为什么不选择base-256!
length = log256(256**len(var_text)
length = len(var_text) # the log and exp cancel!
Run Code Online (Sandbox Code Playgroud)
你实际上只是在不同的基础上找到密码的长度......
编辑2:退后一步,我要尝试数学!
if x = len(var_text), we want y such that
y = log10(256**x)
10**y = 256**x
10**y = (10**log10(256))**x
10**y = (10**(log10(256)x))
y = log10(256) * x
Run Code Online (Sandbox Code Playgroud)
那么,这是怎么回事:
length = log10(256) * len(var_text) # or about (2.408 * x)
Run Code Online (Sandbox Code Playgroud)