'NoneType' 对象不可迭代 - 错误在哪里?
'NoneType' object is not iterable - where is an error?
我的目标是取一个三元组 (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.
问题是您没有调用函数 nbhs_1、nbhs_2 和 nbhs_3,而且函数没有返回任何值
from math import sqrt
A=1*sqrt(6)
B=4*sqrt(3)
C=9*sqrt(2)
triple = (A, B, C)
def nbhs_1(triple):
X=triple[0]
Y=triple[1]
Z=triple[2]
return (X.canonicalize_radical(),(X*Y-Z).canonicalize_radical(),Y.canonicalize_radical())
def nbhs_2(triple):
X=triple[0]
Y=triple[1]
Z=triple[2]
return (Y.canonicalize_radical(),(Y*Z-X).canonicalize_radical(),Z.canonicalize_radical())
def nbhs_3(triple):
X=triple[0]
Y=triple[1]
Z=triple[2]
return (X.canonicalize_radical(),Z.canonicalize_radical(),(X*Z-Y).canonicalize_radical())
l=[max(nbhs_1(triple)),max(nbhs_2(triple)),max(nbhs_3(triple))]
主要问题是您没有正确构建函数:
- 建议您在函数调用中公开参数。不要
def nbhs_1(triple)
,而是def nbhs_1(X, Y, Z)
。通过这种方式,您实际上可以拥有一个功能来满足您的需求(更易于维护)
- Return 你的结果。目前您正在打印函数调用的结果,但没有返回这些结果。
- 我也不确定
canonicalize_radical()
调用是否也正确完成。 Python 是面向对象的,通过编写 var.canonicalize_radical()
你可以推断出 var
本身应该知道这个函数(例如,这个函数是 var 的一部分),但这听起来是错误的。正确的调用可能是canonicalize_radical(var)
基本上,这应该更接近正确的解决方案:
A=1*sqrt(6)
B=4*sqrt(3)
C=9*sqrt(2)
def nbhs(X, Y, Z):
out1 = canonicalize_radical(X)
out2 = canonicalize_radical(X*Y-Z)
out3 = canonicalize_radical(Y)
return out1, out2, out3
l = [max(nbhs(A, B, C)), max(nbhs(B, A, C)), max(nbhs(C, B, A))]
我的目标是取一个三元组 (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.
问题是您没有调用函数 nbhs_1、nbhs_2 和 nbhs_3,而且函数没有返回任何值
from math import sqrt
A=1*sqrt(6)
B=4*sqrt(3)
C=9*sqrt(2)
triple = (A, B, C)
def nbhs_1(triple):
X=triple[0]
Y=triple[1]
Z=triple[2]
return (X.canonicalize_radical(),(X*Y-Z).canonicalize_radical(),Y.canonicalize_radical())
def nbhs_2(triple):
X=triple[0]
Y=triple[1]
Z=triple[2]
return (Y.canonicalize_radical(),(Y*Z-X).canonicalize_radical(),Z.canonicalize_radical())
def nbhs_3(triple):
X=triple[0]
Y=triple[1]
Z=triple[2]
return (X.canonicalize_radical(),Z.canonicalize_radical(),(X*Z-Y).canonicalize_radical())
l=[max(nbhs_1(triple)),max(nbhs_2(triple)),max(nbhs_3(triple))]
主要问题是您没有正确构建函数:
- 建议您在函数调用中公开参数。不要
def nbhs_1(triple)
,而是def nbhs_1(X, Y, Z)
。通过这种方式,您实际上可以拥有一个功能来满足您的需求(更易于维护) - Return 你的结果。目前您正在打印函数调用的结果,但没有返回这些结果。
- 我也不确定
canonicalize_radical()
调用是否也正确完成。 Python 是面向对象的,通过编写var.canonicalize_radical()
你可以推断出var
本身应该知道这个函数(例如,这个函数是 var 的一部分),但这听起来是错误的。正确的调用可能是canonicalize_radical(var)
基本上,这应该更接近正确的解决方案:
A=1*sqrt(6)
B=4*sqrt(3)
C=9*sqrt(2)
def nbhs(X, Y, Z):
out1 = canonicalize_radical(X)
out2 = canonicalize_radical(X*Y-Z)
out3 = canonicalize_radical(Y)
return out1, out2, out3
l = [max(nbhs(A, B, C)), max(nbhs(B, A, C)), max(nbhs(C, B, A))]