我尝试将一个大字符串F划分为m个块,如下所示:
import random
from largeprimes import generateRandom
def generateRandom(length):
t = random.randint(0, 2**length)
str = "{0:b}".format(t)
if (len(str) < length):
str.zfill(length)
return str
def divide_file_block (): #return bi: int
b = []
for i in range (0, m):
b_i = F[(i*blocklen) : ((i+1)* blocklen)]
temp = int(b_i, 2) % q
b.append(temp)
return b
F = generateRandom(102400)
m = 100
blocklen = len(F)/m
q = generateLargePrime(1024) # generateLargePrime is from https://langui.sh/2009/03/07/generating-very-large-primes/
print divide_file_block ()
注意:您应该将代码从1复制到当前目录,删除最后一条print
语句并将其命名为largpeprimes.py
。这使得generateLargePrime
函数是可导入的。在
当我用一个小例子测试时,它打印出了正确的结果。但当我在1024位的b峎I和q上测试时,它会输出错误:
^{pr2}$你能解释一下原因并给我一个建议来说明这个问题吗。提前谢谢。在
函数
generateLargePrime
有时返回字符串尝试代码我遇到了同样的问题。在
在调试器中测试时,我得到了原因:
q
的值为“1100.0次尝试后失败”这绝对是一个导致失败的字符串。在
我建议修改
generateLargePrime
代码以引发异常,而不是通过返回值报告失败。在检测此类问题的一些技巧
打印出有问题的值
这是最简单(可能也是最流行的)快速解决方案。在
有点像
会告诉你价值
将
^{pr2}$assert
放入代码中将在
q
不是int
类型时立即引发异常在调试器中运行代码
pdb
是Python附带的,我更喜欢IPython附带的ipdb
,两者都会对您有所帮助。在尝试通过Python解释器运行它
$python失败脚本.py
当它失败时,您只需再试一次,但是不要使用}
python
,而是使用pdb
或{美元ipdb失败脚本.py
调试器允许您逐行控制代码的运行。通常我让它通过“c”(继续)命令运行,它很快就会在有问题的地方崩溃。然后我使用“l”(list)查看我们在哪一行代码,最后使用“p”(print)命令打印变量的值,这些变量会产生问题。这样我用“pq”发现,它是一个字符串。
学习
pdb
或ipdb
需要一点时间,但它作为turbo解析器工作,因此它绝对是一项需要学习的技能。很棒的教程在PMotW相关问题 更多 >
编程相关推荐