2012-10-16 49 views
0

我的問題是,我的程序將無法識別用戶輸入的方程兩邊包括一個變量(x),我正在使用試驗和錯誤的方法來查找。它將x視爲一個字符串,與定義的變量x分離。因此,如果用戶輸入方程式16的右側,左側輸入x * x,則程序將不會將x識別爲變量x,而是將x識別爲字符串x。請幫忙。總之,這裏是我的代碼,(是指只有一個變量類型來求解方程,X):如何讓我的用戶輸入允許python中的變量?

startingLimit=raw_input("What is the lowest estimate that your variable could possibly be?") 

print 

wholeNumber=raw_input("Do you know if your variable will be a whole number or a    fraction? Answer: yes/no") 
if (wholeNumber== "yes"): 
    print 
    fraction= raw_input("Is it a decimal/fraction? Answer:yes/no") 
if (fraction=="yes"): 
    print 
    print "This program will only calculate up to the fourth place to the right of the decimal" 
    xfinder=0.0001 
else: 
    xfinder=1 

x=4   
leftEquation=raw_input("Enter your left side of the equation:") 
print 
rightEquation=raw_input("Enter the right side of the equation:") 
print 
amountSolutions=raw_input("How many solutions are there to your equation? (up to 20)") 




indivisualCount=0 
count=0 

while (count!=amountSolutions): 


if (count==1): 
    if (leftEquation==rightEquation): 
     a=x 
     count=count+1 
if (count==2): 
    if (leftEquation==rightEquation): 
     b=x 
     count=count+1 
if (count==3): 
    if (leftEquation==rightEquation): 
     c=x 
     count=count+1 
if (count==4): 
    if (leftEquation==rightEquation): 
     d=x 
     count=count+1 
if (count==5): 
    if (leftEquation==rightEquation): 
     e=x 
     count=count+1 
if (count==6): 
    if (leftEquation==rightEquation): 
     f=x 
     count=count+1 
if (count==7): 
    if (leftEquation==rightEquation): 
     g=x 
     count=count+1 
if (count==8): 
    if (leftEquation==rightEquation): 
     h=x 
     count=count+1 
if (count==9): 
    if (leftEquation==rightEquation): 
     i=x 
     count=count+1 
if (count==10): 
    if (leftEquation==rightEquation): 
     j=x 
     count=count+1 
if (count==11): 
    if (leftEquation==rightEquation): 
     k=x 
     count=count+1 
if (count==12): 
    if (leftEquation==rightEquation): 
     l=x 
     count=count+1 
if (count==13): 
    if (leftEquation==rightEquation): 
     m=x 
     count=count+1 
if (count==14): 
    if (leftEquation==rightEquation): 
     n=x 
     count=count+1 
if (count==15): 
    if (leftEquation==rightEquation): 
     o=x 
     count=count+1 
if (count==16): 
    if (leftEquation==rightEquation): 
     p=x 
     count=count+1 
if (count==17): 
    if (leftEquation==rightEquation): 
     q=x 
     count=count+1 
if (count==18): 
    if (leftEquation==rightEquation): 
     r=x 
     count=count+1 
if (count==19): 
    if (leftEquation==rightEquation): 
     s=x 
     count=count+1 
if (count==20): 
    if (leftEquation==rightEquation): 
     t=x 


if (indivisualCount==0): 
    x=x+xfinder 
    indivisualCount=indivisualCount+1 

x=x+xfinder 



print 
print "Compiling..." 
time.sleep(3) 
if (amountSolutions==1): 
    print "Solutions= ",a 
if (amountSolutions==2): 
    print "Solutions= ",a,b 
if (amountSolutions==3): 
    print "Solutions= ",a,b,c 
if (amountSolutions==4): 
    print "Solutions= ",a,b,c,d 
if (amountSolutions==5): 
    print "Solutions= ",a,b,c,d,e 
if (amountSolutions==6): 
    print "Solutions= ",a,b,c,d,e,f 
if (amountSolutions==7): 
    print "Solutions= ",a,b,c,d,e,f,g 
if (amountSolutions==8): 
    print "Solutions= ",a,b,c,d,e,f,g,h 
if (amountSolutions==9): 
    print "Solutions= ",a,b,c,d,e,f,g,h,i,j 
if (amountSolutions==10): 
    print "Solutions= ",a,b,c,d,e,f,g,h,i,j,k 
if (amountSolutions==11): 
    print "Solutions= ",a,b,c,d,e,f,g,h,i,j,k,l 
if (amountSolutions==12): 
    print "Solutions= ",a,b,c,d,e,f,g,h,i,j,k,l,m 
if (amountSolutions==13): 
    print "Solutions=",a,b,c,d,e,f,g,h,i,j,k,l,m,n 
if (amountSolutions==15): 
    print "Solutions= ",a,b,c,d,e,f,g,h,u,j,k,l,m,n,o 
if (amountSolutions==16): 
    print "Solutions= ",a,b,c,d,e,f,g,h,u,j,k,l,m,n,o,p 
if (amountSolutions==17): 
    print "Solutions= ",a,b,c,d,e,f,g,h,u,j,k,l,m,n,o,p,q 
if (amountSolutions==18): 
    print "Solutions= ",a,b,c,d,e,f,g,h,u,j,k,l,m,n,o,p,q,r 
if (amountSolutions==19): 
    print "Solutions= ",a,b,c,d,e,f,g,h,u,j,k,l,m,n,o,p,q,r,s 
if (amountSolutions==20): 
    print "Solutions= ",a,b,c,d,e,f,g,h,u,j,k,l,m,n,o,p,q,r,s,t 


print 
print 
time.sleep(5) 
print "PROGRAM COMPLETED" 
+1

一些不相關的建議:你應該瞭解的循環('有效範圍內(amountSolutions計數)')和列表('解決方案= []'和' solutions.append(newsolution)')。你的代碼現在有很多重複,這幾乎總是表明你需要考慮這個問題。 – DSM

回答

2

您可以使用eval()評估任意Python代碼。在真實世界的代碼中使用它通常是一個非常糟糕的想法,因爲即使您試圖限制他們可以執行的操作,允許用戶執行未知代碼也是非常危險的。

但是,如果你做使用它,我強烈鼓勵您使用globalslocals參數限制用戶允許使用的變量。舉個例子:

>>> x=5 
>>> eval('x*x', None, {'x': x}) 
25 

通過明確界定僅變量x可以確保用戶不會嘗試訪問的東西他們不應該給:

>>> eval('x*y', None, {'x': x}) 
Traceback (most recent call last): 
    File "<stdin>", line 1, in <module> 
    File "<string>", line 1, in <module> 
NameError: name 'y' is not defined 

如果你想允許數學函數可以使用,你可以通過他們的第二個參數,如下所示:

>>> import math 
>>> eval('sin(x)', {'sin': math.sin}, {'x': x}) 
-0.95892427466313845 
相關問題