如何阅读多种形式的功能属性?

问题描述 投票:0回答:2

我需要加载我的多项式函数的属性,但它以不同的形式加载。

在作业中,我有3个表单值,我不知道如何阅读所有表单值。其中一个作为list()输入,下一个作为元素输入,最后一个作为多项式的多个度数输入(这对我来说是最大的问题)。

p1 = Polynomial([1,-3,0,2])
p2 = Polynomial(1,-3,0,2)
p3 = Polynomial(x0=1,x3=2,x1=-3)
>>> print(*p*)
2x^3 - 3x + 1

我已经尝试过类似的东西:

class Polynomial(object):
    def __init__(self,*X):
        self.x = X
    def __str__(self):
        index = 0
        while True:
            element = element+self.x[index]+"x^"+index

但那不是第三种情况,也不适用于第一种和第二种情况。

python polynomials
2个回答
0
投票

运用

def __init__(self, *args, **kwargs):
    self.args = args
    self.kwargs = kwargs

在第一种情况下,args将包含[[1,-3,0,2]](所以你想操纵args[0]

在第二种情况下,args将包含[1,-3,0,2]

在最后一种情况下,kwargs将包含{ x0: 1, x3: 2, x1: -3 }

在最后一种情况下,要将kwargs翻译成你想要的列表(IE [1,-3,0,2]),你可以做

[kwargs.get("x0", 0), kwargs.get("x1", 0), kwargs.get("x2", 0), kwargs.get("x3", 0)]

这将为您提供右键所需的kwargs值列表,如果未找到则为0。 (更好的方式:[kwargs.get(x, 0) for x in ["x0","x1","x2","x3"]]


0
投票

为了按照指定的方式定义类构造函数,您需要它能够在给定args时在列表和多个元素之间进行排序,或者在给出** kwargs时对多个关键字参数进行排序。

假设用户没有搞砸输入,这将是一个工作示例:

class Polynomial:
    """
    Assuming max. degree is always 3
    """
    def __init__(self, *args, **kwargs):
        if args:
            if len(args) == 1:  # here user gave a list
                self.x0 = args[0][0]
                self.x1 = args[0][1]
                self.x2 = args[0][2]
                self.x3 = args[0][3]
            elif len(args) == 4:  # here we have the four coefficients
                self.x0 = args[0]
                self.x1 = args[1]
                self.x2 = args[2]
                self.x3 = args[3]
        elif kwargs: # if args are not present, we check if keywords arguments are
            self.x0 = kwargs['x0']
            self.x1 = kwargs['x1']
            self.x2 = kwargs['x2']
            self.x3 = kwargs['x3']

这是一个关于参数处理的教程:https://pythontips.com/2013/08/04/args-and-kwargs-in-python-explained/

现在您可以对其进行修改,以便考虑多个度,缺少关键字,输入错误等...有时,输入检查和清理可能足够复杂,因此需要完整的其他方法定义。

© www.soinside.com 2019 - 2024. All rights reserved.