如何让我的用户输入允许在python中使用变量?

2021-04-11 23:51:11 发布

您现在位置:Python中文网/ 问答频道 /正文

我的问题是,我的程序将无法识别用户输入的方程边(x)中包含一个变量,我正在使用试错法来查找。它将x看作一个字符串,与定义的变量x分开。因此,如果用户在等式16的右侧输入x*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"
1条回答
网友
1楼 ·

可以使用^{}计算任意Python代码。在实际的代码中使用这种方法通常是一个非常糟糕的主意,因为允许用户执行未知代码是极其危险的,即使您试图限制他们可以做什么。在

但是,如果您使用它,我强烈建议您使用globals和{}参数来限制允许用户使用的变量。例如:

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

通过只显式定义变量x,可以确保用户不会尝试访问他们不应该访问的内容:

^{pr2}$

如果要允许使用数学函数,可以在第二个参数中传递它们,如下所示:

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

相关问题