0
class main:
    def __init__(self, num1, num2, operator):
        self.num1 = float(num1)
        self.operator = operator
        self.num2 = float(num2)

    def mainfunc(self, operator, num1, num2):
        while True:
            if operator == "+":
                return num1+num2
            elif operator == "-":
                return num1-num2
            elif operator == "/":
                return num1/num2
            elif operator == "x" or "*":
                print(int(num1)*int(num2))
                break

p1 = main()
main.mainfunc(num1=input("Choose a number: "),
              num2=input("Choose another number: "),
              operator=input("Choose an operation: "))

我收到此错误 TypeError: main. init () 缺少 3 个必需的位置参数:'num1'、'num2' 和 'operator'

4

3 回答 3

1

主类有一个带有 3 个参数的构造函数init,没有任何默认值。您可以使用相同的代码,但只需为构造函数参数提供默认值,它会像一个魅力一样工作。

def __init__(self, num1=0.0, num2=0.0, operator=None):
    self.num1 = num1
    self.operator = operator
    self.num2 = num2

在调用 mainfun 方法时,您没有使用对象 p1。

p1 = main()
p1.mainfunc(num1=input("Choose a number: "),
          num2=input("Choose another number: "),
          operator=input("Choose an operation: "))
于 2021-10-30T12:01:31.823 回答
1

欢迎来到精彩的编程世界!

很少有人批评您的代码:

  • p1 = main()尝试初始化 的实例main,该__init__函数接受 3 个参数。您必须选择,要么定义无参数构造函数def __init__(self):,要么像 Ghost Ops 在评论中指出的那样为 init 函数提供参数。
  • 您永远不会使用main(ie self.num1, self.operatorand self.num2) 的属性。只是失去了记忆。
  • 中不必要while Truemainfunc。要么operator不是“操作符”字符之一(+-/x*),导致无限循环,要么operator是该字符之一,并且只完成了一次迭代。
  • 为什么你返回结果为+,却为-and打印它?选择一个,并坚持下去。/x*
  • 正如 Thierry Lathuille 所指出的,这mainfunc应该是一个简单的函数,并且您的类main应该有类似compute方法的东西,它利用类属性并返回结果。
  • 最后,main顺便说一句,这不是一个很好的名字,像这样的名字Calculator应该更合适。

如果您了解所有这些要点,您将能够轻松地纠正您的程序。
祝你学习愉快;)

于 2021-10-30T11:53:15.447 回答
-1
p1 = main(num1=input("Choose a number: "), 
          num2=input("Choose another number: "),
          operator=input("Choose an operation: ")
     )

您需要在创建对象时定义这些值

于 2021-10-30T11:52:39.823 回答