我正在编写一个非常简单的练习脚本(我是一个新手),它将接受a,b,c和x的值并将它们插入到二次函数中。
出于某种原因,我没有得到浮点数到我的等式中。我尝试将float()添加到比我需要的更多的地方,但我仍然得到定点数。
注意:在尝试了几种方法之后,我最终得到了这么多浮动输入;这仅仅是最后一次迭代。这是我的代码:
def quadratic(a, b, c, x):
return float(a*x**2 + b*x + c)
print "Let's find the output value for the values in a quatratic function..."
print "Our formula is ax^2 + bx + c = ?"
a = float(raw_input("What value for 'a'?"))
b = float(raw_input("What value for 'b'?"))
c = float(raw_input("What value for 'c'?"))
x = float(raw_input("What value for 'x'?"))
solution = float(quadratic(a, b, c, x))
print "(%d)(%d)^2 + (%d)(%d) + %d = %d" % (a, x, b, x, c, solution)
这是我的输出(在输入a,b,c,x的十进制值之后)。
Let's find the output value for the values in a quatratic function...
Our formula is ax^2 + bx + c = ?
What value for 'a'?.75
What value for 'b'?.44
What value for 'c'?.3467
What value for 'x'?.77
(0)(0)^2 + (0)(0) + 0 = 1
显然,这是我的用户错误。有人可以提供有关我为何获得定点数的见解吗?谢谢!
答案 0 :(得分:0)
正如其他几位用户评论的那样,问题不在于您的计算,而在于输出字符串的格式。 %d
格式化序列告诉Python在将相关值转换为字符串之前将其转换为整数。使用不同的代码会使它按照您期望的方式工作。
最明显的代码是%f
,表示你想要一个浮点值。如果希望浮点数舍入到特定数量的小数位(而不是默认值可能很长),可以添加一些额外的字符。例如,使用%.4f
将四位小数舍入,这可能是一个不错的选择,因为它是您在示例输入中使用的最大有效位数。
另一种选择是使用%s
,这意味着您希望使用内置str
函数将参数直接转换为字符串。这不允许%f
的更好的舍入选项,但它几乎适用于任何类型(甚至非数字类型)。
我实际上更进一步,建议您完全使用其他格式化方法。 str.format
方法允许您执行比%
运算符更复杂的格式化,这在这种情况下很有用,因为您希望重复两次相同的x
值。使用带有str.format
的适当格式字符串可以复制输出中的值,而无需在参数中重复它。这是使用str.format
的关键字参数进行此操作的一种方法:
print "({a:.4f})({x:.4f})^2 + ({b:.4f})({x:.4f}) + {c:.4f} = {solution:.4f}".format(
a=a, b=b, c=c, solution=solution, x=x
)
如果您使用的是Python 3.6+(我也会因其他各种原因而推荐),您可以使用所谓的"F-strings"来执行与上述调用相同的格式设置,但无需显式调用format
并将一堆变量作为关键字参数传递给自己的名称。当您使用f
为第一个引号添加前缀时,Python将根据您当前命名空间中的变量为您执行格式设置:
print(f"({a:.4f})({x:.4f})^2 + ({b:.4f})({x:.4f}) + {c:.4f} = {solution:.4f}")