【问题标题】:How do I make this class accept list/tuple of ints as arguments?如何让这个类接受整数列表/元组作为参数?
【发布时间】:2020-09-22 15:59:07
【问题描述】:

我尝试将我从输入(即 (x,y,z) 作为整数)获得的变量成功转换为元组和列表,但我似乎无法让 Polynomial() 与它们一起使用。

from tkinter import *

class Polynomial:

    def __init__(self, *coefficients):
        self.coefficients = list(coefficients)

    def __repr__(self):

        return "Polynomial" + str(self.coefficients)

    def __call__(self, x):
        res = 0
        for index, coeff in enumerate(self.coefficients[::-1]):
            res += coeff * x ** index
        return res


def calculateIt():
    mathCoef = E1.get()
    botch = mathCoef
    mytuple = tuple(map(int, botch.split(',')))

    p = Polynomial(mytuple)

    for x in range(-3, 3):
       print(x, p(x))
    L1.configure(text=p)
    print(mathCoef)

window = Tk()
window.title("XImath Client 1.0")
window.configure(bg="black")
window.geometry("500x500")

L1 = Label(window, text="Input")
L1.pack()
E1 = Entry(window, bd=5)
E1.pack()

B1 = Button(window, text="go", command=calculateIt)
B1.pack()

window.mainloop()

问题是我希望class(Polynomial)mathCoef 中用户输入给出的变量一起工作,这最初是一个字符串。我尝试成功地变成一个元组,但class(Polynomial) 期望使用这种语法的整数 - (1, 2, 3)。假设用户输入 1,2,3 - 元组看起来完全像这样 - (1, 2, 3),但是当我尝试将它传递给 Polynomial(mytuple) 时,它返回:

TypeError: unsupported operand type(s) for +=: 'int' and 'tuple'

如何将元组转换为用逗号分隔的整数?

【问题讨论】:

  • 您能澄清一下该代码的哪些问题吗?理想情况下,人们不必单击 GUI 来查找?请参阅minimal reproducible example 页面如何最好地帮助我们。
  • 我认为您可能需要提供更多描述。你还没有说问题是什么,或者你的预期输出是什么。
  • 我修改了帖子,希望我至少澄清了一点。
  • 你为什么要创建一个元组,解包元组,然后在类中再次包装值,最后从它们创建一个列表,而这个类可以只获取元组并按原样使用它?

标签: python tkinter python-3.7 polynomials


【解决方案1】:

试试下面的代码。

我相信您可能缺少的是 p = Polynomial(*coeffs) 行中的 *,它告诉 python 将列表解压缩为传递给类的构造函数的参数。

我还在将多项式添加到标签的行中添加了repr(p),这将显示该多项式的 repr 字符串。

from tkinter import *

class Polynomial:

    def __init__(self, *coefficients):
        self.coefficients = list(coefficients)

    def __repr__(self):

        return "Polynomial" + str(self.coefficients)

    def __call__(self, x):
        res = 0
        for index, coeff in enumerate(self.coefficients[::-1]):
            res += coeff * x ** index
        return res


def calculateIt():
    mathCoef = E1.get()
    coeffs = map(int, mathCoef.split(' '))

    p = Polynomial(*coeffs)

    for x in range(-3, 3):
       print(x, p(x))
    L1.configure(text=repr(p))
    print(mathCoef)

window = Tk()
window.title("XImath Client 1.0")
window.configure(bg="black")
window.geometry("500x500")

L1 = Label(window, text="Input")
L1.pack()
E1 = Entry(window, bd=5)
E1.pack()

B1 = Button(window, text="go", command=calculateIt)
B1.pack()

window.mainloop()

【讨论】:

    猜你喜欢
    • 1970-01-01
    • 2021-10-29
    • 2020-07-20
    • 1970-01-01
    • 2015-09-17
    • 1970-01-01
    • 2012-05-28
    • 2012-10-22
    相关资源
    最近更新 更多