日韩性视频-久久久蜜桃-www中文字幕-在线中文字幕av-亚洲欧美一区二区三区四区-撸久久-香蕉视频一区-久久无码精品丰满人妻-国产高潮av-激情福利社-日韩av网址大全-国产精品久久999-日本五十路在线-性欧美在线-久久99精品波多结衣一区-男女午夜免费视频-黑人极品ⅴideos精品欧美棵-人人妻人人澡人人爽精品欧美一区-日韩一区在线看-欧美a级在线免费观看

歡迎訪問 生活随笔!

生活随笔

當(dāng)前位置: 首頁 > 编程语言 > python >内容正文

python

给Python初学者的最好练手项目,进来看就对了!

發(fā)布時(shí)間:2025/3/8 python 39 豆豆
生活随笔 收集整理的這篇文章主要介紹了 给Python初学者的最好练手项目,进来看就对了! 小編覺得挺不錯(cuò)的,現(xiàn)在分享給大家,幫大家做個(gè)參考.


有很多朋友問我學(xué)習(xí)了Python后,有沒有什么好的項(xiàng)目可以練手。

其實(shí),做項(xiàng)目主要還是根據(jù)需求來的。但是對于一個(gè)初學(xué)者來說,很多復(fù)雜的項(xiàng)目沒辦法獨(dú)立完成,因此博主挑選了一個(gè)非常適合初學(xué)者的項(xiàng)目,內(nèi)容不是很復(fù)雜,但是非常有趣,我相信對于初學(xué)者小白來說是再好不過的項(xiàng)目了。

這個(gè)項(xiàng)目中,我們將要建立一個(gè)比特幣價(jià)格的提醒服務(wù)。

  • 你將主要會(huì)學(xué)習(xí)到HTTP的請求,以及如何使用requests包來發(fā)送這些請求。

  • 同時(shí),你會(huì)了解webhooks和如何使用它將Python app與外部設(shè)備連接,例如移動(dòng)端手機(jī)提醒或者 Telegram 服務(wù)。

僅僅不到50行的代碼就能完成一個(gè)比特幣價(jià)格提醒服務(wù)的功能,并且可以輕松的擴(kuò)展到其它加密數(shù)字貨幣和服務(wù)中。

下面我們馬上來看看。

1、用Python實(shí)現(xiàn)比特幣價(jià)格提醒

我們都知道,比特幣是一個(gè)變動(dòng)的東西。你無法真正的知道它的去向。因此,為了避免我們反復(fù)的刷新查看最新動(dòng)態(tài),我們可以做一個(gè)Python app來為你工作。

為此,我們將會(huì)使用一個(gè)很流行的自動(dòng)化網(wǎng)站IFTTT。IFTTT ("if this, then that")?是一個(gè)可以在不同app設(shè)備與web服務(wù)之間建立連接橋梁的工具。

我們將會(huì)創(chuàng)建兩個(gè)IFTTT applets:

  • 一個(gè)是當(dāng)比特幣價(jià)格下滑到一定閾值后的緊急提醒

  • 另一個(gè)是常規(guī)的比特幣價(jià)格的更新

兩個(gè)程序都將被我們的Python app觸發(fā),Python app從Coinmakercap API獲取數(shù)據(jù)。

Coinmakercap API鏈接:https://coinmarketcap.com/api/

一個(gè)IFTTT程序有兩個(gè)部分組成:觸發(fā)部分動(dòng)作部分。

在我們的情況下,觸發(fā)是一個(gè)IFTTT提供的webhook服務(wù)。你可以將webhook想象為"user-defined HTTP callbacks"。

更多請參考:http://timothyfitz.com/2009/02/09/what-webhooks-are-and-why-you-should-care/

我們的Python app將會(huì)發(fā)出一個(gè)HTTP請求到webhook URL,然后webhook URL觸發(fā)動(dòng)作。有意思的部分來了,這個(gè)動(dòng)作可以是你想要的任何東西。IFTTT提供了眾多的動(dòng)作,像發(fā)送一個(gè)email,更新一個(gè)Google電子數(shù)據(jù)表,甚至可以給你打電話。

2、配置項(xiàng)目

如果你安裝了python3,那么只要再安裝一個(gè)requests包就可以了。

$ pip install requests==2.18.4 # We only need the requests package

選一個(gè)編輯器,比如Pycharm進(jìn)行代碼編輯。

3、獲取比特幣價(jià)格

代碼很簡單,可以在console中進(jìn)行。導(dǎo)入requests包,然后定義bitcoin_api_url變量,這個(gè)變量是Coinmarketcap API的URL。

接著,使用requests.get()函數(shù)發(fā)送一個(gè) HTTP GET請求,然后保存響應(yīng)response。由于API返回一個(gè)JSON響應(yīng),我們可以通過.json()將它轉(zhuǎn)換為python對象。

import requests bitcoin_api_url = 'https://api.coinmarketcap.com/v1/ticker/bitcoin/' response = requests.get(bitcoin_api_url) response_json = response.json() type(response_json) # The API returns a list <class?'list'> # Bitcoin data is the first element of the list response_json[0] {'id':?'bitcoin',?'name':?'Bitcoin',?'symbol':?'BTC',?'rank':?'1',? 'price_usd':?'10226.7',?'price_btc':?'1.0',?'24h_volume_usd':?'7585280000.0', 'market_cap_usd':?'172661078165',?'available_supply':?'16883362.0',? 'total_supply':?'16883362.0',?'max_supply':?'21000000.0',? 'percent_change_1h':?'0.67',?'percent_change_24h':?'0.78',? 'percent_change_7d':?'-4.79',?'last_updated':?'1519465767'}

上面我們感興趣的是price_usd。

4、發(fā)送一個(gè)測試的IFTTT提醒

現(xiàn)在我們可以轉(zhuǎn)到IFTTT上面來了。使用IFTTT之前,我們需要?jiǎng)?chuàng)建一個(gè)新賬戶,然后安裝移動(dòng)端app(如果你想在手機(jī)上接到通知),設(shè)置成功后就開始創(chuàng)建一個(gè)新的IFTTT applet用于測試。

新賬戶鏈接:https://ifttt.com/join

創(chuàng)建一個(gè)新的測試applet,可以按以下步驟進(jìn)行:

  • 點(diǎn)擊大的 "this" 按鈕;

  • 搜索 "webhooks" 服務(wù),然后選擇 "Receive a web request"觸發(fā);

  • 重命名event為test_event;

  • 然后選擇大的 "that" 按鈕;

  • 搜索 "notifications" 服務(wù),然后選擇 "send a notification from the IFTTT app"

  • 改變短信息為 I just triggered my first IFTTT action!,然后點(diǎn)擊 "Create action";

  • 點(diǎn)擊 "Finish" 按鈕,完成;

  • 要看如何使用IFTTT webhooks,請點(diǎn)擊 "Documentation" 按鈕。documentation里有webhooks的URL格式。

    https://maker.ifttt.com/trigger/{event}/with/key/{your-IFTTT-key}

    接著,你需要將{event}替換為你在步驟3中自己起的名字。{your-IFTTT-key}是已經(jīng)提供了的IFTTT key。

    現(xiàn)在你可以復(fù)制webhook URL,然后開啟另一個(gè)console。同樣導(dǎo)入requests然后發(fā)送post請求。

    import requests #?Make?sure?that?your?key?is?in?the?URL ifttt_webhook_url = 'https://maker.ifttt.com/trigger/test_event/with/key/{your-IFTTT-key}' requests.post(ifttt_webhook_url) <Response?[200]>

    運(yùn)行完之后,你可以在手機(jī)端的app看到:

    5、創(chuàng)建IFTTT Applets

    前面只是測試,現(xiàn)在我們到了最主要的部分了。再開始代碼之前,我們需要?jiǎng)?chuàng)建兩個(gè)新的IFTTT applets:一個(gè)是比特幣價(jià)格的緊急通知,另一個(gè)是常規(guī)的更新。

    比特幣價(jià)格緊急通知的applet:

  • 選擇 "webhooks" 服務(wù),并且選擇 "Receive a web request" 的觸發(fā);

  • 命名一個(gè)事件 event 為 bitcoin_price_emergency;

  • 對于響應(yīng)的動(dòng)作部分,選擇 "Notifications"服務(wù),然后繼續(xù)選擇 "send a rich notification from the IFTTT app" 動(dòng)作;

  • 提供一個(gè)標(biāo)題,像 "Bitcoin price emergency!"

  • 設(shè)置短信息 為 Bitcoin price is at ${{Value1}}. Buy or sell now!(我們一會(huì)兒將返回到{{Value1}}部分)

  • 可選的,你可以加入一個(gè)URL link 到 Coinmarketcap Bitcoin page:https://coinmarketcap.com/currencies/bitcoin/;

  • 創(chuàng)建動(dòng)作,然后完成applet的設(shè)置;

  • 常規(guī)價(jià)格更新的applet:

  • 一樣的選擇 "webhooks" 服務(wù),并且選擇 "Receive a web request" 的觸發(fā);

  • 命名一個(gè)事件 event 為 bitcoin_price_update;

  • 對于響應(yīng)的動(dòng)作部分,選擇 "Telegram" 服務(wù),然后繼續(xù)選擇 "Send message" 動(dòng)作;

  • 設(shè)置短信信息文本為:Latest bitcoin prices:<br>{{Value1}};

  • 創(chuàng)建動(dòng)作,然后完成applet的設(shè)置;

  • 6、將所有連到一起

    現(xiàn)在,我們有了IFTTT,下面就是代碼了。你可以通過創(chuàng)建下面開始,然后保存為 bitcoin_notifications.py:

    import requests import?time from?datetime?import?datetime def?main():pass if?__name__?==?'__main__':main()

    接著,我們還要將前面兩個(gè)Python console部分的代碼轉(zhuǎn)換為兩個(gè)函數(shù),函數(shù)將返回最近比特幣的價(jià)格,然后將它們分別post到IFTTT的webhook上去。將下面的代碼加入到main()函數(shù)之上。

    ?BITCOIN_API_URL?=?'https://api.coinmarketcap.com/v1/ticker/bitcoin/'IFTTT_WEBHOOKS_URL?=?'https://maker.ifttt.com/trigger/{}/with/key/{your-IFTTT-key}'def?get_latest_bitcoin_price():response?=?requests.get(BITCOIN_API_URL)response_json?=?response.json()#?Convert?the?price?to?a?floating?point?numberreturn?float(response_json[0]['price_usd'])def?post_ifttt_webhook(event,?value):#?The?payload?that?will?be?sent?to?IFTTT?servicedata?=?{'value1':?value}#?inserts?our?desired?eventifttt_event_url?=?IFTTT_WEBHOOKS_URL.format(event)#?Sends?a?HTTP?POST?request?to?the?webhook?URLrequests.post(ifttt_event_url,?json=data)

    除了將價(jià)格從一個(gè)字符串變成浮點(diǎn)數(shù)之外,get_latest_bitcoin_price基本沒太變。psot_ifttt_webhook需要兩個(gè)參數(shù):event和value。

    event參數(shù)與我們之前命名的觸發(fā)名字對應(yīng)。同時(shí),IFTTT的webhooks允許我們通過requests發(fā)送額外的數(shù)據(jù),數(shù)據(jù)作為JSON格式。

    這就是為什么我們需要value參數(shù):當(dāng)設(shè)置我們的applet的時(shí)候,我們在信息文本中有{{Value1}}標(biāo)簽。這個(gè)標(biāo)簽會(huì)被 JSON payload 中的values1文本替換。requests.post()函數(shù)允許我們通過設(shè)置json關(guān)鍵字發(fā)送額外的JSON數(shù)據(jù)。

    現(xiàn)在我們可以繼續(xù)到我們app的核心main函數(shù)碼代碼了。它包括一個(gè)while True的循環(huán),由于我們想要app永遠(yuǎn)的運(yùn)行下去。在循環(huán)中,我們調(diào)用Coinmarkertcap API來得到最近比特幣的價(jià)格,并且記錄當(dāng)時(shí)的日期和時(shí)間。

    根據(jù)目前的價(jià)格,我們將決定我們是否想要發(fā)送一個(gè)緊急通知。對于我們的常規(guī)更新我們將把目前的價(jià)格和日期放入到一個(gè)bitcoin_history的列表里。一旦列表達(dá)到一定的數(shù)量(比如說5個(gè)),我們將包裝一下,將更新發(fā)送出去,然后重置歷史,以為后續(xù)的更新使用。

    一個(gè)需要注意的地方是避免發(fā)送信息太頻繁,有兩個(gè)原因:

    • Coinmarketcap API 聲明他們只有每隔5分鐘更新一次,因此更新太頻也沒有用

    • 如果你的app發(fā)送太多的請求道 Coinmarketcap API,你的IP可能會(huì)被ban

    因此,我們最后加入了 "go to sleep" 睡眠,設(shè)置至少5分鐘才能得到新數(shù)據(jù)。下面的代碼實(shí)現(xiàn)了我們的需要的特征:

    BITCOIN_PRICE_THRESHOLD = 10000 # Set this to whatever you like def?main():bitcoin_history?=?[]while?True:price?=?get_latest_bitcoin_price()date?=?datetime.now()bitcoin_history.append({'date':?date,?'price':?price})#?Send?an?emergency?notificationif?price?<?BITCOIN_PRICE_THRESHOLD:post_ifttt_webhook('bitcoin_price_emergency',?price)#?Send?a?Telegram?notification#?Once?we?have?5?items?in?our?bitcoin_history?send?an?updateif?len(bitcoin_history)?==?5:post_ifttt_webhook('bitcoin_price_update',?format_bitcoin_history(bitcoin_history))#?Reset?the?historybitcoin_history?=?[]#?Sleep?for?5?minutes?#?(For?testing?purposes?you?can?set?it?to?a?lower?number)time.sleep(5?*?60)

    我們幾乎快成功了。但是還缺一個(gè)format_bitcoin_history函數(shù)。它將bitcoin_history作為參數(shù),然后使用被Telegram允許的基本HTML標(biāo)簽(像<br>, <b>, <i> 等等)變換格式。將這個(gè)函數(shù)復(fù)制到main()之上。

    def format_bitcoin_history(bitcoin_history):rows?=?[]for?bitcoin_price?in?bitcoin_history:#?Formats?the?date?into?a?string:?'24.02.2018?15:09'date?=?bitcoin_price['date'].strftime('%d.%m.%Y?%H:%M')price?=?bitcoin_price['price']#?<b>?(bold)?tag?creates?bolded?text#?24.02.2018?15:09:?$<b>10123.4</b>row?=?'{}:?$<b>{}</b>'.format(date,?price)rows.append(row)#?Use?a?<br>?(break)?tag?to?create?a?new?line#?Join?the?rows?delimited?by?<br>?tag:?row1<br>row2<br>row3return?'<br>'.join(rows)

    最后在手機(jī)上顯示的結(jié)果是這樣的:

    然后,我們的功能就完成了,只要比特幣的價(jià)格一更新,手機(jī)移動(dòng)端就有提示。當(dāng)然,如果你嫌煩也可以在app里面off掉。


    備注:公眾號(hào)菜單包含了整理了一本AI小抄非常適合在通勤路上用學(xué)習(xí)。

    往期精彩回顧 那些年做的學(xué)術(shù)公益-你不是一個(gè)人在戰(zhàn)斗適合初學(xué)者入門人工智能的路線及資料下載機(jī)器學(xué)習(xí)在線手冊深度學(xué)習(xí)在線手冊備注:加入本站微信群或者qq群,請回復(fù)“加群”加入知識(shí)星球(4500+用戶,ID:92416895),請回復(fù)“知識(shí)星球”

    喜歡文章,點(diǎn)個(gè)在看

    總結(jié)

    以上是生活随笔為你收集整理的给Python初学者的最好练手项目,进来看就对了!的全部內(nèi)容,希望文章能夠幫你解決所遇到的問題。

    如果覺得生活随笔網(wǎng)站內(nèi)容還不錯(cuò),歡迎將生活随笔推薦給好友。