《python语言程序设计》第4章 第1题TypeError: ‘>=‘ not supported between instances of ‘complex‘ and ‘int‘

首先上题

在这里插入图片描述

然后上程序

a, b, c = eval(input("Enter a, b, c: "))

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

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

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

根据程序结果显示

在这里插入图片描述
在这里插入图片描述

问题出现

pycharm上

在这里插入图片描述

vscode上

在这里插入图片描述

先说灵感

本次vscode在发现问题上要比pycharm高 vscod直接提出了math domain error 用翻译软件我发现是叫数字域错误。可pycharm提示的确实在比较阶段>=这个无法比对。也许pycharm有它自己的运行问题。但是从小白的角度来说。vscode是不是更加直接提示问题呢?

我们用结果来证明一下。打印招式来也

在这里插入图片描述

大家一起看一下。这里dateNumber他的数字域或者说他的数值是不是已经超出了范围。可从小白的角度来说<=这个我就误以为是我的语法错误,是不是哪个标点符号的问题。这只是一个感觉。并不能代表pycharm和vscode之间的高下。

解决办法

办法其实很简单题面已经写明了。就是判断b2 -(4ac)的正负就可以了。所以我的问题大家也是明眼可见了。多了一个化蛇添足的开平方 0.5 其实这个是我偷懒了我觉得开平方就放到公式里的了一个简写多方便。但是恰恰就是因为这个问题造成了出错。
最后正确的程序如下

a, b, c = eval(input("Enter a, b, c: "))

dateNumber = (b ** 2) - (4 * a * c)
print(f"dateNumber {dateNumber}")

r1 = (-b + (dateNumber) ** 0.5) / (2 * a)
r2 = (-b - (dateNumber) ** 0.5) / (2 * a)

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

vincent分享

作为一个老白。今天再次分享,我在调试中认为比较有用的办法。

打印!打印!打印!

正是有了打印这样的输出方式,让我们对程序的状态有了很好的了解。也因此帮助我们减少了时间

存档!存档!存档!存档!

我是第6次刷第4章的题。正因为之前五次我都有存档,对我有很大帮助。第5次存档和今天的操作一样,写的还不如今天。而第3次存档却直接解决了问题成就了正确答案。因此不同的版本要多多保存。还有每次的名字要写清楚哦。要不第几次都分不清了。

出错是程序边界的标注
不要怕出错。多多出错。正确是我们追求的,但正确只是给了我们动力。错误却给了我们方向和程度。正确和错误是我们了解编程的两个方向。
希望大家继续努力。
加油!
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包

打赏作者

电饭叔

谢谢各位兄弟们的关注,谢谢破费

¥1 ¥2 ¥4 ¥6 ¥10 ¥20
扫码支付:¥1
获取中
扫码支付

您的余额不足,请更换扫码支付或充值

打赏作者

实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值