4

Python:所以我正在开发一个程序(这是一个类分配),它将采用诸如 3/4/5 或 32432/23423/2354325 或 3425*343/254235 或 43252+34254-2435 等表达式(对于+,-,/,*) 中的所有运算符。并将解决表达式。

我不能使用评估!

我不能使用更高级别的代码,我最多只能使用来自以下网站的字符串操纵器来拆分字符串。

http://docs.python.org/2/library/stdtypes.html#typesseq

我的方法是查看用户输入的表达式,然后使用 find 函数找到 OPERATORS,然后使用这些运算符和切片函数(例如 s[0:x])。我所拥有的如下,不幸的是它不起作用: *请注意,打印语句仅用于调试目的。编辑:为什么在我运行程序并输入表达式时未定义 x ?

z= (input("expression:")).strip()

def finding(z):
    if "/" in z:
        x=z.find("/")
        print("hi1")
    elif "*" in z:
        x=z.find("*")
        print("hi2")
    elif "+" in z:
        x=z.find("+")
        print("hi3")
    elif "-" in z:
        x=z.find("-")
        print("hi4")
    else:
        print("error, not math expression")
    return x

def Parsing(z,x):

    x= finding(z)
    qw=z.s[0:x]
    print (qw)
# take the x-value from function finding(z) and use it to split 

finding(z)
Parsing(z,x)
4

3 回答 3

3

如果您只是在将输入拆分成各个部分时遇到问题,这里有一些可以帮助您的东西。我尽可能保持它的可读性,以便您至少可以理解它的作用。如果您需要我,我会解释其中的任何部分:

def parse(text):
    chunks = ['']

    for character in text:
        if character.isdigit():
            if chunks[-1].isdigit():   # If the last chunk is already a number
                chunks[-1] += character  # Add onto that number
            else:
                chunks.append(character) # Start a new number chunk
        elif character in '+-/*':
            chunks.append(character)  # This doesn't account for `1 ++ 2`.

    return chunks[1:]

示例用法:

>>> parse('123 + 123')
['123', '+', '123']
>>> parse('123 + 123 / 123 + 123')
['123', '+', '123', '/', '123', '+', '123']

我会把剩下的留给你。如果不允许使用.isdigit(),则必须将其替换为较低级别的 Python 代码。

于 2012-10-30T05:43:38.410 回答
2

我认为,最简单的方法是实现一个分流码算法,将你的方程转换为后缀符号,然后从左到右执行它。

但是由于这是一个课堂作业,你应该自己做实际的实现,我已经给了你比我应该拥有的更多的东西。

于 2012-10-30T05:09:29.103 回答
0

为什么我运行程序并输入表达式时没有定义x?

x不在范围内,您只需在方法中定义它,然后尝试在其他地方访问它。

z= (input("expression:")).strip()

def finding(z):
    # ... removed your code ...
    # in this method, you define x, which is local
    # to the method, nothing outside this method has
    # access to x
    return x

def Parsing(z,x):

    x= finding(z) # this is a different x that is assigned the 
                  # return value from the 'finding' method.
    qw=z.s[0:x] # I'm curious as to what is going on here.
    print (qw)
# take the x-value from function finding(z) and use it to split 

finding(z) # here, z is the value from the top of your code
Parsing(z,x) # here, x is not defined, which is where you get your error.

由于Parsing已经在调用finding以获取 的值x,因此您无需将其传递给Parsing,也无需在finding(z)外部调用Parsing,因为您不会将值存储在任何地方。

def Parsing(z):

    x= finding(z) # this is a different x that is assigned the 
                  # return value from the 'finding' method.
    qw=z.s[0:x] # I'm curious as to what is going on here.
    print (qw)
# take the x-value from function finding(z) and use it to split 

# finding(z)  -- not needed 
Parsing(z)
于 2012-10-30T05:44:05.460 回答