在Python中使用raw_input读取值
我在用Python做积分的时候,每次输入一个值,结果总是0。这是为什么呢?
比如:
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()
(* 注意:在area_under_graph()
函数里的eq
只写了一半,因为另一半好像没问题,所以我就没贴出来:))
在上面的代码中,我试着在这里输入值:(也许你可以试试一样的(: )
a = 1
b = 2
c = 1
m = 2
n = 1
x = 1
我应该得到7/3,也就是2.333,但最后我得到的是2。问题似乎出在公式的第一部分。
抱歉问了个新手问题。
4 个回答
0
在Python 2.x中,把一个整数除以另一个整数,结果也是整数。要想得到小数结果,可以使用 from __future__ import division
,或者把其中一个整数变成小数,可以用 float()
来实现。
3
在Python2中,/
表示整数除法,这意味着a/b
的结果是最大的整数c
,使得c*b <=a
。所以7/3
的结果确实是2
。如果你想要小数结果,就需要使用浮点数,换句话说,就是把你代码中的所有int
替换成float
。
另外,你可能也应该再看看函数的用法……这样你的代码可以简化得很多很多哦 :-)
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,而实际上结果应该是像0.125这样的非整数。你需要用浮点数而不是整数来进行计算。在Python 2.5中,你可以用float(m)来实现。在Python 3.0中,除法运算符默认就能满足你的需求。