首先上题
然后上程序
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次存档却直接解决了问题成就了正确答案。因此不同的版本要多多保存。还有每次的名字要写清楚哦。要不第几次都分不清了。