91超碰碰碰碰久久久久久综合_超碰av人澡人澡人澡人澡人掠_国产黄大片在线观看画质优化_txt小说免费全本

溫馨提示×

溫馨提示×

您好,登錄后才能下訂單哦!

密碼登錄×
登錄注冊×
其他方式登錄
點擊 登錄注冊 即表示同意《億速云用戶服務條款》

python實現逆波蘭計算表達式的代碼

發布時間:2020-06-25 10:58:43 來源:網絡 閱讀:277 作者:aolinhuafu 欄目:編程語言

如下資料是關于python實現逆波蘭計算表達式的代碼。

symbol_priority = {}
symbol_priority[0] = ['#']
symbol_priority[1] = ['(']
symbol_priority[2] = ['+', '-']
symbol_priority[4] = [')']

def comparePriority(symbol, RPN_stack, symbol_stack):
    '''Compare priority between two symbols'''

    global symbol_priority
    if len(symbol_stack) > 0:
        symbol_pop = symbol_stack.pop()
    else:
        return

    for list in symbol_priority.values():
        if (symbol in list) and (symbol_pop in list):
            '''same priority'''
            symbol_stack.append(symbol_pop)
            symbol_stack.append(symbol)
            return
        elif symbol in list:
            '''symbol is smaller'''
            RPN_stack.append(symbol_pop)
            #recusion call
            comparePriority(symbol, RPN_stack, symbol_stack)
            return
        elif symbol_pop in list:
            '''symbol is bigger'''
            symbol_stack.append(symbol_pop)
            symbol_stack.append(symbol)
            return
        else:
            continue

        symbol_stack.append(symbol_pop)
        return

def scanEveryone(input_string, RPN_stack, symbol_stack):
    for ch in input_string:
        if ch.isdigit():
            RPN_stack.append(ch)
        else:
            if len(symbol_stack) > 0:
                if ch == '(':
                    symbol_stack.append(ch)
                elif ch == ')':
                    while True:
                        symbol_pop = symbol_stack.pop()
                        if symbol_pop == '(':
                            break
                        else:
                            RPN_stack.append(symbol_pop)
                else:
                    comparePriority(ch, RPN_stack, symbol_stack)
            else:
                symbol_stack.append(ch)

def scanInput(RPN_stack, symbol_stack):
    input_string = raw_input()
    input_string += '#'
    scanEveryone(input_string, RPN_stack, symbol_stack)

def calRPN(RPN_stack):
    value_stack = []
    RPN_stack.append('#')

    for value in RPN_stack:
        if value == '#':
            return value_stack.pop()
            break
        if value.isdigit():
            value_stack.append(value)
        else:
            right_value = value_stack.pop()
            left_value = value_stack.pop()
            cal_string = left_value + value + right_value
            value_stack.append(str(eval(cal_string)))

def main():
    RPN_stack = []
    symbol_stack = []

    scanInput(RPN_stack, symbol_stack)
    print calRPN(RPN_stack)

if __name__ == '__main__':
    main()

calRPN.py

symbol_priority = {}
symbol_priority[0] = ['#']
symbol_priority[1] = ['(']
symbol_priority[2] = ['+', '-']
symbol_priority[4] = [')']

def comparePriority(symbol, RPN_stack, symbol_stack):
    '''Compare priority between two symbols'''

    global symbol_priority
    if len(symbol_stack) > 0:
        symbol_pop = symbol_stack.pop()
    else:
        return

    for list in symbol_priority.values():
        if (symbol in list) and (symbol_pop in list):
            '''same priority'''
            symbol_stack.append(symbol_pop)
            symbol_stack.append(symbol)
            return
        elif symbol in list:
            '''symbol is smaller'''
            RPN_stack.append(symbol_pop)
            #recusion call
            comparePriority(symbol, RPN_stack, symbol_stack)
            return
        elif symbol_pop in list:
            '''symbol is bigger'''
            symbol_stack.append(symbol_pop)
            symbol_stack.append(symbol)
            return
        else:
            continue

        symbol_stack.append(symbol_pop)
        return

def scanEveryone(input_string, RPN_stack, symbol_stack):
    for ch in input_string:
        if ch.isdigit():
            RPN_stack.append(ch)
        else:
            if len(symbol_stack) > 0:
                if ch == '(':
                    symbol_stack.append(ch)
                elif ch == ')':
                    while True:
                        symbol_pop = symbol_stack.pop()
                        if symbol_pop == '(':
                            break
                        else:
                            RPN_stack.append(symbol_pop)
                else:
                    comparePriority(ch, RPN_stack, symbol_stack)
            else:
                symbol_stack.append(ch)

def scanInput(RPN_stack, symbol_stack):
    input_string = raw_input()
    input_string += '#'
    scanEveryone(input_string, RPN_stack, symbol_stack)

def calRPN(RPN_stack):
    value_stack = []
    RPN_stack.append('#')

    for value in RPN_stack:
        if value == '#':
            return value_stack.pop()
            break
        if value.isdigit():
            value_stack.append(value)
        else:
            right_value = value_stack.pop()
            left_value = value_stack.pop()
            cal_string = left_value + value + right_value
            value_stack.append(str(eval(cal_string)))

def main():
    RPN_stack = []
    symbol_stack = []

    scanInput(RPN_stack, symbol_stack)
    print calRPN(RPN_stack)

if __name__ == '__main__':
    main()
向AI問一下細節

免責聲明:本站發布的內容(圖片、視頻和文字)以原創、轉載和分享為主,文章觀點不代表本網站立場,如果涉及侵權請聯系站長郵箱:is@yisu.com進行舉報,并提供相關證據,一經查實,將立刻刪除涉嫌侵權內容。

AI

兰西县| 金平| 仪陇县| 云霄县| 汤阴县| 舟曲县| 综艺| 甘谷县| 邵武市| 邯郸市| 北票市| 旬邑县| 桐柏县| 元朗区| 锡林郭勒盟| 隆德县| 交城县| 利川市| 嘉黎县| 张家口市| 万载县| 北碚区| 鄢陵县| 越西县| 建水县| 曲水县| 扶风县| 西畴县| 万盛区| 巴东县| 句容市| 根河市| 六盘水市| 大理市| 信丰县| 双辽市| 固原市| 武汉市| 邢台县| 博白县| 伊春市|