[英]Reading values with raw_input in Python
我正在嘗試在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。問題似乎出在等式的第一部分。
對不起,新手問題。
一開始您的代碼是錯誤的。 閱讀用戶輸入后,需要分配變量:
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。 您需要使用浮點數而不是整數來進行計算。 您可以在Python 2.5中使用float(m)進行此操作。 在Python 3.0中,除法運算符默認情況下會執行您想要的操作。
/
在Python2中執行Integer除法,這意味着a/b
是c*b <=a
的最大整數c
,因此7/3
的確是2
。 您需要浮點數,因此需要使用它們..在代碼中將所有int
替換為float
。
您可能也應該再看一下函數...您的代碼可以短很多:-)
在Python 2.x中,將一個整數除以另一個整數將得出一個整數。 可以from __future__ import division
,也可以將整數之一傳遞給float()
將其轉換為float()
。
問題是您正在使用整數算術-查看到處都有的所有int
調用。 整數算術(在Python 2.x中)只會返回整數,因此您永遠不會得到2.33,只有2。
使用float()
而不是int()
,事情應該可以進行。
聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.