㈠ python能做什麼項目
大家在學完python基礎之後,突然迷茫起來了,這時就需要一些項目練練手,增加自己的經驗,同時找到自己的不足。Python3 實現火車票查詢工具(推薦學習:Python視頻教程)
使用 Python3 抓取 12306 網站信息,完成一個火車票查詢工具。該項目練習 Python3 基礎及網路編程,以及 docopt,requests,prettytable 等庫的使用。
高德API+Python解決租房問題
使用Python腳本爬取某租房網站的房源信息,利用高德的 js API 在地圖上標出房源地點,找到距離工作地點1小時車程的房源!在項目實現的過程中將熟悉requests、BeautifulSoup、csv等庫的簡單使用。
NBA常規賽結果預測:利用Python進行比賽數據分析
利用NBA在2015~2019年的比賽統計數據進行回歸模型建立,最終在今年2016~2017的常規賽中預測每場比賽的輸贏情況。
Python代碼實現2048
學習 Python 基本知識,狀態機的概念,以及編寫 python 游戲的步驟。為 Python 的進階課程,需要用戶具有 Python 的語法基礎。
Python實現從excel讀取數據並繪製成精美圖像
這個世界從古至今一直是一個看顏值的世界。對於我們作報告,寫文章時使用的圖片,也是一樣的。一圖勝千言,一張製作精美的圖片,不僅能展示大量的信息,更能體現繪圖者的水平,審美,與態度。使用python從excel讀取數據,並使用matplotpb繪製成二維圖像。這一過程中,將通過一系列操作來美化圖像
這些項目可以說是有難的也有容易的,但是只要能獨立完成一定會有很大的收獲。
更多Python相關技術文章,請訪問Python教程欄目進行學習!以上就是小編分享的關於python能做什麼項目的詳細內容希望對大家有所幫助,更多有關python教程請關注環球青藤其它相關文章!
㈡ 有哪些足不出戶,能用十天掌握的新技能
不少人都看過馬爾科姆・格拉德威爾的《異類》,書中最著名的是 「 1 萬小時定律」 :要達到世界頂級水平,需要 1 萬小時的刻意練習,一般最少要花上 10 年時間。
但問題在於,在這個時代,我們每個人都有太多想學、需要學的技能:工作中需要學外語、學軟體、學匯報;生活中需要學烹飪、學樂器、學健身,我們不可能每樣都付出 1 萬小時……
快速掌握一項技能,對現代人的生存和發展極其重要,喬希・考夫曼有一個經典的 Ted 演講,他總結了一個快速學習的框架, 只需要 20 小時的練習(每天學習 90 分鍾),就可以學會大多數技能,換句話就是通過 20 小時就可以入門了。
下面,我們幫你總結了一些非常實用和裝逼的小技能,10 天左右就能學會。疫情期間宅在家中,不妨嘗試一下~
爬蟲其實就是對網路數據的批量採集,它可以做很多事,比如幫你在 12306 搶票、下載小說、圖片、收集抖音上好看的小姐姐的視頻……在大數據時代,爬蟲早已不是程序員的專屬技能,越來越多的職業都需要用到爬蟲,比如產品經理、運營、市場人員,都經常需要使用到這個技能。
爬蟲程序一般使用 Python 語言製作,有很多現成的 Python 框架,可以讓你很方便地寫出爬蟲程序。除此之外,你還需要對網頁結構有簡單的了解。
推薦課程:
1. 高德 API + Python 爬蟲解決租房問題
本課程使用 Python 腳本爬取某租房網站的房源信息,利用高德的 js API 在地圖上標出房源地點,劃出距離工作地點1小時內可到達的范圍。在項目實現的過程中熟悉了 requests 、BeautifulSoup、csv 等庫的簡單使用。
2. 使用 Python 批量爬取網站信息
本實驗主要通過 Python 實現一個命令行參數控制的爬蟲程序,可以批量爬取網站的 URLs、JS 文件及其中的端點、子域名和 DNS 有關的數據信息等,能夠匹配自定義正則表達式的字元串,還支持將最終結果導出為 JSON 格式或 CSV 格式。
3. Python 二手房信息爬取與數據呈現
本課程以鏈家的二手房網站為目標,使用python爬取鏈家官網在售的二手房信息,並且使用matplotlib 繪圖包對爬取的信息進行分析,繪制簡單的圖表。
4. Nodejs 完成網站信息爬蟲
本課將通過 Node.js 實現一個簡單的爬蟲,來爬取豆瓣熱評電影,主要有以下幾個模塊:實驗簡介,創建項目,HTTP 模塊,編寫爬蟲程序,保存數據到本地。主要會用到的模塊(包)有:http,fs,path,cheerio。http 模塊用於創建 http 請求,fs 模塊用於保存文件,path 模塊用於解析路徑,cheerio 包是伺服器端的 jQuery 實現,這里用於解析 HTML。
爬蟲需要用到 Python ,如果你還不會的話,那有必要先學習一下了。現在編程越來越火,程序員也成了高薪的代名詞,不管寫不寫代碼,學習一下編程也是有必要的。Python 是目前最火熱的語言之一,上至老奶奶、下到小學生都在學習。
10 天時間雖然不能讓你成為 Python 大神,但入門 Python、寫一些小程序、小腳本卻是綽綽有餘的。年後再找工作,再也不用被 「掌握 Python 優先」 的職位拒之門外了!
推薦課程:
1. Python 新手入門課
極度舒適的新手入門課程,面向完全沒有編程基礎的同學。你將在一下午入門 Linux、Python 基礎和Github 常用命令,為未來的編程大樓打下穩固的基礎。
2. 樓 + 之 Python 基礎
人人都學得會的 Python 入門課,從 0 到 1 掌握編程的概念,用 Python 創造你的第一個程序、 游戲 和網路爬蟲。
3. Python3 簡明教程
簡明易懂的 Python3 課程,不僅適用於那些有其它語言基礎的同學,對沒有編程經驗的同學也非常友好。本課程不僅講解了 Python3 基礎知識,還介紹了 PEP8、Virtualenv、測試、項目結構以及 Flask 相關內容。
4. 用 Python 實現各種常用演算法
使用 Python 實現各種演算法,主要知識點包括數據結構,哈希,數學演算法,線性代數,搜索演算法,排序演算法,字元串。
過年期間,王者榮耀日流水過億,又賺錢又好玩為什麼不學?下面這些課程將教你快速一些小 游戲 ~
推薦課程:
1. 200 行 Python 代碼實現 2048
本實驗僅用200行的 python 代碼完成2048小 游戲 的編寫。通過本實驗將學習 Python 基本知識,狀態機的概念,以及編寫 python 游戲 的步驟。為 Python 的進階課程,需要用戶具有 Python 的語法基礎。
2. Python3 實現推理 游戲 Bagels
Bagels是可以和朋友一起玩的一個推理 游戲 。本實驗將會一步步地用 Python3 實現這個 游戲 。本課程會用到一些 Python3 的新特性。
3. Python 實現康威生命 游戲
康威生命 游戲 是一個久負盛名的數學 游戲 ,有簡單的規則和無窮無盡的組合。本課程將使用 pygame 模塊來實現這樣一個 游戲 ,讓你在趣味 游戲 中提升對 Python 的理解,入門 pygame。
4. Python 實現推箱子 游戲
本課程通過一個簡單的推箱子 游戲 ,來介紹 pygame 的一些相關內容,課程介紹中盡量避免專業詞彙,從簡單入手設計並開發一個推箱子 游戲 。
5. 基於 Pygame 開發貪吃蛇和俄羅斯方塊
本課程基於Pygame開發貪吃蛇和俄羅斯方塊,通過逐步學習Pygame基礎知識,到從零開始實現 游戲 開發,課程難度由淺入深,內容通俗易懂,確保同學們能夠很好的掌握和理解。
每個技術大牛都應該有自己的技術博客,如果是自己開發的,那更是加分無數。下面這些教程可以幫助你學習創建美觀又實用的博客~
推薦課程:
1. Python3 基於 Flask 框架搭建個人博客
本課程中,我們將使用 Python 語言及 Flask 框架開發一個簡單的博客系統。涉及 Flask Web 開發,使用 Peewee 構建數據模型,簡單的 Jinja2 模板, Pygments 模塊實現代碼語法高亮,MarkDown 格式編寫博客, Micawber 實現多媒體播放。
2. 使用 Github Pages 和 Hexo 搭建獨立博客
本次課程我們將利用 github page 的特性來部署由 Hexo 框架渲染生成的靜態博客。並且為博客添加插件以實現評論、七牛實現圖床等功能。
3. Java 實現個人博客
利用 SSM 框架和簡單的前端知識、Markdown 的富文本編輯器插件和第三方評論插件和 MySQL 資料庫搭建一個簡單但是功能完善的個人博客網站。
4. SpringBoot + Mybatis + Thymeleaf 搭建美觀實用的個人博客
對於技術人員來說,擁有自己的個人博客應該是一件令人嚮往的事情,可以記錄和分享自己的觀點,獨立開發以及獨立維護一個博客網站,這種想法應該在很多人心中都有過,真的很酷,也因此我開發了 My Blog 博客系統,它是由 SpringBoot + Mybatis + Thymeleaf 等技術實現的 Java 博客系統,頁面美觀、功能齊全、部署簡單及完善的代碼,一定會給使用者無與倫比的體驗。
沒有一個春天不會到來。疫情總會散去,生活也還要繼續。大家加油~
以上課程可以登陸實驗樓官網獲取。
㈢ python3.5 的flappy bird pygame編的
總結幾個關鍵詞吧,將來如果看到這篇博文,自己還能對當時用到的技術有點印象:
1. 狀態機:重構了游戲代碼,主循環使用了狀態機分接不同狀態,update 游戲邏輯 , 使代碼變得清晰利於維護
2. OBB 碰撞檢測:AABB 碰撞檢測 無法 達到需求,參考了 OBB 碰撞檢測的原理,實現了游戲的碰撞檢測
3. cx_Freeze:python 代碼打包 exe ,使用了 cx_Freeze 這個庫,這個庫非常好用,更難得的是支持 python3
遇到的問題有:
1. 沒有仔細研究 pygame 如何操作 surface 的 alpha 透明度
2. cx_Freeze 打包出來的 exe, 在遇到調用 pygame.mixer.music 的 load() 函數時,會報錯。沒有仔細查原因。
3. 對 python 語言本身的一些特性不熟悉,一些特性的實現可能並不符合 python 的標准用法。
總的來說,我對這套代碼的質量還算滿意,對這個游戲核心玩法的還原度也比較認可。寫在這里,記錄我第一次用 python 寫了個行數較多的,面向對象的程序。
可惜用 pygame 寫出來的東西沒法移植到手機,每每想到這一點,就讓我覺得這東西實在沒啥前途。。我對 python 的理解 可能不夠,但是我印象里 python 也是一個解釋執行的語言,也可以和 c++ 相互調用,為啥不能在手機上 搞個python 解釋器來運行 python 程序 ? 如果 python 解釋器是 c++ 寫的,python 不能像 lua 等腳本語言一樣,內嵌到 手機 開發的 app 里?如果 python 程序可以移植到手機上執行的話, pygame 基於 SDL ,理論上 SDL 也是基於 OpenGL 的,那麼理論上 pygame 寫出來的游戲,應該也能移植到 手機上 才對。。
所以說。。我對 python 的理解還是不足,暫時沒法從知識上解答上面的幾個問題。下個目標還是專心本職工作,學習 iOS Android 原生開發,更深入的去學習平台跨越性更好的 游戲引擎,爭取多寫一些 在手機上跑的,完成度最少達到這次寫的 flappy bird 的程度的 東西吧。
主要參考的文章地址是:
http //simple-is-better.com/news/361
全部代碼以及打包出來的 exe 都上傳在這里,給N年後回頭看的自己留個念想,也提供給比我更新的手, 想了解 pygame 的人做個參考
http //download.csdn.net/detail/korekara88730/9416635
㈣ (有限)狀態機
狀態機是最基本的設計模式。
而我們常常說的狀態機指有限狀態機,縮寫是FSM(Finite State Machine)。
無限狀態機僅僅是理論上存在的概念,比如,把1/3變成一個狀態機的話,那這個狀態就是無限循環了,實際上沒啥實際的應用意義。
我們常說的狀態機指有限狀態機。
不誇張的說,狀態機模型是世界運行的基礎,大腦做的決策推演,在火星上運行的祝融號,計算機軟體的底層設計,游戲中的沙雕AI,其底層邏輯都是狀態機。
有限狀態機的定義: 有限個狀態 及在這些狀態之間的轉移和動作等行為的數學模型;在計算機科學中,狀態機的關鍵要素是狀態和狀態的轉移。
按照輸入輸出關系,狀態機模型有2個,分別是Moore模型(發明者:Edward Moore 1956)和Mealy模型(發明者:George H. Mealy 1955),看到這倆名字,莫名的就想到了《Rick and Morty》...
這兩個模型的特點可以用如下公式概括:
一句話:
Moore的設計僅僅與狀態有關,Mealy的設計與狀態和輸入有關系。
Mealy的狀態比Moore的狀態要少。
它們的設計和表示方法如下所示:
moore和mealy本質上並沒有什麼差別,設計上可以互相轉化。
上圖中的A Mealy 轉為 Morre 如下所示:
上圖中的B Moore 轉為 Mealy 如下所示:
推導過程可以參考:http://catonblack.cn/2019-01-18/mealy2moore/
回到程序設計的話題,要設計一個通用的狀態機程序,只用switch,case肯定是不夠的;
當然,不管是用哪種語言,只要把握住狀態機的三個核心要素即可,即:
畫成一張圖如下(手動 @陳振):
把它轉換成一個數據結構,即:
通用的設計思路是把所有的狀態和狀態轉換表達成一個表,通過查表的形式驅動狀態機運轉起來。
狀態轉移表,示例是一個輸入4個數字密碼(9527)的狀態轉移表:
狀態機的查詢和運轉:
運行結果展示:
在python裡面有一個transitions狀態機庫,感興趣的同學可以自己學習一把。
運行結果:
掌握了核心思想,設計一個狀態機的通用程序並不是很復雜的事情。
-- EOF --
㈤ 請教怎麼用python做一個web自動狀態機
簡單的狀態機就是一個行為狀態矩陣,如果是語法級的狀態機,你最好還是找個Yacc之類的工具自動生成吧。
㈥ python程序讀取和輸出數據
class StepTime:
def __init__(self,name):
self.name=name
self.values=[]
def close(self):
if sum(self.values)==0.0:
print "all zero:",self.name
def put(self,value):
self.values.append(float(value))
if len(values)==1:
print "not zero:",self.name
import re,os
lasttime=None
for line in open("filename","rt"):
if line.startswith("step"):
if lasttime:lasttime.close()
name=line[len('step time='):].strip()
lasttime=StepTime(name)
else:
lasttime.put(line[line.find("=")+1:].strip())
lasttime.close()
完成了,就這東西。似乎StepTime這個類就是一個簡單的狀態機吧。
㈦ 如何使用Python中的迭代器,生成器
迭代器對象要求支持迭代器協議的對象,在Python中,支持迭代器協議就是實現對象的__iter__()和next()方法。其中__iter__()方法返回迭代器對象本身;next()方法返回容器的下一個元素,在結尾時引發StopIteration異常。
生成器
在Python中,使用生成器可以很方便的支持迭代器協議。生成器通過生成器函數產生,生成器函數可以通過常規的def語句來定義,但是不用return返回,而是用yield一次返回一個結果,在每個結果之間掛起和繼續它們的狀態,來自動實現迭代協議。
也就是說,yield是一個語法糖,內部實現支持了迭代器協議,同時yield內部是一個狀態機,維護著掛起和繼續的狀態。
㈧ 求Python大神給個200行左右的代碼,多點注釋,做期末大作業
#-*-coding:utf-8-*-
importcurses#引入curses模塊,curses是一個在Linux/Unix下廣泛應用的圖形函數庫.,作用是可以繪制在DOS下的用戶界面和漂亮的圖形。
fromrandomimportrandrange,choice#從random模塊引入randrange,choice這兩個類
#從collections引入defaultdict這個類
letter_codes=[ord(ch)forchin'WASDRQwasdrq']#ord函數是把字元轉換成對應的數字
actions=['Up','Left','Down','Right','Restart','Exit']#上,左,下,右,重啟,退出
actions_dict=dict(zip(letter_codes,actions*2))#把字母與動作對應起來。zip是把元組中的值對應起來。
#############################
WUp
ALeft
SDown
DRight
RRestart
QExit
wUp
aLeft
sDown
dRight
rRestart
QExit
##############################################
defget_user_action(keyboard):
char="N"#char的初始值為Nwhilecharnotinactions_dict:
char=keyboard.getch()returnactions_dict[char]#阻塞+循環,直到獲得用戶有效輸入才返回對應行為deftranspose(field):return[list(row)forrowinzip(*field)]#zip函數里邊加*號,是把行變列,列變行。所以這句代碼是行列轉置definvert(field):return[row[::-1]forrowinfield]#這句代碼是把列表前後顛倒classGameField(object):#創建一個叫做GameField的類,用來創建棋盤def__init__(self,height=4,width=4,win=2048):這個類三個參數self.height=height#高self.width=width#寬self.win_value=win#過關分數self.score=0#當前分數self.highscore=0#最高分self.reset()#重置棋盤defreset(self):#定義一個reset函數ifself.score>self.highscore:#如果當前分數大於最高分,那麼把當前分數賦值給最高分self.highscore=self.scoreself.score=0#當前分數恢復到0分self.field=[[0foriinrange(self.width)]forjinrange(self.height)]#橫縱坐標恢復到(0,0)self.spawn()#調用spawn這個函數self.spawn()defmove(self,direction):#定義move函數defmove_row_left(row):#向左移deftighten(row):#squeesenon-zeroelementstogether把零散的非零單元擠到一塊
new_row=[iforiinrowifi!=0]#如果i不等於零,把他們賦值到new_row這個元組中
new_row+=[0foriinrange(len(row)-len(new_row))]#其餘位置用0補充returnnew_row#返回這個元組defmerge(row):#定義merge函數,用來合並單元
pair=False#pair初始值為假
new_row=[]#new_row初始值為空foriinrange(len(row)):#讓i在格子里循環ifpair:如果pair為真
new_row.append(2*row[i])#那麼把把row【i】的值乘以2,追加到new_row後邊self.score+=2*row[i]#並且得分為row【i】的值乘以2
pair=False#pair重新賦值為假else:如果pair為真ifi+1<len(row)androw[i]==row[i+1]:#如果i+1還沒到邊界,並且此時的row【i】=row【i+1】
pair=True#那麼pair為真
new_row.append(0)#new_row後追加零else:
new_row.append(row[i])#否則追加row【i】
assertlen(new_row)==len(row)#提醒兩者長度一致returnnew_rowreturntighten(merge(tighten(row)))#反復合並,知道不能合並為止
moves={}
moves['Left']=lambdafield:
[move_row_left(row)forrowinfield]#做移動
moves['Right']=lambdafield:
invert(moves['Left'](invert(field)))#invert是逆轉
moves['Up']=lambdafield:
transpose(moves['Left'](transpose(field)))#transpose是轉置
moves['Down']=lambdafield:
transpose(moves['Right'](transpose(field)))ifdirectioninmoves:ifself.move_is_possible(direction):#如果移動方向在四個方向上,self.field=moves[direction](self.field)那麼調用moves函數self.spawn()#產生隨機數returnTrueelse:returnFalsedefis_win(self):returnany(any(i>=self.win_valueforiinrow)forrowinself.field)defis_gameover(self):returnnotany(self.move_is_possible(move)formoveinactions)defdraw(self,screen):
help_string1='(W)Up(S)Down(A)Left(D)Right'
help_string2='(R)Restart(Q)Exit'
gameover_string='GAMEOVER'
win_string='YOUWIN!'defcast(string):
screen.addstr(string+' ')defdraw_hor_separator():
line='+'+('+------'*self.width+'+')[1:]
separator=defaultdict(lambda:line)ifnothasattr(draw_hor_separator,"counter"):
draw_hor_separator.counter=0
cast(separator[draw_hor_separator.counter])
draw_hor_separator.counter+=1defdraw_row(row):
cast(''.join('|{:^5}'.format(num)ifnum>0else'|'fornuminrow)+'|')
screen.clear()
cast('SCORE:'+str(self.score))if0!=self.highscore:
cast('HGHSCORE:'+str(self.highscore))forrowinself.field:
draw_hor_separator()
draw_row(row)
draw_hor_separator()ifself.is_win():
cast(win_string)else:ifself.is_gameover():
cast(gameover_string)else:
cast(help_string1)
cast(help_string2)defspawn(self):
new_element=4ifrandrange(100)>89else2
(i,j)=choice([(i,j)foriinrange(self.width)forjinrange(self.height)ifself.field[i][j]==0])self.field[i][j]=new_elementdefmove_is_possible(self,direction):defrow_is_left_movable(row):
defchange(i):#trueifthere'llbechangeini-thtileifrow[i]==0androw[i+1]!=0:#MovereturnTrueifrow[i]!=0androw[i+1]==row[i]:#(change(i)foriinrange(len(row)-1))
check={}
check['Left']=lambdafield:
any(row_is_left_movable(row)forrowinfield)
check['Right']=lambdafield:
check['Left'](invert(field))
check['Up']=lambdafield:
check['Left'](transpose(field))
check['Down']=lambdafield:
check['Right'](transpose(field))ifdirectionincheck:returncheck[direction](self.field)else:returnFalsedefmain(stdscr):definit():#重置游戲棋盤
game_field.reset()return'Game'defnot_game(state):#畫出GameOver或者Win的界面
game_field.draw(stdscr)#讀取用戶輸入得到action,判斷是重啟游戲還是結束游戲
action=get_user_action(stdscr)
responses=defaultdict(lambda:state)#默認是當前狀態,沒有行為就會一直在當前界面循環
responses['Restart'],responses['Exit']='Init','Exit'#對應不同的行為轉換到不同的狀態returnresponses[action]defgame():#畫出當前棋盤狀態
game_field.draw(stdscr)#讀取用戶輸入得到action
action=get_user_action(stdscr)ifaction=='Restart':return'Init'ifaction=='Exit':return'Exit'ifgame_field.move(action):#movesuccessfulifgame_field.is_win():return'Win'ifgame_field.is_gameover():return'Gameover'return'Game'
state_actions={'Init':init,'Win':lambda:not_game('Win'),'Gameover':lambda:not_game('Gameover'),'Game':game
}
curses.use_default_colors()
game_field=GameField(win=32)
state='Init'#狀態機開始循環whilestate!='Exit':
state=state_actions[state]()
curses.wrapper(main)
㈨ 怎麼用Python設計一個雙延遲狀態機
簡單的狀態機就是一個行為狀態矩陣,如果是語法級的狀態機,你最好還是找個Yacc之類的工具自動生成吧。