使用类的python基本数学程序

使用类的python基本数学程序,python,python-3.x,Python,Python 3.x,这是我的代码,它必须使用python中的类执行基本的数学运算 我收到一个错误:AttributeError:“问题”对象没有属性“操作数1” 你能帮我吗?这样这个程序就可以运行了!? 提供给我们的代码的一些信息: createNewProblem()随机选择一个操作(“+”、“-”、“*”、“/”),然后调用相应的私有方法生成问题的数字 四种“私有”方法(_加法()、_减法()、_乘法()、_除法())随机生成操作数1、操作数2的值和/或每种类型问题的答案。对于加法和乘法,操作数1和操作数2应为

这是我的代码,它必须使用python中的类执行基本的数学运算 我收到一个错误:AttributeError:“问题”对象没有属性“操作数1” 你能帮我吗?这样这个程序就可以运行了!? 提供给我们的代码的一些信息:

createNewProblem()随机选择一个操作(“+”、“-”、“*”、“/”),然后调用相应的私有方法生成问题的数字

四种“私有”方法(_加法()、_减法()、_乘法()、_除法())随机生成操作数1、操作数2的值和/或每种类型问题的答案。对于加法和乘法,操作数1和操作数2应为随机数字0-10(含)。对于减法,为保证整数答案,生成操作数2,答案为随机数字0-10(含0-10),然后将其相加以确定操作数1。类似地,向后求除法以保证整数的结果,但操作数2不能为零


构造函数(int)没有参数(当然,除了self)。它应该初始化实例变量来表示问题1+1=2。

缺少很多东西,缩进错误

要解决该特定错误(
AttributeError:“Problem”对象没有属性“operan1”
),您需要在类中创建属性:

类问题:
定义初始化(self,操作数1,运算,操作数2):
self.operans1=操作数1
自我操作
self.operans2=操作数2
要创建
问题
类的实例,请执行以下操作:

prob1=问题(12,'*',5)
您还需要使用
\uuuuu init\uuuu
而不是
\uu init\uu
,以及
\uuuu str\uuuu
而不是
\uu str

导入随机数据
班级问题:
def uuu init uuuu(self,操作数1=1,操作数='+',操作数2=1):
# ------------------------------------- #
#--防止无效参数--#
# ------------------------------------- #
如果操作不在[“+”、“-”、“*”、“/”]中:
raise VALUERROR(f“无效操作:{operation}”)
如果不是isinstance(操作数1,int):
raise VALUERROR(f“无效的操作数1:{operan1}。它应该是一个”
f“int.”)
如果不是isinstance(操作数2,int):
raise VALUERROR(f“无效的操作数2:{OPERMAN2}。它应该是一个”
f“int.”)
如果操作数=“/”且操作数2=0:
raise VALUERROR(f“无效问题:{self}。被零除为”
f“不允许。”)
# --------------------------------------------------- #
#--将参数复制为类的属性--#
# --------------------------------------------------- #
self.operans1=操作数1
自我操作
self.operans2=操作数2
# -------------------------- #
#--计算答案--#
# -------------------------- #
#因为我们已经检查了参数,这里的eval不应该提出
#错误。
self.answer=eval(“%s%s%s”%(操作数1,操作数2))
定义(自我):
返回f“{self.operate1}{self.operation}{self.operate2}=”\
f“{self.answer}”
def制造新问题(自我):
#呃。这没有道理。为什么我们需要这种方法?
#如果我想要一个随机的新问题,我会直接打电话
#制造问题()。
#如果我想创建一个特定的问题,我会使用构造函数
#这个班的学生。
#方法的名称应全部小写。看见
# https://www.python.org/dev/peps/pep-0008/#id47
返回make_rand_问题()
def make_rand_问题():
“制造随机问题”
此函数确保问题的答案为整数。
不会出现被零除的情况。
"""
问题列表=[
_做加法题(),
_做减法题(),
_生成乘法问题(),
_划分问题
]
返回随机选择(问题列表)
def_make_two_rand_int():
x=随机。随机范围(0,10)
y=random.randrange(0,10)
返回x,y
def_make_addition_problem():
x、 y=_make_two_rand_int()
返回问题(x,“+”,y)
定义生成乘法问题():
x、 y=_make_two_rand_int()
返回问题(x,“*”,y)
def_make_减法问题():
操作数2,答案=\u make\u two\u rand\u int()
操作数1=答案+操作数2
断言操作数1-操作数2==答案
p=问题(操作数1,“-”,操作数2)
断言p.answer==answer
返回p
def_make_division_problem():
操作数2=random.randrange(1,10)
答案=随机。随机范围(0,10)
操作数1=答案*操作数2
断言int(操作数1/2)=答案
p=问题(操作数1,“/”,操作数2)
#断言问题的答案与
#我们期待的答案。
断言p.answer==answer
返回p
def main():
p1=问题()
打印(p1)
#不需要为非“私有”属性生成getter
打印('操作数1:',p1.操作数1)
打印('操作数2:',p1.操作数2)
打印('答案:',p1.答案)
打印('操作:',p1.操作)
打印(p1)
对于范围内的计数(25):
p2=制造问题()
打印(p2)
如果uuuu name uuuuuu='\uuuuuuu main\uuuuuuu':
main()

您从未给对象赋予
操作数1
属性。另外,
def\u init\u(self)
需要是
def\u init\u\u(self)
。但指令似乎没有提到
getOperand
方法,也没有生成类的
operan1
/
operan2
属性。它说操作数应该在数学方法内部生成。如果您希望生成操作数,那么整个构造函数没有什么意义
import random
class Problem:
def _init_(self):
    if self.operation == '+':
        self.answer = operand1 + operand2
    if self.operation == '-':
        self.answer = operand1 - operand2
    if self.operation == '*':
        self.answer = operand1 * operand2
    if self.operation == '/':
        self.answer = operand1 / operand2
    
def getOperand1(self):
    return self.operand1

def getOperand2(self):
    return self.operand2

def getAnswer(self):
    return self.answer

def getOperation(self):
    return self.operation

def _addition(self):
    if getOperation(self) == '+':
        operand1.random.randrange(0, 10)
        operand2.random.randrange(0, 10)

def _subtraction(self):
    if getOperation(self) == '-':
        op2 = operand2.random.randrange(0,10)
        ans = answer.random.randrange(0,10)
        operand1 = ans - op2

def _multiplication(self):
    if getOperation(self) == '*':
        operand1.random.randrange(0, 10)
        operand2.random.randrange(0, 10)

def _division(self):
    if getOperation(self) == '/':
        operand2 != 0
        

def createNewProblem(self):
    orr = operation.random('+', '-', '*', '/')
    if orr == '+':
        _addition(self)
    
    if orr == '-':
        _subtraction(self)
    
    if orr == '*':
        _multiplication(self)
    
    if orr == '/':
        _division(self)

def _str_(self):
    return f'{operand1}{operation}{operand2} = {answer}'

def main():
prob1 = Problem()
print(prob1)
print('Operand1: ', prob1.getOperand1())
print('Operand2: ', prob1.getOperand2())
print('Answer: ', prob1.getAnswer())
print('Operation: ', prob1.getOperation())  
print()

for count in range(25):
    prob1.createNewProblem()
    print(prob1)

if __name__ == '__main__':
main()