python學習之路 實現簡單的電腦功能。

來源:互聯網
上載者:User

標籤:new   arch   print   函數   查看   split   color   一個   +=   

計算機的主要思維是:

1、對輸入的運算式去除其空格

2、判斷使用者輸入的運算式中的括弧是否合法

3、每次找到這個運算式只有一對括弧的運算式(就是這找到的運算式內部沒有括弧)

4、對找到的只有一對括弧中的運算式進行先乘除再加減的運算,把計算的結果替換到找到的運算式中

5、直到運算式中沒有括弧為止。

6、我們在調用上面的有一個先計算乘除在計算加減的函數。最後得到結果。

具體的代碼如下:

#!/usr/bin/env python# -*-coding:utf-8-*-import re#  查看錶達式的括弧是否合法def check_bracket(expression):    tmp = []    for i in expression:        if i == ‘(‘:            tmp.append(i)        elif i == ‘)‘:            if len(tmp)>0:                tmp.pop()            else:                return False    if len(tmp)>0:        return False    else:        return True# 去掉運算式中多餘相連的符號def clear_operator(expression):    expression = expression.replace(‘--‘, ‘+‘)    expression = expression.replace(‘+-‘, ‘-‘)    return expression# 計算乘除def multiply_divide(exp_son):    if ‘*‘ in exp_son:        left, right = exp_son.split(‘*‘)        return str(float(left)*float(right))    else:        left, right = exp_son.split(‘/‘)        return str(float(left) / float(right))# 4、沒有括弧的運算式先計算乘除在把只有加減的公式分割成一個列表相加列表中的一個個元素def cal_no_bracket(expression):    # 先去除只有一對括弧的運算式的括弧    # 9-2*-5/3 + 7 /3*99/4*2998 +10 * 568/14    # 先乘除在加減    while True:        ret = re.search(‘\d+\.?\d*[*/]-?\d+\.?\d*‘, expression)        if ret:            exp_son = ret.group()            ret = multiply_divide(exp_son)  # 把公式匹配到的乘除傳入這個Function Compute其值            expression = expression.replace(exp_son, ret)            expression = clear_operator(expression)        else:            # 這裡面只有加減我們把這裡面所有的值用正則把除了+所有的數找出來[-3,34,3.2345]相當於以+做分隔字元            # 我們只要把裡面所有的元素相加就行了            ret = re.finditer(‘-?\d+\.?\d*‘,expression)            sum = 0            for i in ret:                sum += float(i.group())            return str(sum)# 3、先去掉所有的括弧在計算其結果def remove_bracket(expression):    while True:        # 先去掉所有的括弧        express_a_bracket = re.search(‘\([^()]+\)‘,expression)        if express_a_bracket:            # 處理這個只有一對括弧的運算式            express_a_bracket = express_a_bracket.group()            ret = cal_no_bracket(express_a_bracket.strip(‘()‘))  # 把括弧裡的運算式進行運算            expression = expression.replace(express_a_bracket, ret)            expression = clear_operator(expression)        else:            new_expression = cal_no_bracket(expression)            return new_expressionif __name__ == ‘__main__‘:    # 1、去除使用者輸入的運算式去除空格    # 2、這裡我們用棧的方式確認使用者輸入的括弧對是否合法    expression_input = input(‘>>>:‘).replace(‘ ‘, ‘‘)    if check_bracket(expression_input):  # 如果運算式的括弧合法那就執行下面的        ret = remove_bracket(expression_input)        print(eval(expression_input))        print(ret)    else:        print(‘運算式括弧不合法‘)

 

python學習之路 實現簡單的電腦功能。

聯繫我們

該頁面正文內容均來源於網絡整理,並不代表阿里雲官方的觀點,該頁面所提到的產品和服務也與阿里云無關,如果該頁面內容對您造成了困擾,歡迎寫郵件給我們,收到郵件我們將在5個工作日內處理。

如果您發現本社區中有涉嫌抄襲的內容,歡迎發送郵件至: info-contact@alibabacloud.com 進行舉報並提供相關證據,工作人員會在 5 個工作天內聯絡您,一經查實,本站將立刻刪除涉嫌侵權內容。

A Free Trial That Lets You Build Big!

Start building with 50+ products and up to 12 months usage for Elastic Compute Service

  • Sales Support

    1 on 1 presale consultation

  • After-Sales Support

    24/7 Technical Support 6 Free Tickets per Quarter Faster Response

  • Alibaba Cloud offers highly flexible support services tailored to meet your exact needs.