“NoneType”对象不可iterable哪里有错误?

2024-06-16 11:40:38 发布

您现在位置:Python中文网/ 问答频道 /正文

我的目标是取三个(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.


Tags: 目标列表objectisdefnotsqrtresult
2条回答

主要问题是您没有正确构建函数:

  1. 建议在函数调用中公开参数。不要def nbhs_1(triple),改为def nbhs_1(X, Y, Z)。通过这种方式,您实际上可以有一个单独的函数来实现您想要的功能(更易于维护)
  2. 返回您的结果。此时,您正在打印函数调用的结果,但没有返回这些结果
  3. 我也不确定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))]

问题是您没有调用函数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))]

相关问题 更多 >