一区二区三区日韩精品-日韩经典一区二区三区-五月激情综合丁香婷婷-欧美精品中文字幕专区

分享

用Python開發(fā)實用程序 – 計算器

 文炳春秋 2020-04-02

一段時間前,自己制作了一個庫 “sui-math”。這其實是math的翻版。做完后,python既然可以輕易的完成任何的數(shù)學(xué)計算,何不用python開發(fā)一個小程序?qū)iT用以計算呢?

現(xiàn)在我們越來越依賴于計算器,很多復(fù)雜的計算都離不開它。我們使用過各式各樣的計算器,無論是電腦自帶的,還是網(wǎng)也上的計算器,卻都沒有自己動手編寫屬于自己計算器。今天就讓我們走進(jìn)計算器的世界,用python來編寫一個可以用的計算器。

PS:很多人在學(xué)習(xí)Python的過程中,往往因為遇問題解決不了或者沒好的教程從而導(dǎo)致自己放棄,為此我整理啦從基礎(chǔ)的python腳本到web開發(fā)、爬蟲、django、數(shù)據(jù)挖掘等【PDF等】需要的可以進(jìn)Python全棧開發(fā)交流.裙 :一久武其而而流一思(數(shù)字的諧音)轉(zhuǎn)換下可以找到了,里面有最新Python教程項目可拿,不懂的問題有老司機(jī)解決哦,一起相互監(jiān)督共同進(jìn)步

廢話不多說,來看看

編寫計算器:

效果圖:

用戶可以通過鼠標(biāo)或鍵盤來輸入或刪除數(shù)字或符號,按下等號便可計算。

本教程借助python的 pygame 庫來實現(xiàn)程序。當(dāng)然,看完本教程后,你還可以通過利用,pygame 來這制作小游戲。所以下面稍稍介紹一下pygame及其安裝。

安裝:

pip install -U pygame

計算器的關(guān)鍵邏輯:

其實邏輯就是不斷地獲取用戶的操作,直到用戶按下quit鍵(關(guān)閉)。這個不斷獲取操作,并不斷的操作做出反應(yīng)。這個過程叫做:事件處理器。

那怎么做出一個“事件處理器”呢?其實,就是一個大大的 “while True:” 把從啟動到結(jié)束,對用戶所的操作做出的反應(yīng)給包起來。這讀起來有點(diǎn)繞口,等會會有詳細(xì)的代碼。

如何計算:

計算對于有些其他的語言來說,計算是個大大的問題。但python不同,它有個特殊的內(nèi)置函數(shù),叫做eval。這個只有四個字母的函數(shù),解決了計算器的運(yùn)算。

打個比方:現(xiàn)在已經(jīng)可以獲取用戶所作出的操作,比如說按下符號,或者是數(shù)字。但是,怎么知道用戶會在按下等號前,按下多少個符號和數(shù)字呢?用戶有可能按1個數(shù)字,也有可能按一百個數(shù)字,可能是一個符號,可能是好幾個符號。

因此,不妨設(shè)定一個變量,一個空的字串符。

1. num = ""

每當(dāng)用戶按下一個數(shù)字或者一個符號,就在這個字串符里增加這個數(shù)字和符號。每次按下這個字串符后,就在屏幕里顯示這個字串符。舉個最簡單的例子:

> 1. num += str(1)

> 2. word = t.render(num,True,(0,0,0),(225,225,225))

> 3. screen.blit(word, (XXX,XXX)) #XXX代表位置

> 4. pygame.display.update() #更新屏幕

當(dāng)用戶按下 ”1” 的時候,num就會增加字串符1。第2,3行實現(xiàn)了在屏幕上顯示這個字串符。(會在后面詳細(xì)解釋)再將屏幕 “更新”。(這行是必須寫的,不然屏幕不會顯示)

當(dāng)用戶按下等號的,字串符就停止增加,開始計算。Eval專門用來計算字串符的。當(dāng)計算后,將計算好的數(shù)字顯示出來,最后將字串符清零。代碼:

1. a = str(eval(num)) #計算字串符

2. word = t.render(a,True,(0,0,0),(225,225,225))

3. screen.blit(word,p)

4. num = "" #字串符清空

5. pygame.display.update()

圖片的鼠標(biāo)處理:

一個簡易的計算器原理已經(jīng)可以做出來了,但是要讓用戶直觀的看到按鈕,比如按鍵,就需要導(dǎo)入圖片了

Pygame的圖片可以使用.png的格式,可以自己畫,也可以從網(wǎng)上搜。我就是自己用畫圖板畫的:

(未經(jīng)允許,禁止盜取)

Pygame需要在程序開始前先導(dǎo)入,代碼如下:

1. XXX = pygame.image.load("XXX/XXX.png")

獲取用戶是否按下這個按鍵需要就是一個if語句,代碼如下。

1. while True:

2. one = pygame.image.load("E://XXX/py1.png")

3. ···

4. if event.type==pygame.MOUSEBUTTONDOWN:

5. x, y = pygame.mouse.get_pos()

6. if XXX <= x <= XXX and XXX <= y<= XXX: #1的位置

7. num += str(1)

8. word = t.render(num,True,(0,0,0),(225,225,225))

9. screen.blit(word,p)

10. pygame.display.update()

拿“1”打個比方。第五行的 “x”和“y” 是獲取用戶鼠標(biāo)的位置。

在第六行,前兩個XXX是定位圖片的x軸,后兩個XXX是定位圖片y軸。其實,你只需定位第一個和第三個位置即可。每張圖片都有寬,長。比如你要對當(dāng)用戶按下一個長寬都是100的圖片,同時,要將這個代碼定位在,(0,0)的位置,看代碼:

1. while True:

2. ···

3. if event.type==pygame.MOUSEBUTTONDOWN:

4. x, y = pygame.mouse.get_pos()

5. if 0 <= x <= 100 and 0 <= y<= 100:

6. ···

對于一些不知道怎樣得知圖片的長寬的小白,底下有張圖片,

鍵盤處理:

先看代碼:

1. while True:

2. ···

3. if event.type == KEYDOWN:

4. if event.key == K_1 or event.key == K_KP1: #1

5. num += str(1)

6. word = t.render(num,True,(0,0,0),(225,225,225))

7. screen.blit(word,p)

8. pygame.display.update()

pygame給每一個鍵盤都命名了,比如說,1就是 “K_1”,小鍵盤1就是 “K_KP1”。也就是說,當(dāng)用戶按下K_1(數(shù)字鍵1)這個按鍵的時候,做出反應(yīng)。

若是想要pygame的鍵盤對印表,請到https://github.com/duoduo666/jisuanba_pygame_jisuanji

這個地址。(也是我的github)。里面也有完整的代碼

Pygame初始化

先配合著注釋閱讀代碼。

1. import sys

2. import pygame

3. from pygame.locals import * #pygame里有許多像pygame.XXX.YYY的形式

4.

5. def calculater(): #calculater僅僅是我自己的定義

6. pygame.init() #初始化pygame

7. screen_size = width,height = XXXX, XXXX #這個是定義屏幕大小,根據(jù)自己電腦做出判斷

8. screen = pygame.display.set_mode(screen_size)

9. pygame.display.set_caption("計算器") #命名

10. ··· #此處放方便自己的初始變量

11. c = (255,255,255)

12. #開始的顏色

13. screen.fill(c)

14. #一開始顯示的東西,比如按鍵,有空還可以自己畫個圖標(biāo),等等

15. screen.blit(X,(XXX,XXX))

16. #這句話很重要,表示顯示,沒有這句話,不會顯示的

17. pygame.display.flip()

18. while True:

19. #退出處理(當(dāng)用戶按退出鍵處理)

20. for event in pygame.event.get():

21. if event.type == QUIT:

22. pygame.quit()

23. exit()

24. ······ #想寫就寫,呵呵

先導(dǎo)入pygame 和 sys兩個庫。接著是 “pygame.init“ 這起到了初始化的作用。根據(jù)自己的電腦,定義計算機(jī)的長和寬。

Pygame的顏色是根據(jù)紅黃藍(lán)三色控制的,每一級最高為255,最低為0。比如(225,225,225)就是白色,(0,0,0)是黑色。

pygame.blit 是 pygame 的顯示圖片,文字的方法。接下來的退出處理其實就是一個事件處理器,不斷地獲取用戶的操作,并對用戶的操作作出反應(yīng)。

Pygame文字:

做什么也不能沒有字,比若說,顯示就需要顯示數(shù)字。先看代碼

1. t = pygame.font.SysFont("arial",32)

2.

3. ··· #想寫就寫,任性

4.

5. num = "XXX" #想寫就寫,任性

6. word = t.render(num,True,(0,0,0),(225,225,225))

7. screen.blit(word,(XXX,XXX)) #XXX代表位置

首先,需要確認(rèn)字體,所有的電腦都會帶有字體,可以在 Font 文件夾里找到,這里就不再多說。

在第六行,這就是確認(rèn)文字的顏色和底色。(0,0,0)代表著顏色,這里是黑色,(225,225,225)代表底色,這里是黑色。最后在(xxx,xxx)的位置顯示出來。

有小白會跳出來問,第六行那個True改成False會怎么樣呢。放心,不會發(fā)生什么事。都不會給你顯示了。

Pygame顯示圖片:

說了一堆,寫出程序后,最多顯示出一個白色的屏幕,按鍵顯示不出怎么行呢?

Pygame有個函數(shù) blit. 由于顯示其他的內(nèi)容,剛講了文字,那也要用到blit函數(shù)?,F(xiàn)在來講圖片的顯示

Pygame所有需要用的圖片都需要先導(dǎo)入,這在前面已經(jīng)詳細(xì)講過,這里就不再多說。代碼如下:

1. ad = ("E://XXX/XXX/") #位置

2. XXX = pygame.image.load(ad + "XXX.png") #導(dǎo)入圖片

3. ···

4.

5.

6. def pscreen():

7. screen.fill(225,225,225)

8. screen.blit(XXX,(300,300)) #位置

9. ···

當(dāng)然,不怕麻煩的可以這樣寫:

1. ad = ("E://XXX/XXX/") #位置

2. ···

3.

4.

5. def pscreen():

6. screen.fill(225,225,225)

7. screen.blit(pygame.image.load(ad + "XXX.png"),(300,300)) #位置

完整代碼:

講完了么?一些小白覺得看這篇文章太累了,沒有完整的代碼。那建議去

https://github.com/duoduo666/jisuanba_pygame_jisuanji/blob/master/%E4%BB%A3%E7%A0%81.py

看看完整的代碼(可以直接拿來用)

結(jié)語—很多人在學(xué)習(xí)Python的過程中,往往因為遇問題解決不了或者沒好的教程從而導(dǎo)致自己放棄,為此我整理啦從基礎(chǔ)的python腳本到web開發(fā)、爬蟲、django、數(shù)據(jù)挖掘等【PDF等】需要的可以進(jìn)Python全棧開發(fā)交流.裙 :一久武其而而流一思(數(shù)字的諧音)轉(zhuǎn)換下可以找到了,里面有最新Python教程項目可拿,不懂的問題有老司機(jī)解決哦,一起相互監(jiān)督共同進(jìn)步

本文的文字及圖片來源于網(wǎng)絡(luò)加上自己的想法,僅供學(xué)習(xí)、交流使用,不具有任何商業(yè)用途,版權(quán)歸原作者所有,如有問題請及時聯(lián)系我們以作處理。

    本站是提供個人知識管理的網(wǎng)絡(luò)存儲空間,所有內(nèi)容均由用戶發(fā)布,不代表本站觀點(diǎn)。請注意甄別內(nèi)容中的聯(lián)系方式、誘導(dǎo)購買等信息,謹(jǐn)防詐騙。如發(fā)現(xiàn)有害或侵權(quán)內(nèi)容,請點(diǎn)擊一鍵舉報。
    轉(zhuǎn)藏 分享 獻(xiàn)花(0

    0條評論

    發(fā)表

    請遵守用戶 評論公約

    類似文章 更多

    久久国产精品热爱视频| 精品老司机视频在线观看| 少妇激情在线免费观看| 日韩人妻有码一区二区| 日本精品视频一二三区| 日韩特级黄片免费观看| 精品丝袜一区二区三区性色| 亚洲内射人妻一区二区| 好吊妞视频只有这里有精品| 亚洲精品国产主播一区| 亚洲一区二区三区一区| 99久只有精品免费视频播放| 国产欧美亚洲精品自拍| 老司机精品视频免费入口| 亚洲一区二区精品福利| 日本女优一色一伦一区二区三区| 中文字幕中文字幕在线十八区| 日韩不卡一区二区视频| 日韩不卡一区二区视频| 欧美一级不卡视频在线观看| 色狠狠一区二区三区香蕉蜜桃| 国产真人无遮挡免费视频一区| 国产精品亚洲综合色区韩国| 欧美日韩中国性生活视频| 国产亚洲精品俞拍视频福利区| 国产性情片一区二区三区| 九九热精彩视频在线播放| 午夜视频在线观看日韩| 99国产高清不卡视频| 欧美一级片日韩一级片| 隔壁的日本人妻中文字幕版| 成年男女午夜久久久精品| 日韩无套内射免费精品| 午夜福利黄片免费观看| 国产成人亚洲精品青草天美| 国产高清视频一区不卡| 亚洲精品伦理熟女国产一区二区| 国产精品一区二区成人在线| 中文人妻精品一区二区三区四区 | 2019年国产最新视频| 深夜视频成人在线观看|