在Python中使用raw_input读取值

时间:2010-01-01 14:29:06

标签: python

我正在尝试在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的第一部分。

抱歉新手问题。

4 个答案:

答案 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(),事情应该有效。