练习题:为二次方程式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−b2​i​
Δ\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:用类与对象写一元二次方程计算器中遇到的错误相关推荐

  1. Python基础(类与对象)

    Python基础(类与对象) 一.编程的两大思想 面向过程和面向对象 面向过程 面向对象 区别 事物比较简单,可以用线性的思维去解决 事物比较复杂,使用简单的线性思维无法解决 共同点:面向对象和面向过 ...

  2. Python的类和对象的介绍,定义类和对象,定义实例方法和属性以及Python中的魔法方法

    Day09新手小白学python 第九节 Python的类和对象的介绍,定义类和对象,定义实例方法和属性以及Python中的魔法方法 目录 Day09新手小白学python 前言 一.面向对象介绍 二 ...

  3. Python的零基础超详细讲解(第十三天)-Python的类与对象

    基础篇往期文章如下: Python的零基础超详细讲解(第一天)-Python简介以及下载 Python的零基础超详细讲解(第二天)-Python的基础语法1 Python的零基础超详细讲解(第三天)- ...

  4. Python基础——类与对象

    Python基础--类与对象 Python基础--类与对象 类与对象 数据类型 对象 类的创建 创建语法 类的创建 对象的创建 对象调用类中的内容 类属性,类方法,静态方法 类属性 访问类属性 类方法 ...

  5. 随机创建圆形、三角形或者矩形类的对象, 存放在数组中,并计算出每个形状的面积和周长

    随机创建圆形.三角形或者矩形类的对象, 存放在数组中,并计算出每个形状的面积和周长 题目要求 解题思路 代码 形状类代码 圆形类代码 三角形类代码 矩形类代码 方法类代码 运行结果 题目要求 随机创建 ...

  6. 用python写一元二次方程_使用Python解一元二次方程!

    一元二次方程:ax² + bx + c = 0 求根公式:x = (-b+√(b²-4ac))/2a 判别式:b²-4ac def my_math(a, b , c): if not isinstan ...

  7. Python进阶-----类、对象的相关知识

    一.声明类 class 类名: #一般类名的首字母大写 '类的文档字符串' 类体 例如创建一个中国人的类: 1 class Chinese: 2 '这是一个中国人的类' #类的文档字符串 3 name ...

  8. python的类和对象——类的静态字段番外篇

    什么是静态字段 在开始之前,先上图,解释一下什么是类的静态字段(我有的时候会叫它类的静态变量,总之说的都是它.后面大多数情况可能会简称为类变量.): 我们看上面的例子,这里的money就是静态字段,首 ...

  9. python 类-如何理解python的类与对象?

    挂一个自己的学习笔记 这个时间一长就搞错了,还经常回头来看一看,尤其是self的用法. python中一切皆为对象,所谓对象:我自己就是一个对象,我玩的电脑就是对象,坐着的椅子就是对象,家里养的小狗也 ...

  10. python类的构造方法名称_搞懂Python的类和对象名称空间

    代码块的分类 python中分几种代码块类型,它们都有自己的作用域,或者说名称空间:文件或模块整体是一个代码块,名称空间为全局范围 函数代码块,名称空间为函数自身范围,是本地作用域,在全局范围的内层函 ...

最新文章

  1. GPT-3 1750亿参数少样本无需微调,网友:「调参侠」都没的当了
  2. 漫画:什么是 “抽象工厂模式” ?
  3. python日历gui_python GUI库图形界面开发之PyQt5日期时间控件QDateTimeEdit详细使用方法与实例...
  4. POJ3189二分最大流(枚举下界,二分宽度,最大流判断可行性)
  5. 单臂路由实验(cisco packet tracer 5.2)
  6. ExtJs 备忘录(4)—— Form表单(四) [ 数据提交 ]
  7. fiddler启动文件_如何成为Fiddler大神,请看这里!
  8. 年会尽头是闲鱼!超11万人在闲鱼转卖年会奖品
  9. 【Flink】Unauthorized request to start container. This token is expired. current time is
  10. 【Docker】docker bash: sudo: command not found
  11. C++ vector 容器的使用
  12. android titlebar 高度是多少,什么是TitleBar的默认高度和Android中Titlebar中的默认TextSize?...
  13. Maven工程Spring框架AOP的简单使用
  14. Android5.0(Lollipop) BLE蓝牙4.0+浅析code(二)
  15. WiFi基础知识解析
  16. elasticsearch 如何清理过期的数据
  17. 高中计算机课程教程,高中信息技术课教学计划
  18. javafx 五、网络请求
  19. 获奖结果公布|2020腾讯犀牛鸟云开发校园技术布道师养成计划
  20. 手机控制电脑之手机端模拟鼠标移动

热门文章

  1. Matlab 中三角函数
  2. IOCCC.1984.anonymous.c.解析
  3. phpstudy下载安装简明教程(图文)
  4. 新经济的50个新热点(转自:商务部网站)
  5. 深度学习涉及到的高等数学知识点总结
  6. Cognitive Surplus 认知盈余
  7. 数据挖掘算法之Apriori算法应用实例
  8. 计算机网络中什么是令牌,一个动画看懂网络原理之令牌环网的工作原理
  9. kindeditor上传图片php,kindeditor图片上传功能
  10. 【U+】通用财务,附加数据库后,软件看不到账套。