Python执行分数的字符串代码

2024-04-25 08:23:54 发布

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

我一直在使用from fractions import *计算分数,遵循下一个逻辑:

a = Fraction(1,4)
b = Fraction(2,5)
c = Fraction(3,4)

print(a+b*c)

输出

^{pr2}$

但我需要从一个字符串执行语句,就像1/4 + 1/2,由于某些原因,总是返回me01

from fractions import *

class main():
    for i in range(0, 10):
        print "\t\nWRITE YOUR OPERATION"
        code = 'print('
        s = raw_input()
        elements = s.split()

        for element in elements:
            print(element)

            if '/' in element:
                fraction = element.split('/')
                numerator = fraction[0]
                denominator = fraction[1]
                a = Fraction(int(numerator),int(denominator))
                code = code + str(a)
            else:
                code = code + str(element)                

        code = code + ')'        

        exec code

是我错过了什么?在

编辑1

我知道这里怎么了

字符串代码如下:

code = 'print(1/4+2/5*3/4)'

但我真正需要的是(我认为这是不可能做到的):

code = 'print(Fraction(1,4)+Fraction(2,5)*Fraction(3,4))'

或者有什么方法可以做这样的事。。。?在


Tags: 字符串infromimportforcodeelementselement
3条回答

我试过了,这是有效的(我的输入格式是a/b+c/d):

from fractions import*

print ("your operation:")

op = input()
#print (op)

elements = op.split()

for el in elements:
    if ('/' in el):
       fraction = el.split('/')
       numerator = fraction[0]
       denominator = fraction[1]

       a = Fraction(int(numerator),int(denominator))

    print (numerator)
    print (denominator)
    print (a)

您可以使用ast eval

import ast

def myfunc():
   localvars = {}
   expr = 'x = 1/4 + 1/2'
   eval(compile(ast.parse(expr), '<input>', mode="exec"), localvars)
   return localvars['x']

注意,在python2中,它将产生0,因为1/4和{}都将生成0,您需要在python2中执行1.0/4。python3将使用double类型计算它,因此它将按您的预期返回0.75,即python2版本:

^{pr2}$

你可以这样做:

from fractions import *

def returnElement(element):
    if '/' in element and len(element) > 1:
        fraction = element.split('/')
        numerator = fraction[0]
        denominator = fraction[1]
        return 'Fraction(' + numerator + ',' + denominator + ')'        
    else:
        return element  

class main():
    for i in range(0, 10):
        print "\t\nWRITE YOUR OPERATION"
        code = 'print('
        s = raw_input()
        elements = s.split()

        for element in elements:
            code = code + returnElement(element)           

        code = code + ')'        

        print code
        exec code

相关问题 更多 >