一段時間前,本身製做了一個庫 「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教程項目可拿,不懂的問題有老司機解決哦,一塊兒相互監督共同進步
本文的文字及圖片來源於網絡加上本身的想法,僅供學習、交流使用,不具備任何商業用途,版權歸原做者全部,若有問題請及時聯繫咱們以做處理。