在Python中使用raw_input读取值

0 投票
4 回答
760 浏览
提问于 2025-04-15 17:32

我在用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中,除法运算符默认就能满足你的需求。

撰写回答