0

我的问题是我的程序无法识别用户输入的等式两边包含一个变量(x),我正在使用试错法进行查找。它将 x 视为一个字符串,与定义的变量 x 分开。因此,如果用户在等式 16 的右边输入,在左边输入 x*x,程序将不会将 x 识别为变量 x,而是将其识别为字符串 x。请帮忙。无论如何,这是我的代码,(这意味着求解一个只有一种变量类型 x 的方程):

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"
4

1 回答 1

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
于 2012-10-16T00:45:04.323 回答