You need to enable JavaScript to run this app.
优惠活动
大模型
产品
解决方案
定价
更多

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

相关产品推荐
方舟 Agent Plan

超全模态模型 × Harness 升级,最新支持 Deepseek-V4.1-Flash、GLM-5.3 系列、Doubao-Seedream-5.0-pro、Kimi-K3 (部分), 限时 9.9 元起

最近更新时间:2026.10.04 02:18:03