我编写了一个程序来解决二次方程,方法是输入a,b和c,然后将返回解,或者如果有解,则返回没有实解。
它给了我一些语法错误,这些错误已得到修复,我尝试导入时间模块以延迟它,但仍然无法正常工作。我认为这是因为我没有给它像开始运行的关键字之类的东西。
import math
print('What quadratic do you want to solve?')
a = input(print("a= "))
b = input(print("b= "))
c = input(print("c= "))
discriminant = b**2 - 4*a*c
if discriminant < 0:
print('There are no solutions to this quadratic!')
x_1 = (-b + math.sqrt(discriminant))/2*a
x_2 = (-b - math.sqrt(discriminant))/2*a
if x_1 == x_2:
print('The solution is ' + x_1)
print('The solutions are ' + x_1 + ' and ' + x_2)
我希望输出会询问a,b和c的值,然后给我一个结果,但这只是给了我
What quadratic do you want to solve?
a=
None
答案 0 :(得分:1)
它正在询问您a
的值,但是代码有点奇怪,所以显示混乱了。在输入a
的值之前,程序不会继续;它正在耐心地等待您这样做。
通常,input
函数需要一个参数,即它将显示的提示。 print
函数用于打印,并返回None
。发生的是,print("a=")
打印出来并返回None
;那么您会得到input(None)
,它理解None
是要打印的提示,并且您得到了这种混乱的输出。代码应该是
print("a=", end="")
a = input()
或者只是
a = input("a=")
一旦超过此限制,您的代码中就会出现更多错误;例如b**2 - 4*a*c
是经过计算的,但从未存储在任何地方,因此最终被丢弃。同时,discriminant
变量从未定义,您会听到Python抱怨它。另外,something / 2*a
的意思是(something / 2) * a
,但正确的公式需要something / (2 * a)
(您也可以将其写为something / 2 / a
)。
编辑时会从注释中获取更多详细信息,因为我错过了它们(并且感谢TrebledJ更加谨慎):由于Python3 input
返回字符串,因此您需要将它们转换为浮点数(使用float(...)
功能)以使其可用于计算;同样,结果(即数字)不会使用+
与字符串干净地串联(您必须使用str(...)
函数将它们转换为字符串,或者使用.format
字符串方法或{ {1}}格式运算符可将所有内容都网格化。)
答案 1 :(得分:1)
Python的print
语句始终返回None
。因此,在input(print("a= "))
中,您实际上是在评估input(None)
。您的代码中的另一个问题在
print('The solutions are ' + x_1 + ' and ' + x_2)
您无法连接int
和str
对象,因此在打印之前必须将数字转换为str
对象。
print('The solutions are ' + str(x_1) + ' and ' + str(x_2))
import math
print('What quadratic do you want to solve?')
a = input("a= ")
b = input("b= ")
c = input("c= ")
discriminant = b**2 - 4*a*c
if discriminant < 0:
print('There are no solutions to this quadratic!')
x_1 = (-b + math.sqrt(discriminant))/2*a
x_2 = (-b - math.sqrt(discriminant))/2*a
if x_1 == x_2:
print('The solution is ' + x_1)
print('The solutions are ' + str(x_1) + ' and ' + str(x_2))
答案 2 :(得分:0)
以上两个答案很好地解释了为什么程序返回None
。
因此,您也可以将print和input语句写成一行
a = int(input(f"a = " ))
在输入语句之前,您需要指定int或float,它们将是a,b和c的类型。如果没有它,它们将是str
类型,这将在声明判别变量时再次引发TypeError
。
最后在if语句中,检查判别式是否为<0并打印该语句后,您需要使用exit()
函数退出程序。否则,程序的其余部分将被执行,我们不希望这样做。
还要检查以上两个答案,它们正确指出了代码中的其他小错误。