用Python開發實用程序 – 計算器

用Python開發實用程序 – 計算器

一段時間前,本身製做了一個庫 「sui-math」。這實際上是math的翻版。作完後,python既然能夠輕易的完成任何的數學計算,何不用python開發一個小程序專門用以計算呢?python

如今咱們愈來愈依賴於計算器,不少複雜的計算都離不開它。咱們使用過各式各樣的計算器,不管是電腦自帶的,仍是網也上的計算器,卻都沒有本身動手編寫屬於本身計算器。今天就讓咱們走進計算器的世界,用python來編寫一個能夠用的計算器。git

PS:不少人在學習Python的過程當中,每每由於遇問題解決不了或者沒好的教程從而致使本身放棄,爲此我整理啦從基礎的python腳本到web開發、爬蟲、django、數據挖掘等【PDF等】須要的能夠進Python全棧開發交流.裙 :一久武其而而流一思(數字的諧音)轉換下能夠找到了,裏面有最新Python教程項目可拿,不懂的問題有老司機解決哦,一塊兒相互監督共同進步github

廢話很少說,來看看web

編寫計算器:django

效果圖:小程序

用戶能夠經過鼠標或鍵盤來輸入或刪除數字或符號,按下等號即可計算。網絡

本教程藉助python的 pygame 庫來實現程序。固然,看完本教程後,你還能夠經過利用,pygame 來這製做小遊戲。因此下面稍稍介紹一下pygame及其安裝。函數

安裝:學習

pip install -U pygame字體

計算器的關鍵邏輯:

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

那怎麼作出一個「事件處理器」呢?其實,就是一個大大的 「while True:」 把從啓動到結束,對用戶所的操做作出的反應給包起來。這讀起來有點繞口,等會會有詳細的代碼。

如何計算:

計算對於有些其餘的語言來講,計算是個大大的問題。但python不一樣,它有個特殊的內置函數,叫作eval。這個只有四個字母的函數,解決了計算器的運算。

打個比方:如今已經能夠獲取用戶所做出的操做,好比說按下符號,或者是數字。可是,怎麼知道用戶會在按下等號前,按下多少個符號和數字呢?用戶有可能按1個數字,也有可能按一百個數字,多是一個符號,多是好幾個符號。

所以,不妨設定一個變量,一個空的字串符。

1. num = ""

每當用戶按下一個數字或者一個符號,就在這個字串符裏增長這個數字和符號。每次按下這個字串符後,就在屏幕裏顯示這個字串符。舉個最簡單的例子:

> 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() #更新屏幕

當用戶按下 」1」 的時候,num就會增長字串符1。第2,3行實現了在屏幕上顯示這個字串符。(會在後面詳細解釋)再將屏幕 「更新」。(這行是必須寫的,否則屏幕不會顯示)

當用戶按下等號的,字串符就中止增長,開始計算。Eval專門用來計算字串符的。當計算後,將計算好的數字顯示出來,最後將字串符清零。代碼:

 

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()

圖片的鼠標處理:

一個簡易的計算器原理已經能夠作出來了,可是要讓用戶直觀的看到按鈕,好比按鍵,就須要導入圖片了

Pygame的圖片可使用.png的格式,能夠本身畫,也能夠從網上搜。我就是本身用畫圖板畫的:

(未經容許,禁止盜取)

Pygame須要在程序開始前先導入,代碼以下:

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」 是獲取用戶鼠標的位置。

在第六行,前兩個XXX是定位圖片的x軸,後兩個XXX是定位圖片y軸。其實,你只需定位第一個和第三個位置便可。每張圖片都有寬,長。好比你要對當用戶按下一個長寬都是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」。也就是說,當用戶按下K_1(數字鍵1)這個按鍵的時候,作出反應。

 

如果想要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 #這個是定義屏幕大小,根據本身電腦作出判斷

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. #一開始顯示的東西,好比按鍵,有空還能夠本身畫個圖標,等等

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

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

17. pygame.display.flip()

18. while True:

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

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

21. if event.type == QUIT:

22. pygame.quit()

23. exit()

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

先導入pygame 和 sys兩個庫。接着是 「pygame.init「 這起到了初始化的做用。根據本身的電腦,定義計算機的長和寬。

Pygame的顏色是根據紅黃藍三色控制的,每一級最高爲255,最低爲0。好比(225,225,225)就是白色,(0,0,0)是黑色。

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

Pygame文字:

作什麼也不能沒有字,比若說,顯示就須要顯示數字。先看代碼

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表明位置

首先,須要確認字體,全部的電腦都會帶有字體,能夠在 Font 文件夾裏找到,這裏就再也不多說。

在第六行,這就是確認文字的顏色和底色。(0,0,0)表明着顏色,這裏是黑色,(225,225,225)表明底色,這裏是黑色。最後在(xxx,xxx)的位置顯示出來。

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

Pygame顯示圖片:

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

Pygame有個函數 blit. 因爲顯示其餘的內容,剛講了文字,那也要用到blit函數。如今來說圖片的顯示

Pygame全部須要用的圖片都須要先導入,這在前面已經詳細講過,這裏就再也不多說。代碼以下:

 

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

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

3. ···

4.

5.

6. def pscreen():

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

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

9. ···

固然,不怕麻煩的能夠這樣寫:

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

 

看看完整的代碼(能夠直接拿來用)

結語—不少人在學習Python的過程當中,每每由於遇問題解決不了或者沒好的教程從而致使本身放棄,爲此我整理啦從基礎的python腳本到web開發、爬蟲、django、數據挖掘等【PDF等】須要的能夠進Python全棧開發交流.裙 :一久武其而而流一思(數字的諧音)轉換下能夠找到了,裏面有最新Python教程項目可拿,不懂的問題有老司機解決哦,一塊兒相互監督共同進步

本文的文字及圖片來源於網絡加上本身的想法,僅供學習、交流使用,不具備任何商業用途,版權歸原做者全部,若有問題請及時聯繫咱們以做處理。

發佈於 19:20
相關文章
相關標籤/搜索