为什么我的python代码不执行,而是给我一个“无”错误,而只执行其中的一部分?

时间:2019-06-13 03:57:58

标签: python

我编写了一个程序来解决二次方程,方法是输入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

3 个答案:

答案 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)

您无法连接intstr对象,因此在打印之前必须将数字转换为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()函数退出程序。否则,程序的其余部分将被执行,我们不希望这样做。

还要检查以上两个答案,它们正确指出了代码中的其他小错误。