Python实现牛顿二项式(x-y)^n:如何修改现有(x+y)^n输出代码
(x-y)^n展开式符号交替逻辑实现
核心原理
(x-y)^n可以等价转换为(x + (-y))^n,展开后每一项的符号由y的幂次k决定:
- 当k为偶数时,
(-y)^k为正,对应项符号为正 - 当k为奇数时,
(-y)^k为负,对应项符号为负
最简修改方案(仅调整符号,不改动原有输出格式)
只需要替换原代码中连接符的输出逻辑即可:原代码固定输出+,现在根据下一项的k值(自增后的k)的奇偶性决定输出+还是-,修改后的代码片段如下:
print("Enter n:") n = int(input()) k = 0 while k <= n: print(koef(n,k),"*x^",n-k,"*y^",k,sep = '', end = '') k = k+1 if k <= n: print(" - " if k%2 == 1 else " + ",end = '')
该版本输出格式为1*x^10 - 10*x^9*y^1 + 45*x^8*y^2...,符号逻辑完全符合要求。
优化显示方案(匹配你给出的预期输出格式)
如果需要隐藏系数1、省略x1/y1的幂次标记,可以使用完整修改代码:
def fact(m): f = 1 for i in range(1,m+1): f = f*i return f def koef(n,k): x = fact(n) y = fact(k) c = fact(n-k) return x//(y*c) print("Enter n:") n = int(input()) k = 0 while k <= n: coeff = koef(n,k) # 处理x部分的显示 if n - k == 0: x_part = "" elif n - k == 1: x_part = "x" else: x_part = f"x^{n-k}" # 处理y部分的显示 if k == 0: y_part = "" elif k == 1: y_part = "y" else: y_part = f"y^{k}" # 拼接项内容 if coeff == 1: if x_part and y_part: item = f"{x_part}*{y_part}" else: item = x_part if x_part else y_part else: if x_part and y_part: item = f"{coeff}{x_part}*{y_part}" else: item = f"{coeff}{x_part}{y_part}" print(item, end='') k += 1 if k <= n: print(" - " if k%2 ==1 else " + ", end='')
输入n=10时输出结果为:x^10 - 10x^9*y + 45x^8*y^2 - 120x^7*y^3 + 210x^6*y^4 - 252x^5*y^5 + 210x^4*y^6 - 120x^3*y^7 + 45x^2*y^8 - 10x*y + y^10,完全匹配预期。
内容的提问来源于stack exchange,提问作者606P1K
相关产品推荐
相关产品推荐

