gpt4 book ai didi

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

转载 作者:行者123 更新时间:2023-11-28 18:01:14 25 4
gpt4 key购买 nike

我尝试使用适用于 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/

25 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com