計算器製作

来源:https://www.cnblogs.com/saber9/archive/2019/05/06/10822826.html
-Advertisement-
Play Games

import re def chen_chu(str): res = re.search("[^()]+",str) res_l = re.split("[*/]",res.group()) res_f_l = re.findall("[*/]",res.group()) n = None for ... ...


import re
def chen_chu(str):
    res = re.search("[^()]+",str)
    res_l = re.split("[*/]",res.group())
    res_f_l = re.findall("[*/]",res.group())
    n = None
    for i in range(len(res_l)):
        if n:
            if res_f_l[i-1] == "*":
                n *= int(res_l[i])
            elif res_f_l[i-1] == "/":
                n /= int(res_l[i])
        else:
            n = int(res_l[i])
    return int(n)


def add_sub(str):
    res = re.search("[^()]+",str)
    res_l = re.split("[-+]",res.group())
    res_f_l = re.findall("[-+]",res.group())
    if re.match("[-+]",res.group()):
        if res_f_l[0] == "-":
            res_l[1] = -int(res_l[1])
        res_l = res_l[1:]
        res_f_l = res_f_l[1:]
        if len(res_f_l) == 0:
            return res_l[0]
    n = None
    for i in range(len(res_l)):
        if n:
            if res_f_l[i-1] == "+":
                n += int(res_l[i])
            elif res_f_l[i-1] == "-":
                n -= int(res_l[i])
        else:
            n = int(res_l[i])
    return int(n)


def ts(ret):
    new_ret = []
    for index,item in enumerate(ret):
        if item.endswith("*") or item.endswith("/"):
            new_ret.append("%s-%s" %(ret[index],ret[index+1]))
        elif re.search("[*/]",ret[index]):
            new_ret.append(ret[index])
    return new_ret


if __name__ == "__main__":
    # a = "2+(3*(2+2-6)+5*3)"
    a = input("清輸入計算公式:")
    a = a.replace(" ","")
    count = 2
    while True and count > 0:
        ret = re.search(r"\([^()]+\)",a)
        if ret:
            ret_v = ret.group()
        else:
            count -= 1
            ret_v = a
        if "+" in ret_v or "-" in ret_v:
            if "*" in ret_v or "/" in ret_v:
                res = re.findall("[^()]+",ret_v)
                res_l = re.split(r"[-+]",res[0])
                res_l = ts(res_l)
                for item in res_l:
                    res_l_v = chen_chu(item)
                    a = a.replace(item,str(res_l_v))
                    a =a.replace("+-","-")
                    a = a.replace("--","+")
            else:
                res_l_v = add_sub(ret_v)
                a = a.replace(ret_v, str(res_l_v))
                a = a.replace("+-", "-")
                a = a.replace("--", "+")
        else:
            if "*" in ret_v or "/" in ret_v:
                res_l_v = chen_chu(ret_v)
                a = a.replace(ret_v, str(res_l_v))
                a = a.replace("+-", "-")
                a = a.replace("--", "+")
        print(a)


 


您的分享是我們最大的動力!

-Advertisement-
Play Games
更多相關文章
  • Python編程實現對視頻文件進行剪切的功能。截取指定長度的視頻並保存,運行後首先選擇要裁剪的視頻,然後輸入開始時間點和停止時間點即可。將剪切後的視頻保存為output.avi文件 Python編程實現對視頻文件進行剪切的功能。截取指定長度的視頻並保存,運行後首先選擇要裁剪的視頻,然後輸入開始時間點 ...
  • 第一次編輯 2019-05-07 01:09:39 垃圾回收的對象 程式中的不可用對象(不存活的對象,沒有任何引用),或者無用的變數信息等,在程式中長期存在會逐漸占用較多的記憶體空間,導致沒有足夠的空間分配給新生成的對象等. 判斷哪些是需要回收的對象 早期jdk使用引用計數法,計數每個對象的引用次數, ...
  • 什麼是原子操作? 原子操作和資料庫的ACID有啥關係? AtomicInteger是怎麼實現原子操作的? AtomicInteger是有什麼缺點? ...
  • Python基礎之單例模式,內容包括 單例設計模式介紹,__new__方法,Python中的單例。其中,單例設計模式 包括 設計模式,單例模式;__new__方法 包括 __new__作用,重寫__new__方法註意,重寫new方法示例;Python中的單例 包括 單例,單例設計模式思路分析,用ne... ...
  • Python面向對象之類屬性類方法靜態方法,內容包括 類的結構,類屬性和實例屬性,類方法和靜態方法,方法綜合案例等。其中,類的結構 包括 實例,類是一個特殊的對象;類屬性和實例屬性 包括 類屬性的定義及使用,屬性的查找機制-向上查找;類方法和靜態方法 包括 類方法,靜態方法;方法綜合案例 僅包含 游... ...
  • 通過 python爬蟲入門:什麼是爬蟲,怎麼玩爬蟲? 我們知道了什麼是爬蟲 也知道了爬蟲的具體流程 那麼在我們要對某個網站進行爬取的時候 要對其數據進行分析 就要知道應該怎麼請求 就要知道獲取的數據是什麼樣的 所以我們要學會怎麼抓咪咪! 哦,不對。 我們要學會怎麼數據抓包 雖然小饅頭也是包的一種 o ...
  • 因為目前java非常火,應用非常的廣泛,是目前最火的行業之一,競爭很大,工資很高,未來發展也極好。首先告訴你的是,零基礎學習開始學習java肯定難,java的專業程度本身就不簡單,學習這事本來就是一件非常煎熬的事情,人都不願意學習,可是沒辦法,為了生存掌握一個技能,你必須學。 提醒大家幾點 一:盲目 ...
  • 目錄 1、python介紹 現在企業大量使用的有python2跟python3 安裝python解釋器,目前linux 、mac系統自帶有了,windowss系統中 打開官網 https://www.python.org/downloads/windows/ 分別有版本2和版本3 選擇自己電腦的操作 ...
一周排行
    -Advertisement-
    Play Games
  • 移動開發(一):使用.NET MAUI開發第一個安卓APP 對於工作多年的C#程式員來說,近來想嘗試開發一款安卓APP,考慮了很久最終選擇使用.NET MAUI這個微軟官方的框架來嘗試體驗開發安卓APP,畢竟是使用Visual Studio開發工具,使用起來也比較的順手,結合微軟官方的教程進行了安卓 ...
  • 前言 QuestPDF 是一個開源 .NET 庫,用於生成 PDF 文檔。使用了C# Fluent API方式可簡化開發、減少錯誤並提高工作效率。利用它可以輕鬆生成 PDF 報告、發票、導出文件等。 項目介紹 QuestPDF 是一個革命性的開源 .NET 庫,它徹底改變了我們生成 PDF 文檔的方 ...
  • 項目地址 項目後端地址: https://github.com/ZyPLJ/ZYTteeHole 項目前端頁面地址: ZyPLJ/TreeHoleVue (github.com) https://github.com/ZyPLJ/TreeHoleVue 目前項目測試訪問地址: http://tree ...
  • 話不多說,直接開乾 一.下載 1.官方鏈接下載: https://www.microsoft.com/zh-cn/sql-server/sql-server-downloads 2.在下載目錄中找到下麵這個小的安裝包 SQL2022-SSEI-Dev.exe,運行開始下載SQL server; 二. ...
  • 前言 隨著物聯網(IoT)技術的迅猛發展,MQTT(消息隊列遙測傳輸)協議憑藉其輕量級和高效性,已成為眾多物聯網應用的首選通信標準。 MQTTnet 作為一個高性能的 .NET 開源庫,為 .NET 平臺上的 MQTT 客戶端與伺服器開發提供了強大的支持。 本文將全面介紹 MQTTnet 的核心功能 ...
  • Serilog支持多種接收器用於日誌存儲,增強器用於添加屬性,LogContext管理動態屬性,支持多種輸出格式包括純文本、JSON及ExpressionTemplate。還提供了自定義格式化選項,適用於不同需求。 ...
  • 目錄簡介獲取 HTML 文檔解析 HTML 文檔測試參考文章 簡介 動態內容網站使用 JavaScript 腳本動態檢索和渲染數據,爬取信息時需要模擬瀏覽器行為,否則獲取到的源碼基本是空的。 本文使用的爬取步驟如下: 使用 Selenium 獲取渲染後的 HTML 文檔 使用 HtmlAgility ...
  • 1.前言 什麼是熱更新 游戲或者軟體更新時,無需重新下載客戶端進行安裝,而是在應用程式啟動的情況下,在內部進行資源或者代碼更新 Unity目前常用熱更新解決方案 HybridCLR,Xlua,ILRuntime等 Unity目前常用資源管理解決方案 AssetBundles,Addressable, ...
  • 本文章主要是在C# ASP.NET Core Web API框架實現向手機發送驗證碼簡訊功能。這裡我選擇是一個互億無線簡訊驗證碼平臺,其實像阿裡雲,騰訊雲上面也可以。 首先我們先去 互億無線 https://www.ihuyi.com/api/sms.html 去註冊一個賬號 註冊完成賬號後,它會送 ...
  • 通過以下方式可以高效,並保證數據同步的可靠性 1.API設計 使用RESTful設計,確保API端點明確,並使用適當的HTTP方法(如POST用於創建,PUT用於更新)。 設計清晰的請求和響應模型,以確保客戶端能夠理解預期格式。 2.數據驗證 在伺服器端進行嚴格的數據驗證,確保接收到的數據符合預期格 ...