代码之家  ›  专栏  ›  技术社区  ›  McMo

检查类中的函数是否为True

  •  0
  • McMo  · 技术社区  · 8 年前

    (使用eclipse Oxygen的64位Windows 7上的Python 3.6.3)

    我试图返回返回True的函数的值。输入相关参数a、v、s、j,并根据结果发生特定情况。我尝试过使用callable,但由于它们都是可调用的,所以不起作用。使用 字典 .items()也不起作用。

    也许在某种程度上,可以使用for循环尝试遍历类以查找True并中断循环。不幸的是,我无法设置这样的for循环。我很感激你的帮助。

    class cases(object):
    
        def __init__(self, a, v, s, j):
            self.a = a
            self.v = v
            self.s = s
            self.j = j
    
        def case_one(self, a, v, s, j):
            tj = pow((s/(2*j)),1/3)
            a_max = tj * j
            v_max = j*(tj**2)
            if a >= a_max and v >= v_max:
                x = True
            else:
                x = False        
            return x, tj, a_max, v_max
        pass     
    
        def case_two(self, a, v, s, j):    
            tj = pow(v/j, 1/2)
            tv = (s/(j*tj**2)-2*tj)
            a_max = tj * j
            if a >= a_max and tv > 0:
                x = True
            else:
                x = False
            return x, tv, tj, a_max  
        pass   
    
        def case_three(self, a, v, s, j):
            ta = (a/j)*(-3/2+pow((1/4)+(s*j**2/pow(a,3)),1/2))
            tj = a/j
            v_max = j*tj*(ta+tj)
            if v >= v_max and ta > 0:
                x = True
            else:
                x = False
            return x, ta, tj, v_max  
        pass        
    
        def case_four(self, a, v, s, j):
            tj = a/j
            ta = (v/a)-(a/j)
            tv = (s/v)-(v/a)-(a/j)
            if tv > 0 and ta > 0:
                x = True
            else:
                x = False
            return x, tj, ta, tv
        pass
    
        def __call__(self):
            self.case_one()
            self.case_two()
            self.case_three()
            self.case_four()
    
    
    case = cases.case_four(1,14.5,7,0.25,120)
    print(case)
    

    附笔。: 显然,我没有完全理解“self”在类中是如何工作的,因为我必须输入“1”作为第一个参数才能得到任何结果。否则,我会收到一条错误消息:“TypeError:case_four()缺少1个必需的位置参数:“j”,但j等于120。

    1 回复  |  直到 8 年前
        1
  •  1
  •   Jeronimo    8 年前
    1. 制作一个类的实例(并将类重命名为大写)。

    =>

    cases = Cases(14.5,7,0.25,120)
    
    1. 从方法中删除参数- self 自从你把它们放在里面以后就已经有了 __init__ :

    =>

     def case_one(self):
            a,v,s,j = self.a, self.v, self.s, self.j   # aliases
            tj = pow((s/(2*j)),1/3)
            a_max = tj * j
            v_max = j*(tj**2)
            x = (a >= a_max and v >= v_max)
            return x, tj, a_max, v_max
    
    1. 要循环使用这些方法来获得reurn值,请执行以下操作。注意,实例 cases 使用,而不是类 Cases :

    =>

    for method in [cases.case_one, cases.case_two, cases.case_three, cases.case_four]:
        ret = method()
        if ret[0]:
            print(method.__name__)
            break
    else:
        print("no result was True")
    
    1. 并移除 pass 在每种方法的末尾。。。
    推荐文章