我正在尝试在Python中进行集成,但每当我键入一个值时,我的输出总是会产生0.这是什么原因?
E.g:
def main():
eq_of_form()
value_of_a()
value_of_b()
value_of_c()
value_of_m()
value_of_n()
value_of_x()
area_under_graph()
def eq_of_form():
print "Eq of the form y = ax^m + bx^n + c " + ":"
def value_of_a():
return raw_input("Enter value for a \n")
def value_of_b():
return raw_input("Enter value for b \n")
def value_of_c():
return raw_input("Enter value for c \n")
def value_of_m():
return raw_input("Enter value for m \n")
def value_of_n():
return raw_input("Enter value for n \n")
def value_of_x():
return raw_input("Enter a value for x to find " +
"value of y and the gradient at that point \n " + "x = ")
def area_under_graph():
y = (int(value_of_a())*int(value_of_x())**(int(value_of_m())+1))/((int(value_of_m())+1))
// * 2nd part.This works for me(:
// + (int(value_of_b())) * (int(value_of_x())**
// (int(value_of_n())+1))/(int(value_of_n())+1) + ((int(value_of_c())*int(value_of_x())))
print y
main()
(*注意:eq
功能下的area_under_graph()
只是它的一半,因为另一半的工作,所以我没有发布:))
对于顶级代码,我尝试在这里输入值:(也许你可以尝试使用相同的(:)
a = 1
b = 2
c = 1
m = 2
n = 1
x = 1
我应该得到7/3,这是2.333,但我最终得到2.问题似乎在于eq的第一部分。
抱歉新手问题。
答案 0 :(得分:5)
您的代码在开始时是错误的。您需要在阅读用户输入后分配变量:
value_of_a()
应该是:
a = value_of_a()
也没有必要编写一个单独的函数来输入每个变量。你可以改为使用一个带参数的函数:
def get_user_value(name):
return raw_input("Enter value for %s\n" % name)
a = get_user_value("a")
b = get_user_value("b")
# etc..
但是你忽略了所有这些值并在area_under_curve()
方法中再次读取它们。这可能不是你打算做的。此外,在此方法中,您假设所有参数都是整数。如果您使用的是Python 2.5,则此处的除法是整数除法:
m1/m2
当结果实际上应该是非整数(如0.125)时,这可能会返回0。您需要使用浮点数而不是整数来进行计算。您可以使用float(m)在Python 2.5中执行此操作。在Python 3.0中,除法运算符默认执行您想要的操作。
答案 1 :(得分:3)
/
在Python2中执行整数除法,这意味着a/b
是带c
的最大整数c*b <=a
,因此7/3
确实是2
。你想要浮点数,所以你需要使用它们。在代码中用int
替换所有float
。
您可能应该再看看函数......您的代码可以短得多: - )
答案 2 :(得分:0)
在Python 2.x中,将整数除以另一个整数会产生整数。使用from __future__ import division
,或将其中一个整数转换为浮点数,方法是将其传递给float()
。
答案 3 :(得分:0)
问题在于您使用的是整数算术 - 请查看您到处都有的所有int
次呼叫。整数算术(在Python 2.x中)只会返回整数,所以你永远不会得到2.33,只有2。
使用float()
代替int()
,事情应该有效。