我的目标是取三个(A, B, C)
,计算三个“邻居”,然后将每个邻居的最大值输出到一个列表中
例如,(sqrt(6), 4*sqrt(3), 9*sqrt(2))
的邻居是
(sqrt(3)*sqrt(2), 3*sqrt(2), 4*sqrt(3))
(4*sqrt(3), 35*sqrt(3)*sqrt(2), 9*sqrt(2))
(sqrt(3)*sqrt(2), 9*sqrt(2), 14*sqrt(3))
因此值14*sqrt(3), 36*sqrt(6), 4*sqrt(3)
将是输出
当我尝试这个:
A = 1*sqrt(6)
B = 4*sqrt(3)
C = 9*sqrt(2)
def nbhs_1(triple):
X = triple[0]
Y = triple[1]
Z = triple[2]
print((X.canonicalize_radical(), (X * Y - Z).canonicalize_radical(), Y.canonicalize_radical()))
def nbhs_2(triple):
X = triple[0]
Y = triple[1]
Z = triple[2]
print((Y.canonicalize_radical(), (Y * Z - X).canonicalize_radical(), Z.canonicalize_radical()))
def nbhs_3(triple):
X = triple[0]
Y = triple[1]
Z = triple[2]
print((X.canonicalize_radical(), Z.canonicalize_radical(), (X * Z - Y).canonicalize_radical()))
result_1 = nbhs_1((A, B, C))
result_2 = nbhs_2((A, B, C))
result_3 = nbhs_3((A, B, C))
print(result_1)
print(result_2)
print(result_3)
l = [max(result_1), max(result_2), max(result_3)]
我得到'NoneType' object is not iterable.
主要问题是您没有正确构建函数:
def nbhs_1(triple)
,改为def nbhs_1(X, Y, Z)
。通过这种方式,您实际上可以有一个单独的函数来实现您想要的功能(更易于维护)canonicalize_radical()
调用是否正确完成。Python是面向对象的,通过编写var.canonicalize_radical()
可以推断var
本身应该知道这个函数(例如,该函数是var的一部分),但这听起来是错误的。正确的调用可能是canonicalize_radical(var)
基本上,这应该更接近正确的解决方案:
问题是您没有调用函数nbhs_1、nbhs_2和nbhs_3,而且这些函数也没有返回任何值
相关问题 更多 >
编程相关推荐