zoukankan      html  css  js  c++  java
  • 初学者的 一次二元方程的解题。a、b、c三个数的平方根

    介绍一下这道猛题编程题

    一次二元方程的解题。a、b、c三个数的平方根。ax2+bx+c = 0,(现在在家用笔记本,没有单位电脑方便所以我就简单写一下题目)

     我做的编程内容:

    # Prompt three date number
    a, b, c = eval(input("Enter a, b, c: "))

    # Model number method
    dateNumber = (b ** 2 - 4 * a * c) ** 0.5
    print(f"dateNumber {dateNumber}")

    r1 = round((-b + dateNumber) / 2 * a, 6)
    r2 = round((-b - dateNumber) / 2 * a, 6)

    if dateNumber > 0:
        print(f"The roots are {r1} and {r2}")
    elif dateNumber == 0:
        print("The root is -1")
    else:
        print("The equation has no real roots")

    按要求我输入了三组数

    1,3,1、

    1,2,1、

    1,2,3

    经过学习呢确实有自己的一些解题的感觉了。我输入了前两组得到了跟书中要求的答案。但第三组数1,2,3出现后崩溃开始了

    下面是出错的内容:

    Traceback (most recent call last):

      File "C:/Users/apple/20200225/04-00 contest.py", line 9, in <module>

        r1 = round((-b + dateNumber) / 2 * a, 6)

    TypeError: type complex doesn't define __round__ method

    凭着我的野蛮英语 我猜测在round方面的问题。可是改了几遍发现没有什么作用,而且自己还想到第1组、第2组也是这个公式都OK呀,那个时候round都没有变化,所以排除了round的问题。接着上网搜索吧。某狗浏览器。我真的不想用了。用了度娘。但这个错误提示估计太偏僻了也没有不对。最后选择了Error的几个单词。我明白了原来是所谓的数据根本不是round能处理的。我估计是不是这算溢出呢。(对溢出这个词的理解)

    既然知道了问题,那么继续解决。不断的犯错才能不断的进步。犯错不怕,可怕的是放不下放错的道德标准。(刚想到的意义)

    每次遇到问题我都会想办法,比如用打印结果来慢慢验证。程序里有一个变量dateNumber((b ** 2) - (4 * a * c)) 根据题里的介绍整个程序判定也是判断dateNumber正、负或0 来进行完成的。

    三组数据输出如下:

    第一组

    Enter a, b, c: 1,3,1

    dateNumber 2.23606797749979

    The roots are -0.381966 and -2.618034

    第二组

    Enter a, b, c: 1,2,1

    dateNumber 0.0

    The root is -1

    第三组,各位接下来就是见证奇迹的时刻!

    Enter a, b, c: 1,2,3

    dateNumber (1.7319121124709868e-16+2.8284271247461903j)

    大家看一眼,哇塞滴呀,各位兄弟姐妹们,这个是什么鬼!!!

    我后来用了windows powershell里打开了python,用第3组数手动玩一下dateNumber公式,(**在这里我没有用math的功能然后平方的时候我喜欢用b ** 2)

     (b ** 2 - 4 * a * c) ** 0.5

        结果是-2.8284271247461903 可是我们用Pycharm运行后却变成了出错,vcode也是一模一样。

       

    我拿出了我上一次做的编程来比对

    # 4.1 compute roots
    a, b, c = eval(input("Enter a, b, c integer: "))

    # mathematical formula
    r1 = (-b + ((b ** 2) - (4 * a * c)) ** 0.5) / (2 * a)
    r2 = (-b - ((b ** 2) - (4 * a * c)) ** 0.5) / (2 * a)

    if (b ** 2) - (4 * a * c) > 0:
        print("The roots are", r1, "and", r2)
    if (b ** 2) - (4 * a * c) == 0:
        print("The root is", r1 or r2)
    else:
        print("The equation has no real roots")

    这是我上次做的竟然通过了

    那么这个问题在哪里呢???

    上一次的编程里我没有单独设立dateNumber这样的变量而是直接将公式做为if里的判定,于是我参考上一次编程时写的方式重写了下方公式

    又做了一次尝试,我将dateNumber的公式改为
    dateNumber = (b ** 2) - (4 * a * c) ** 0.5

    用了两个括号将两个元素分别开来计算。结果呢

    Enter a, b, c: 1,2,3

    dateNumber 0.5358983848622456

    The roots are -0.732051 and -1.267949

    但正常应该是显示The equation has no real root

    而-8开平方的结果应该是-2.8284271247481903

    接着看到上次程序里并没有带上** 0.5在公式里。疑问继续在增加并没有减少。接着我尝试的去掉了** 0.5 直接运行(b ** 2) - (4 * a * c) 结果是-8和之前的计算符合。这也变相的发现了上次我这道题通过的是-8来判定成了没根。而不是用-8的开平方来作为if语句判断的数据。不过不带开平方的也是题本身要求的。

    接下来继续尝试用PoweShell里执行python来计算发现了为什么会出现0.5358983848622456,原来是运算顺序决定的。我没把(b**2)-(4*1*3)放在一个括号里。那么python根据设置好的运行顺序最终得出了0.5…..这样的数据。那我接着就把他们放在一个括号里。结果呢(看下图第2个圈)

     

    ­­

    6月5日接着6月4日的战斗继续。换了一台机器。没有用中文插件。

    并且我调用了math里的sqrt。结果1,2,3,哇塞真是魔性。

    另外今天对这个程序第二个判断做了一个小修改到很意外的不错

    print(f"The root is {r1 or r2}")

    显示的结果跟答案要求的一样。看来每一次重写程序,就和写作文不断修改一样会有新发现

    不说了,再说用昨天的方法换机器后的状态

    a, b, c = eval(input("Enter a,b,c: "))
    # 根据题的介绍得出所谓公式为(b ** 2 - 4 * a *c) ** 0.5 变量名为dateN
    dateNumber =(b ** 2 - 4 * a * c) ** 0.5

    dateNumber用了昨天的写法。结果。继续,这回是新错误。新错误就是我的新朋友。数据之间不支持。

             那我再次打印吧,打印的结果和昨天一样

    F:ProgramDataAnaconda3python.exe "F:/LearnPython/untitled/04-00 contest.py"

    Enter a,b,c: 1,2,3

    dateNumber is (1.7319121124709868e-16+2.8284271247461903j)(和另一台机器一样。)

    Traceback (most recent call last):

      File "F:/LearnPython/untitled/04-00 contest.py", line 15, in <module>

        if dateNumber > 0:

    TypeError: '>' not supported between instances of 'complex' and 'int'

    为什么 1,3,1 和1,2,1都没问题。? 到123完蛋了。为什么1,2,3开平方变成了

    “1.7319121124709868e-16+2.8284271247461903j” 大哥你代表什么

  • 相关阅读:
    STL的移动算法
    mysql insert和前台显示乱码
    垃圾回收算法简单介绍——JVM读书笔记&lt;二&gt;
    UVA
    读取系统执行状态的shell脚本
    【web 回车】web项目 注册或登录页面 回车登录无效,解决方案
    【maven】maven项目移除Maven Dependencies后如何再添加进去
    【web.xml】报错java.lang.ClassNotFoundException: org.springframework.web.context.ContextLoaderListener
    【shiro】关于shiro匹配URL的小用法
    【Sets】使用Google Guava工程中Sets工具包,实现集合的并集/交集/补集/差集
  • 原文地址:https://www.cnblogs.com/yogaMan/p/13051464.html
Copyright © 2011-2022 走看看