Python:用类与对象写一元二次方程计算器中遇到的错误
练习题:为二次方程式y=ax2+bx+cy=ax^2+bx+cy=ax2+bx+c设计一个名为Equation的类,这个类包括:
1)代表3个系数的成员变量a、b、c;
2)一个参数为a、b、c的构造方法;
3)一个名为getDiscriminant()的方法返回判别式的值;
4)两个分别名为getRoot1()和getRoot2()的方法返回方程的两个根,如果判别式为负,这些方法返回None。
过程分析:
利用公式法求解,其中: Δ=b2−4ac\Delta = b^2-4acΔ=b2−4ac
Δ\DeltaΔ > 0 时,
Root=−b±Δ2aRoot =\frac{-b\pm\sqrt\Delta}{2a} Root=2a−b±Δ
Δ\DeltaΔ< 0 时,
Root=−b±4ac−b2i2aRoot =\frac{-b\pm\sqrt{4ac-b^2}i}{2a} Root=2a−b±4ac−b2i
Δ\DeltaΔ=0时,
Root=−b2aRoot = -\frac{b}{2a} Root=−2ab
数学分析完毕,实现代码如下:
import math as mtclass Equation:def __init__(self,a,b,c): #定义类的基础属性——三个变量self.a = aself.b = bself.c = cdef getDiscriminant(self): #计算Δ的构造函数self.delta = self.b ** 2 - 4 * self.a * self.creturn self.deltadef getRoot1(self):if self.delta < 0:return Noneelse:return (-self.b + math.sqrt(self.getDiscriminant())) / (2 * self.a)def getRoot2(self):if self.delta < 0:return Noneelse:return (-self.b - math.sqrt(self.getDiscriminant())) / (2 * self.a)if __name__ == '__main__':a = float(input("输入变量a:"))b = float(input("输入变量b:"))c = float(input("输入变量c:"))Eq = Equation(a,b,c) #实例化类Equation为新建对象EqEq.getDiscriminant() #对象访问Δ函数Eq.getRoot() #对象访问求根函数
可能出现以下错误:
1.unsupported operand type(s) for -: ‘int’ and ‘str’ 不支持操作类型:“int” 和 “str”
问题代码块:
a = input("输入变量a:")b = input("输入变量b:")c = input("输入变量c:")
原因:代码中需要用float、int类进行操作,没有数据类型转换会被录入为str类。导致没法参加公式计算。
解决方法:
a = float(input("输入变量a:"))b = float(input("输入变量b:"))c = float(input("输入变量c:"))
2.missing 1 required positional argument: ‘self’ 缺少一个位置参数self
问题代码块:
class Equation:def __init__(self,a,b,c):self.a = aself.b = bself.c = c
######################分割线#######################
Equation.getDiscriminant()
Equation.getRoot1()
Equation.getRoot1()
原因:Equation没有实例化,因为代码中Equation中定义了a,b,c三个基础变量。使用时需变量将类实例化
解决方法:
Equation(a,b,c).getDiscriminant()
Equation(a,b,c).getRoot1()
Equation(a,b,c).getRoot1()
3.‘Equation’ object has no attribute ‘delta’ Equation中没有属性"delta"
问题代码块:
Equation(a,b,c).getDiscriminant()
Equation(a,b,c).getRoot1()
Equation(a,b,c).getRoot1()
原因:实例化理解错误,翻看资料发现实例化的语句为 对象名 = 类名() 即 Eq = Equation(a,b,c) 。
因此解决方法:
Eq = Equation(a,b,c)
Eq.getDiscriminant()
Eq.getRoot()
我认为要求根就直接一个Root函数比较方便,搞个Root1和Root2属实没必要,于是更改为了只有一个Root的版本:
import math as mtclass Equation:def __init__(self,a,b,c): #定义类的基础属性——三个变量self.a = aself.b = bself.c = cdef getDiscriminant(self): #计算Δ的构造函数self.delta = self.b ** 2 - 4 * self.a * self.creturn self.deltadef getRoot(self): #分类别进行讨论,Δ<0无实数解,Δ>=0时利用公式法求解if self.delta < 0:return Noneelse:root1 = (-self.b+mt.sqrt(self.delta))/2*self.aroot2 = (-self.b-mt.sqrt(self.delta))/2*self.areturn print("Root1={},Root2={}".format(root1,root2))if __name__ == '__main__':a = float(input("输入变量a:"))b = float(input("输入变量b:"))c = float(input("输入变量c:"))Eq = Equation(a,b,c) #实例化类Equation为新建对象EqEq.getDiscriminant() #对象访问Δ函数Eq.getRoot() #对象访问求根函数
代码完成,运行结果如下:
Python:用类与对象写一元二次方程计算器中遇到的错误相关推荐
- Python基础(类与对象)
Python基础(类与对象) 一.编程的两大思想 面向过程和面向对象 面向过程 面向对象 区别 事物比较简单,可以用线性的思维去解决 事物比较复杂,使用简单的线性思维无法解决 共同点:面向对象和面向过 ...
- Python的类和对象的介绍,定义类和对象,定义实例方法和属性以及Python中的魔法方法
Day09新手小白学python 第九节 Python的类和对象的介绍,定义类和对象,定义实例方法和属性以及Python中的魔法方法 目录 Day09新手小白学python 前言 一.面向对象介绍 二 ...
- Python的零基础超详细讲解(第十三天)-Python的类与对象
基础篇往期文章如下: Python的零基础超详细讲解(第一天)-Python简介以及下载 Python的零基础超详细讲解(第二天)-Python的基础语法1 Python的零基础超详细讲解(第三天)- ...
- Python基础——类与对象
Python基础--类与对象 Python基础--类与对象 类与对象 数据类型 对象 类的创建 创建语法 类的创建 对象的创建 对象调用类中的内容 类属性,类方法,静态方法 类属性 访问类属性 类方法 ...
- 随机创建圆形、三角形或者矩形类的对象, 存放在数组中,并计算出每个形状的面积和周长
随机创建圆形.三角形或者矩形类的对象, 存放在数组中,并计算出每个形状的面积和周长 题目要求 解题思路 代码 形状类代码 圆形类代码 三角形类代码 矩形类代码 方法类代码 运行结果 题目要求 随机创建 ...
- 用python写一元二次方程_使用Python解一元二次方程!
一元二次方程:ax² + bx + c = 0 求根公式:x = (-b+√(b²-4ac))/2a 判别式:b²-4ac def my_math(a, b , c): if not isinstan ...
- Python进阶-----类、对象的相关知识
一.声明类 class 类名: #一般类名的首字母大写 '类的文档字符串' 类体 例如创建一个中国人的类: 1 class Chinese: 2 '这是一个中国人的类' #类的文档字符串 3 name ...
- python的类和对象——类的静态字段番外篇
什么是静态字段 在开始之前,先上图,解释一下什么是类的静态字段(我有的时候会叫它类的静态变量,总之说的都是它.后面大多数情况可能会简称为类变量.): 我们看上面的例子,这里的money就是静态字段,首 ...
- python 类-如何理解python的类与对象?
挂一个自己的学习笔记 这个时间一长就搞错了,还经常回头来看一看,尤其是self的用法. python中一切皆为对象,所谓对象:我自己就是一个对象,我玩的电脑就是对象,坐着的椅子就是对象,家里养的小狗也 ...
- python类的构造方法名称_搞懂Python的类和对象名称空间
代码块的分类 python中分几种代码块类型,它们都有自己的作用域,或者说名称空间:文件或模块整体是一个代码块,名称空间为全局范围 函数代码块,名称空间为函数自身范围,是本地作用域,在全局范围的内层函 ...
最新文章
- GPT-3 1750亿参数少样本无需微调,网友:「调参侠」都没的当了
- 漫画:什么是 “抽象工厂模式” ?
- python日历gui_python GUI库图形界面开发之PyQt5日期时间控件QDateTimeEdit详细使用方法与实例...
- POJ3189二分最大流(枚举下界,二分宽度,最大流判断可行性)
- 单臂路由实验(cisco packet tracer 5.2)
- ExtJs 备忘录(4)—— Form表单(四) [ 数据提交 ]
- fiddler启动文件_如何成为Fiddler大神,请看这里!
- 年会尽头是闲鱼!超11万人在闲鱼转卖年会奖品
- 【Flink】Unauthorized request to start container. This token is expired. current time is
- 【Docker】docker bash: sudo: command not found
- C++ vector 容器的使用
- android titlebar 高度是多少,什么是TitleBar的默认高度和Android中Titlebar中的默认TextSize?...
- Maven工程Spring框架AOP的简单使用
- Android5.0(Lollipop) BLE蓝牙4.0+浅析code(二)
- WiFi基础知识解析
- elasticsearch 如何清理过期的数据
- 高中计算机课程教程,高中信息技术课教学计划
- javafx 五、网络请求
- 获奖结果公布|2020腾讯犀牛鸟云开发校园技术布道师养成计划
- 手机控制电脑之手机端模拟鼠标移动