python - 如何修复 Python 处理模式中的错误计算?

标签 python processing jython

我尝试使用适用于 MAC OS X 的 Python 处理模式实现 Pascal 三角形的可视化图示。其中一个必要步骤当然是计算三角形每一行中的二项式系数。我选择以递归方式而不是计算阶乘。我的代码在 Jupyter 中运行良好,但在 Processing 中产生不同的结果。有谁知道为什么以及如何解决这个问题?

rows = 301

pascal=[[1], [1,1]]
for i in range (rows):
    last_row = pascal[len(pascal)-1]
    next_row = [1] +[last_row[i]+last_row[i+1] for i in range(len(last_row)) if i < len(last_row)-1] +[1]
    pascal.append(next_row)

print (pascal[35][16])

代码在 Jupyter 中执行时产生正确的结果,但在 Processing 中产生不同的结果。问题从三角形的第 35 行开始(countig 从 0 开始)。此行中的第 16 个元素应为 4059928950,但 Processing 计算出 -235038346。从那以后,Processing 中的计算似乎经常出错。

最佳答案

最有原则的方法是找到一个可以从 Jython 调用的大整数库,但是由于您所需要的只是加法,因此很容易编写自己的函数,该函数将采用两个以 10 为底的正整数字符串表示形式,返回它们总和的字符串表示形式:

rows = 301

def add_nums(s1,s2):
    #reverse strings and 0-pad to be of the same length
    s1 = s1[::-1]
    s2 = s2[::-1]
    s1 += '0'*(max(len(s1),len(s2)) - len(s1))
    s2 += '0'*(max(len(s1),len(s2)) - len(s2))
    dsum = []
    c = 0 #carry
    for d1,d2 in zip(s1,s2):
        a,b = int(d1), int(d2)
        c,r = divmod(a+b+c,10) 
        dsum.append(str(r))
    if c > 0: dsum.append('1')
    return ''.join(reversed(dsum))

pascal=[['1'], ['1','1']]
for i in range (rows):
    last_row = pascal[len(pascal)-1]
    next_row = ['1'] +[add_nums(last_row[i],last_row[i+1]) for i in range(len(last_row)) if i < len(last_row)-1] +['1']
    pascal.append(next_row)

print (pascal[35][16]) #prints 4059928950

关于python - 如何修复 Python 处理模式中的错误计算?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/55628590/

相关文章:

python - 从 json 创建数据框时如何不推断架构?

compiler-errors - 如何从 arrayList 中的不同对象调用方法?

来自 float.h 的 DBL_MIN_10_EXP、FLT_RADIX 和其他 Java 等价物

python - 如何让 PyDev 编辑器选择性地忽略错误?

java - Jython 中的随机性

python - 在python列表中将数字转换为成绩

python - 如何远程控制 Bugzilla(首选 Python)

python - 将 dtype ='<U77' 类型的对象转换为 numpy 数组

java - 如果我在Processing的设置方法中绘制 map 并完全停止draw()运行,那么我的 map 不应该至少绘制一次吗?

Android - View.OnLayoutChangeListener 和 ViewTreeObserver.OnGlobalLayoutListener 的区别