用十種編程語言開發(fā)計算器應(yīng)用-第三篇-Python

用十種編程語言開發(fā)計算器應(yīng)用

  1. C語言
  2. C#(windows桌面軟件)
  3. Swift (ios應(yīng)用)
  4. python
  5. Dart(Flutter應(yīng)用谷炸,跨平臺北专,適用安卓、ios旬陡、mac拓颓、windows、web)
  6. Java(安卓App)
  7. Kotlin (安卓App)
  8. Js+Html+Vue(H5應(yīng)用)
  9. 微信小程序
  10. 抖音小程序
image

Python語言版

請?zhí)砑訄D片描述

開發(fā)工具

Pycharm


image

工程截圖

image

關(guān)鍵代碼文件

  • calculator.py 繪制計算器界面及邏輯處理程序
import tkinter as tk


def printout(result1, result2, frm):
    label1 = tk.Label(frm, font=('微軟雅黑', 20), bg='#0a0a0a', bd='9', fg='#ffffff', anchor='se', textvariable=result1)
    label1.place(relx=1, rely=0.5, relwidth=1, relheight=0.5, anchor='se')
    label2 = tk.Label(frm, font=('微軟雅黑', 20), bg='#0a0a0a', bd='9', fg='#ffffff', anchor='se', textvariable=result2)
    label2.place(relx=1, rely=1, relwidth=1, relheight=0.5, anchor='se')


def layout(root, result1, result2):
    frm1 = tk.Frame(root)
    frm1.config(width=320, height=100, relief='solid')

    printout(result1, result2, frm1)
    frm1.grid(row=0, column=0)
    frm1.grid_propagate(0)
    frm1.update()

    frm2 = tk.Frame(root)
    frm2.config(width=320, height=400, bg='#dfe9f4', relief='solid')
    layout_button(frm2)

    frm2.grid(row=1, column=0)
    frm2.grid_propagate(0)


def layout_button(frm):
    btn7 = tk.Button(frm, text='7', font=('微軟雅黑', 20), bg='#f1f5fa', command=lambda: press_num('7'))
    btn7.place(relx=0.125, rely=0.125, relwidth=0.23, relheight=0.23, anchor='center')
    btn8 = tk.Button(frm, text='8', font=('微軟雅黑', 20), bg='#f1f5fa', command=lambda: press_num('8'))
    btn8.place(relx=0.375, rely=0.125, relwidth=0.23, relheight=0.23, anchor='center')
    btn9 = tk.Button(frm, text='9', font=('微軟雅黑', 20), bg='#f1f5fa', command=lambda: press_num('9'))
    btn9.place(relx=0.625, rely=0.125, relwidth=0.23, relheight=0.23, anchor='center')
    btn4 = tk.Button(frm, text='4', font=('微軟雅黑', 20), bg='#f1f5fa', command=lambda: press_num('4'))
    btn4.place(relx=0.125, rely=0.375, relwidth=0.23, relheight=0.23, anchor='center')
    btn5 = tk.Button(frm, text='5', font=('微軟雅黑', 20), bg='#f1f5fa', command=lambda: press_num('5'))
    btn5.place(relx=0.375, rely=0.375, relwidth=0.23, relheight=0.23, anchor='center')
    btn6 = tk.Button(frm, text='6', font=('微軟雅黑', 20), bg='#f1f5fa', command=lambda: press_num('6'))
    btn6.place(relx=0.625, rely=0.375, relwidth=0.23, relheight=0.23, anchor='center')
    btn1 = tk.Button(frm, text='1', font=('微軟雅黑', 20), bg='#f1f5fa', command=lambda: press_num('1'))
    btn1.place(relx=0.125, rely=0.625, relwidth=0.23, relheight=0.23, anchor='center')
    btn2 = tk.Button(frm, text='2', font=('微軟雅黑', 20), bg='#f1f5fa', command=lambda: press_num('2'))
    btn2.place(relx=0.375, rely=0.625, relwidth=0.23, relheight=0.23, anchor='center')
    btn3 = tk.Button(frm, text='3', font=('微軟雅黑', 20), bg='#f1f5fa', command=lambda: press_num('3'))
    btn3.place(relx=0.625, rely=0.625, relwidth=0.23, relheight=0.23, anchor='center')
    btn10 = tk.Button(frm, text='0', font=('微軟雅黑', 20), bg='#f1f5fa', command=lambda: press_num('0'))
    btn10.place(relx=0.125, rely=0.875, relwidth=0.23, relheight=0.23, anchor='center')
    btn11 = tk.Button(frm, text='.', font=('微軟雅黑', 20), bg='#f1f5fa', command=lambda: press_num('.'))
    btn11.place(relx=0.375, rely=0.875, relwidth=0.23, relheight=0.23, anchor='center')

    btn12 = tk.Button(frm, text='=', font=('微軟雅黑', 20), bg='#f1f5fa', command=lambda: press_equal())
    btn12.place(relx=0.625, rely=0.875, relwidth=0.23, relheight=0.23, anchor='center')

    btn13 = tk.Button(frm, text='+', font=('微軟雅黑', 20), bg='#f1f5fa', command=lambda: press_compute('+'))
    btn13.place(relx=0.875, rely=0.125, relwidth=0.23, relheight=0.23, anchor='center')
    btn13 = tk.Button(frm, text='-', font=('微軟雅黑', 20), bg='#f1f5fa', command=lambda: press_compute('-'))
    btn13.place(relx=0.875, rely=0.375, relwidth=0.23, relheight=0.23, anchor='center')
    btn13 = tk.Button(frm, text='X', font=('微軟雅黑', 20), bg='#f1f5fa', command=lambda: press_compute('*'))
    btn13.place(relx=0.875, rely=0.625, relwidth=0.23, relheight=0.23, anchor='center')
    btn13 = tk.Button(frm, text='÷', font=('微軟雅黑', 20), bg='#f1f5fa', command=lambda: press_compute('/'))
    btn13.place(relx=0.875, rely=0.875, relwidth=0.23, relheight=0.23, anchor='center')


def press_num(num):
    global isintbtn  # 標(biāo)記按鈕按的數(shù)字描孟,默認(rèn)未按
    global isstrbtn  # 標(biāo)記按鈕按的符號驶睦,默認(rèn)未按
    global is_equal_last  # 標(biāo)記上一個按鍵
    global last_num  # 記錄上一個數(shù)字
    global list
    if isstrbtn == False:
        pass
    else:
        result2.set(0)
        isstrbtn = False  # 若上次按鍵為符號砰左,數(shù)字重新清零開始計數(shù)
    if is_equal_last == True:
        result2.set(0)  # 等號同理

    oldnum = result2.get()
    if oldnum == '0':
        result2.set(num)
        last_num = num
    else:
        newnum = oldnum + num
        result2.set(newnum)
        last_num = newnum  # 連續(xù)按數(shù)字,將數(shù)字連起來作為新的數(shù)字
    is_equal_last = False  # 標(biāo)記下上個按鍵已不是等號


def press_compute(sign):
    global isintbtn
    global isstrbtn
    global is_equal_last
    global last_cpt
    global list
    num = result2.get()
    list.append(num)  # 把數(shù)字記錄到列表中

    list.append(sign)
    isstrbtn = True  # 把符號記錄到列表中

    is_equal_last = False
    last_cpt = sign
    cur_out = ''.join(list)
    result1.set(cur_out)  # 上部分顯示板顯示之前輸入的數(shù)字


def press_equal():
    global isintbtn
    global isstrbtn
    global is_equal_last
    global last_num
    global list
    if is_equal_last == False:
        curnum = result2.get()
        list.append(curnum)
        computeStr = ''.join(list)
        endnum = eval(computeStr)  # 使用eval函數(shù)將list內(nèi)容計算出結(jié)果

        result2.set(endnum)
        result1.set(computeStr)  # 將計算結(jié)果和內(nèi)容顯示在顯示板上
        is_equal_last = True  # 標(biāo)記此時最后一個按鍵是等號
        list.clear()  # 清空list
    else:
        curnum = result2.get()  # 如果上次按鍵是等號场航,記錄上次的計算結(jié)果
        list.append(curnum)
        list.append(last_cpt)
        list.append(str(last_num))  # 將計算結(jié)果缠导、最后一次的符號、最后一個數(shù)字添加到list中
        # print(list)

        computeStr = ''.join(list)
        endnum = eval(computeStr)
        # print(computeStr)

        result2.set(endnum)
        result1.set(computeStr)
        is_equal_last = True
        list.clear()  # 按照新的list計算結(jié)果并顯示


root = tk.Tk()
root.title("計算器-花生皮編程")
root['bg'] = '#181818'
root.geometry("320x500")

isintbtn = False  # 確認(rèn)是否按下了計算符旗闽,默認(rèn)為未按下
isstrbtn = False
is_equal_last = False  # 確認(rèn)上一個按鍵是不是等號,便于處理連續(xù)按了等號的情況
last_num = []  # 上一個數(shù)字保存
last_cpt = ''  # 上一個計算符號保存蜜另,便與處理如果連續(xù)按了等號的情況
list = []  # 保存按下的數(shù)據(jù)和字符适室,一是用于最終結(jié)果計算,而是現(xiàn)實(shí)在上面現(xiàn)實(shí)板上
result1 = tk.StringVar()
result1.set('')  # 上面顯示板举瑰,默認(rèn)顯示空
result2 = tk.StringVar()
result2.set(0)  # 下面顯示板捣辆,默認(rèn)顯示0

layout(root, result1, result2)

root.mainloop()

完整源代碼

https://gitee.com/hspbc/calculators

image

系列文章

用十種編程語言開發(fā)計算器應(yīng)用-第一篇-C語言
用十種編程語言開發(fā)計算器應(yīng)用-第二篇-Java
用十種編程語言開發(fā)計算器應(yīng)用-第三篇-Python
用十種編程語言開發(fā)計算器應(yīng)用-第四篇-Kotlin
用十種編程語言開發(fā)計算器應(yīng)用-第五篇-Flutter
用十種編程語言開發(fā)計算器應(yīng)用-第六篇-iOS
用十種編程語言開發(fā)計算器應(yīng)用-第七篇-h5(Js+Html+Vue)
用十種編程語言開發(fā)計算器應(yīng)用-第八篇-微信小程序
用十種編程語言開發(fā)計算器應(yīng)用-第九篇-抖音小程序
用十種編程語言開發(fā)計算器應(yīng)用-第十篇-C#(Windows桌面軟件)

關(guān)于我

廈門大學(xué)計算機(jī)專業(yè)|華為八年高級工程師
十年軟件開發(fā)經(jīng)驗(yàn),5年編程培訓(xùn)教學(xué)經(jīng)驗(yàn)
目前從事編程教學(xué)此迅,軟件開發(fā)指導(dǎo)汽畴,軟件類畢業(yè)設(shè)計指導(dǎo)。
所有編程資料及開源項(xiàng)目見https://cxyxy.blog.csdn.net/article/details/120405881

最后編輯于
?著作權(quán)歸作者所有,轉(zhuǎn)載或內(nèi)容合作請聯(lián)系作者
  • 序言:七十年代末耸序,一起剝皮案震驚了整個濱河市忍些,隨后出現(xiàn)的幾起案子,更是在濱河造成了極大的恐慌坎怪,老刑警劉巖罢坝,帶你破解...
    沈念sama閱讀 218,284評論 6 506
  • 序言:濱河連續(xù)發(fā)生了三起死亡事件,死亡現(xiàn)場離奇詭異搅窿,居然都是意外死亡嘁酿,警方通過查閱死者的電腦和手機(jī),發(fā)現(xiàn)死者居然都...
    沈念sama閱讀 93,115評論 3 395
  • 文/潘曉璐 我一進(jìn)店門男应,熙熙樓的掌柜王于貴愁眉苦臉地迎上來闹司,“玉大人,你說我怎么就攤上這事沐飘∮巫” “怎么了?”我有些...
    開封第一講書人閱讀 164,614評論 0 354
  • 文/不壞的土叔 我叫張陵耐朴,是天一觀的道長众弓。 經(jīng)常有香客問我,道長隔箍,這世上最難降的妖魔是什么谓娃? 我笑而不...
    開封第一講書人閱讀 58,671評論 1 293
  • 正文 為了忘掉前任,我火速辦了婚禮蜒滩,結(jié)果婚禮上滨达,老公的妹妹穿的比我還像新娘奶稠。我一直安慰自己,他們只是感情好捡遍,可當(dāng)我...
    茶點(diǎn)故事閱讀 67,699評論 6 392
  • 文/花漫 我一把揭開白布锌订。 她就那樣靜靜地躺著,像睡著了一般画株。 火紅的嫁衣襯著肌膚如雪辆飘。 梳的紋絲不亂的頭發(fā)上,一...
    開封第一講書人閱讀 51,562評論 1 305
  • 那天谓传,我揣著相機(jī)與錄音蜈项,去河邊找鬼。 笑死续挟,一個胖子當(dāng)著我的面吹牛紧卒,可吹牛的內(nèi)容都是我干的。 我是一名探鬼主播诗祸,決...
    沈念sama閱讀 40,309評論 3 418
  • 文/蒼蘭香墨 我猛地睜開眼跑芳,長吁一口氣:“原來是場噩夢啊……” “哼!你這毒婦竟也來了直颅?” 一聲冷哼從身側(cè)響起博个,我...
    開封第一講書人閱讀 39,223評論 0 276
  • 序言:老撾萬榮一對情侶失蹤,失蹤者是張志新(化名)和其女友劉穎,沒想到半個月后,有當(dāng)?shù)厝嗽跇淞掷锇l(fā)現(xiàn)了一具尸體似扔,經(jīng)...
    沈念sama閱讀 45,668評論 1 314
  • 正文 獨(dú)居荒郊野嶺守林人離奇死亡宾舅,尸身上長有42處帶血的膿包…… 初始之章·張勛 以下內(nèi)容為張勛視角 年9月15日...
    茶點(diǎn)故事閱讀 37,859評論 3 336
  • 正文 我和宋清朗相戀三年,在試婚紗的時候發(fā)現(xiàn)自己被綠了。 大學(xué)時的朋友給我發(fā)了我未婚夫和他白月光在一起吃飯的照片。...
    茶點(diǎn)故事閱讀 39,981評論 1 348
  • 序言:一個原本活蹦亂跳的男人離奇死亡,死狀恐怖征堪,靈堂內(nèi)的尸體忽然破棺而出,到底是詐尸還是另有隱情关拒,我是刑警寧澤佃蚜,帶...
    沈念sama閱讀 35,705評論 5 347
  • 正文 年R本政府宣布,位于F島的核電站着绊,受9級特大地震影響谐算,放射性物質(zhì)發(fā)生泄漏。R本人自食惡果不足惜归露,卻給世界環(huán)境...
    茶點(diǎn)故事閱讀 41,310評論 3 330
  • 文/蒙蒙 一洲脂、第九天 我趴在偏房一處隱蔽的房頂上張望。 院中可真熱鬧剧包,春花似錦恐锦、人聲如沸往果。這莊子的主人今日做“春日...
    開封第一講書人閱讀 31,904評論 0 22
  • 文/蒼蘭香墨 我抬頭看了看天上的太陽陕贮。三九已至,卻和暖如春潘飘,著一層夾襖步出監(jiān)牢的瞬間肮之,已是汗流浹背。 一陣腳步聲響...
    開封第一講書人閱讀 33,023評論 1 270
  • 我被黑心中介騙來泰國打工卜录, 沒想到剛下飛機(jī)就差點(diǎn)兒被人妖公主榨干…… 1. 我叫王不留戈擒,地道東北人。 一個月前我還...
    沈念sama閱讀 48,146評論 3 370
  • 正文 我出身青樓暴凑,卻偏偏與公主長得像峦甩,于是被迫代替她去往敵國和親赘来。 傳聞我的和親對象是個殘疾皇子现喳,可洞房花燭夜當(dāng)晚...
    茶點(diǎn)故事閱讀 44,933評論 2 355

推薦閱讀更多精彩內(nèi)容