函数使用input()作为默认参数--收集输入但不打印输出

5uzkadbs  于 2021-08-25  发布在  Java
关注(0)|答案(1)|浏览(361)

我试着制作一个程序来获取二次方程中变量的输入并打印根。

import math

def quadratic_solver(a = input("Enter the value of a "), b = input("Enter the value of b "), c = input("Enter the value of c ")):
    dis = b * b - 4 * a * c 
    sqrt_val = math.sqrt(abs(dis)) 

    if dis > 0: 
        print((-b + sqrt_val)/(2 * a)) 
        print((-b - sqrt_val)/(2 * a)) 

    elif dis == 0: 
        print(-b / (2 * a)) 

    else:
        print(- b / (2 * a), " + i", sqrt_val) 
        print(- b / (2 * a), " - i", sqrt_val)

为什么程序要求输入值(应该如此),但不给出任何输出?

2wnc66cl

2wnc66cl1#

当你把 input() 在函数定义中,这些函数甚至不需要调用函数就可以运行;这些都会被执行,因为默认值是在定义函数时计算的,而不是在调用函数时计算的。我看不到您在哪里调用该函数,因此我假设您从未真正调用过它,从而导致在仍然得到输入提示的情况下没有打印输出。
要解决这些问题,您需要调用该函数,并将输入放入其中。
此外,您的
a bc 值被读取为字符串,但从未转换为数字,如果不首先转换它们,将导致错误,因此我将转换为 float 为了让它工作。

import math

def quadratic_solver(a=None, b=None, c=None):
    if a is None:
        a = float(input("Enter the value of a "))
    if b is None:
        b = float(input("Enter the value of b "))
    if c is None:
        c = float(input("Enter the value of c "))
    dis = b * b - 4 * a * c 
    sqrt_val = math.sqrt(abs(dis)) 

    if dis > 0: 
        print((-b + sqrt_val)/(2 * a)) 
        print((-b - sqrt_val)/(2 * a)) 

    elif dis == 0: 
        print(-b / (2 * a)) 

    else:
        print(- b / (2 * a), " + i", sqrt_val) 
        print(- b / (2 * a), " - i", sqrt_val)

if __name__ == '__main__':
    quadratic_solver()

相关问题