Visual Basic二分法代码转Python后无a、b输出,求错误排查
代码错误点及修正方案
错误列表
- 自定义函数
f(x)缺少返回值:VB语法中给函数名赋值即可作为返回值,Python需要显式使用return语句返回计算结果,原代码调用f(m)会返回None,后续判断会直接报错。 - 循环条件错误:原代码写的是
while 0,0在布尔判断中等价于False,循环体完全不会执行,自然不会更新a、b的值。VB的Do Loop Until是先执行循环体再判断终止条件的结构,对应Python可以用while True构造无限循环,靠内部的break语句终止。 - 输入转换类型不合理:VB原代码用
CDbl将输入转为双精度浮点数,转写代码用int()转换会丢失小数精度,也会导致用户输入小数时直接报错,建议改为float()。 - 输入校验无终止逻辑:原代码只是打印错误提示,校验不通过后仍会继续执行后续计算逻辑,不符合设计预期,校验不通过时应该直接终止程序。
修正后代码
import math def f(x): return x ** 2 - c c = float(input("C= ")) a = float(input("a= ")) b = float(input("b= ")) eps = 1e-13 # 输入校验 if a > b: print("Eingabe ist Falsch") exit() if a < 0 or b < 0 or c <= 0: print("Eingabe ist Falsch") exit() if a * a > c or b * b < c: print("Eingabe ist Falsch") exit() n = 0 while True: n += 1 m = (a + b) / 2 if f(m) > 0: b = m else: a = m eps = abs(a - b) if eps < math.pow(10, -13): break print("a= ", a) print("b= ", b)
内容的提问来源于stack exchange,提问作者Ahmad
相关产品推荐
相关产品推荐

