上篇文章寫到了Python開發(fā)英語(yǔ)單詞記憶工具,其中依賴了bootstrap.css jQuery.js 基礎(chǔ)html模塊以及片段的css樣式。有些朋友問,怎么能將這個(gè)練習(xí)題打包成單獨(dú)的exe可執(zhí)行文件,來脫離python環(huán)境使用呢?
私信小編01即可獲取大量的Python學(xué)習(xí)資料
在這里跟大家簡(jiǎn)單說下思路,有需求的朋友可以自己去扒拉扒拉…
依賴的css和js,如果有外網(wǎng)的前提,可以使用bootcdn提供的鏈接引用:
https://cdn.bootcss.com/jquery/3.4.0/jquery.min.js
https://cdn.bootcss.com/twitter-bootstrap/3.4.1/css/bootstrap.min.css
自己編輯的css樣式,可以添加在head中的style中
基礎(chǔ)html可以作為一大段的string在python中進(jìn)行定義,最終替換關(guān)鍵內(nèi)容后輸出。至于cet4的單詞表,建議就不要添加在代碼中了,和打出來的exe文件放置在一起即可。
好了,思路就是這些,喜歡的朋友可以去嘗試做一下,這樣就可以無時(shí)無刻給自己出一份英語(yǔ)練習(xí)測(cè)試題了。
大家平時(shí)在Linux/Windows下安裝軟件時(shí),經(jīng)常會(huì)出現(xiàn)進(jìn)度條和百分比的提示,Python是否能實(shí)現(xiàn)這樣的打印?安裝過程中,經(jīng)常會(huì)看到很多帶顏色的安裝說明,我們?cè)趐ython輸出時(shí),確是千篇一律的黑底白色,是否想過打印的炫酷一些呢?
以上操作其實(shí)很簡(jiǎn)單,今天就來教教大家,通過幾分鐘的學(xué)習(xí)讓之后代碼的輸出變得與眾不同!
python打印進(jìn)度條的原理其實(shí)很簡(jiǎn)單,先讓我們看一個(gè)例子吧:
# -*- coding: utf-8 -*-
# @Author : 王翔
# @WeChat : King_Uranus
# @公眾號(hào) : 清風(fēng)Python
# @Date : 2019/9/16 22:09
# @Software : PyCharm
# @version :Python 3.7.3
# @File : ProgressBar.py
import time
def progress_bar(total):
if total <= 0:
raise ValueError("Wrong total number ...")
# step = (100 // total if total <= 100 else total // 100)
for i in range(0, total):
time.sleep(0.05)
step = int(100 / total * (i + 1))
str1 = '\r[%3d%%] %s' % (step, '>' * step)
print(str1, end='', flush=True)
progress_bar(20)
print()
progress_bar(110)
我們通過自己實(shí)現(xiàn)了進(jìn)度條的展示,那么python是否具備現(xiàn)成的模塊呢?答案是Yes![ tqdm ]
Tqdm 是一個(gè)快速,可擴(kuò)展的Python進(jìn)度條,可以在 Python 長(zhǎng)循環(huán)中添加一個(gè)進(jìn)度提示信息,用戶只需要封裝任意的迭代器 tqdm(iterator)。
安裝:pip install tqdm
來看一個(gè)例子:
from tqdm import tqdm
import string
import time
for char in tqdm(string.ascii_uppercase):
time.sleep(0.1)
for i in tqdm(range(50)):
time.sleep(0.05)
tqdm的強(qiáng)大遠(yuǎn)不止此,喜歡的朋友可以去它的git網(wǎng)址詳細(xì)學(xué)習(xí):
https://github.com/tqdm/tqdm
python顏色輸出其實(shí)只是調(diào)用了命令號(hào)的相關(guān)特殊標(biāo)記,shell中我們也經(jīng)常使用它:
print('\033[30m打印前景色0\033[0m')
print('\033[31m打印前景色1\033[0m')
print('\033[32m打印前景色2\033[0m')
print('\033[33m打印前景色3\033[0m')
print('\033[34m打印前景色4\033[0m')
print('\033[35m打印前景色5\033[0m')
print('\033[36m打印前景色6\033[0m')
print('\033[37m打印前景色7\033[0m')
print('\033[40m打印背景色0\033[0m')
print('\033[41m打印背景色1\033[0m')
print('\033[42m打印背景色2\033[0m')
print('\033[43m打印背景色3\033[0m')
print('\033[44m打印背景色4\033[0m')
print('\033[45m打印背景色5\033[0m')
print('\033[46m打印背景色6\033[0m')
print('\033[47m打印背景色7\033[0m')
print('\033[0m打印顯示方式0\033[0m')
print('\033[1m打印顯示方式1\033[0m')
print('\033[4m打印顯示方式4\033[0m')
print('\033[5m打印顯示方式5\033[0m')
print('\033[7m打印顯示方式7\033[0m')
print('\033[8m打印顯示方式8\033[0m')
print('\033[5;31;47m綜合打印\033[0m')
每條默認(rèn)的**3[0m為回復(fù)終端默認(rèn)
最后一個(gè)3[5;31;47m**綜合打印為使用閃爍方式紅色字體白色背景色打印文字!
參數(shù)說明:
那么和上面一樣的套路,python中是否有模塊能實(shí)現(xiàn)這種顏色打印的功能呢?答案依然是Yes! [ colorama ]
Python的Colorama模塊,可以跨多終端,顯示字體不同的顏色和背景,只需要導(dǎo)入colorama模塊即可,不用再每次都像linux一樣指定顏色。
pip install colorama
Fore是針對(duì)字體顏色,Back是針對(duì)字體背景顏色,Style是針對(duì)字體格式
Fore: BLACK, RED, GREEN, YELLOW, BLUE, MAGENTA, CYAN, WHITE, RESET.
Back: BLACK, RED, GREEN, YELLOW, BLUE, MAGENTA, CYAN, WHITE, RESET.
Style: DIM, NORMAL, BRIGHT, RESET_ALL
>>> from colorama import Fore, Back, Style
>>> print(Fore.RED + '打印紅色文字')
>>> 打印紅色文字
>>> print(Back.GREEN + '設(shè)置背景為綠色')
>>> 設(shè)置背景為綠色
>>> print(Style.RESET_ALL)
>>> print('恢復(fù)默認(rèn)')
>>> 恢復(fù)默認(rèn)
細(xì)心的網(wǎng)友看到,我們?nèi)绻麤]有恢復(fù)默認(rèn)的話,會(huì)繼承上面的顏色狀態(tài)。那么,如何像剛才一樣,每次輸出后自動(dòng)化恢復(fù)呢?
from colorama import init, Fore, Back, Style
init(autoreset=True)
print(Fore.RED + '打印紅色文字')
print(Back.GREEN + '設(shè)置背景為綠色')
print('恢復(fù)默認(rèn)')
關(guān)于裝13,只能幫大家到這里了,希望今天的內(nèi)容大家能喜歡…
更多精彩內(nèi)容,請(qǐng)滑至頂部點(diǎn)擊右上角關(guān)注小宅哦~
者:前端小智 來源:大遷世界
.md文件是markdown的一種標(biāo)記語(yǔ)言,和html比較起來,更簡(jiǎn)單快捷,主要體現(xiàn)在:標(biāo)記符的數(shù)量和書寫上。
方式一:使用i5ting_toc插件
需要先安裝npm(安裝node.js后會(huì)自帶npm),然后才能安裝i5ting插件:
npm install i5ting_toc -g
執(zhí)行命令行生成html文件,在輸入前要進(jìn)入到對(duì)應(yīng)根目錄下:
i5ting_toc -f **.md
需要注意的是:寫md文檔的特殊符號(hào)時(shí)記得添加空格。小技巧:如何快速在當(dāng)前目錄打開cmd?選擇當(dāng)前目錄,按住shift,然后鼠標(biāo)右鍵在此處打開命令窗口(在此處打開powerShell窗口)。
方式二:使用gitbook
同樣先需要安裝node,然后運(yùn)行:
npm i gitbook gitbook-cli -g
生成md文件,這個(gè)命令會(huì)生成相應(yīng)的md的文件,然后在相應(yīng)的文件里寫你的內(nèi)容即可:
gitbook init
md轉(zhuǎn)html,生成一個(gè)_doc目錄,打開就可以看到你html文件了。
gitbook build
方式三:利用前端代碼
實(shí)現(xiàn)原理是采用node.js搭建服務(wù)器,讀取md文件轉(zhuǎn)化為html片斷。瀏覽器發(fā)送ajax請(qǐng)求獲取片段后再渲染生成html網(wǎng)頁(yè)。
node代碼:
var express = require('express');
var http = require('http');
var fs = require('fs');
var bodyParser = require('body-parser');
var marked = require('marked'); // 將md轉(zhuǎn)化為html的js包
var app = express();
app.use(express.static('src')); //加載靜態(tài)文件
var urlencodedParser = bodyParser.urlencoded({ extended: false });
app.get('/getMdFile',urlencodedParser, function(req, res) {
var data = fs.readFileSync('src/test.md', 'utf-8'); //讀取本地的md文件
res.end(JSON.stringify({
body : marked(data)
}));
} );
//啟動(dòng)端口監(jiān)聽
var server = app.listen(8088, function () {
var host = server.address().address;
var port = server.address().port;
console.log("應(yīng)用實(shí)例,訪問地址為 http://%s:%s", host, port)
});
前端html:
<div id="content"> <h1 class="title">md-to-HTML web app</h1> <div id="article"> </div></div><script type="text/JavaScript" src="js/jquery-1.11.3.min.js"></script><script> var article = document.getElementById('article'); $.ajax({ url: "/getMdFile", success: function(result) { console.log('數(shù)據(jù)獲取成功'); article.innerHTML = JSON.parse(result).body; }, error: function (err) { console.log(err); article.innerHTML = '<p>獲取數(shù)據(jù)失敗</p>'; } });</script>
代碼,沒案例,簡(jiǎn)直就是耍流氓,為了方便大家學(xué)習(xí)交流,每個(gè)知識(shí)點(diǎn)都會(huì)配上對(duì)應(yīng)的案例!文章最下邊有福利喲....
創(chuàng)建節(jié)點(diǎn):$("<div></div>")
創(chuàng)建為本節(jié)點(diǎn):$("<div>我是文本節(jié)點(diǎn)</div>")
創(chuàng)建為屬性節(jié)點(diǎn):$("<div id='test' class='aaron'>我是文本節(jié)點(diǎn)</div>")
例子:var div = $("<div class='right'><div class='aaron'>動(dòng)態(tài)創(chuàng)建DIV元素節(jié)點(diǎn)</div></div>")
$body.append(div)
append(content)向每個(gè)匹配的元素內(nèi)部追加內(nèi)容,這個(gè)操作與對(duì)指定的元素執(zhí)行原生的appendChild方法,將它們添加到文檔中的情況類似。
appendTo(content) 把所有匹配的元素追加到另一個(gè)、指定的元素集合中,實(shí)際上,使用這個(gè)方法是顛倒了常規(guī)的$(A).append(B)的操作,即不是把B追加到A中,而是把A追加到B中。
.after(content) 在匹配元素集合中的每個(gè)元素后面插入指定內(nèi)容,作為兄弟節(jié)點(diǎn)
.before(content) 在匹配的元素前面插入內(nèi)容
1、before與after都是用來對(duì)相對(duì)選中元素外部增加相鄰的兄弟節(jié)點(diǎn)
2、2個(gè)方法都是都可以接收HTML字符串,DOM 元素,元素?cái)?shù)組,或者jQuery對(duì)象,用來插入到集合中每
個(gè)匹配元素的前面或者后面
3、2個(gè)方法都支持多個(gè)參數(shù)傳遞after(div1,div2,....)
.prepend() 向每個(gè)匹配元素的內(nèi)部前置內(nèi)容 和append()類型
.prependTo() 把所有匹配的元素前置到另一個(gè)指定的元素集合中
四個(gè)區(qū)別:
append()向每個(gè)匹配的元素內(nèi)部追加內(nèi)容
prepend()向每個(gè)匹配的元素內(nèi)部前置內(nèi)容
appendTo()把所有匹配的元素追加到另一個(gè)指定元素的集合中
prependTo()把所有匹配的元素前置到另一個(gè)指定的元素集合中
insertBefore() 在目標(biāo)元素前面插入集合中每個(gè)匹配的元素(不支持多參數(shù))
insertAfter() 在目標(biāo)元素后面插入集合中每個(gè)匹配的元素(不支持多參數(shù))
.before()和.insertBefore()實(shí)現(xiàn)同樣的功能。主要的區(qū)別是語(yǔ)法——內(nèi)容和目標(biāo)的位置。 對(duì)于
before()選擇表達(dá)式在函數(shù)前面,內(nèi)容作為參數(shù),而.insertBefore()剛好相反,內(nèi)容在方法前面,它將
被放在參數(shù)里元素的前面
例:$(".test1").before('<p style="color:red">before,在匹配元素之前增加</p>')
$('<p style="color:red">測(cè)試insertBefore方法增加</p>').insertBefore($(".test1"))
empty()這個(gè)方法不僅移除子元素(和其他后代元素),同樣移除元素里的文本
例:$('.hello').empty() //刪除.hello里邊的所有內(nèi)容
remove與empty一樣,都是移除元素的方法,但是remove會(huì)將元素自身移除,同時(shí)也會(huì)移除元素內(nèi)部的一切,包括綁定的事件及與該元素相關(guān)的jQuery數(shù)據(jù)。
例:$('.hello').remove()
$("p").remove(":contains('3')")//找到包含3文本的節(jié)點(diǎn)刪除
detach()讓一個(gè)web元素托管。即從當(dāng)前頁(yè)面中移除該元素,但保留這個(gè)元素的內(nèi)存模型對(duì)象。
例: $("p:first").detach()
.clone()方法深度 復(fù)制所有匹配的元素集合,包括所有匹配元素、匹配元素的下級(jí)元素、文字節(jié)點(diǎn)。
.clone(ture) 表示不僅僅克隆節(jié)點(diǎn),還把附帶的數(shù)據(jù)和事件一并克隆了!
1、clone()方法時(shí),在將它插入到文檔之前,我們可以修改克隆后的元素或者元素內(nèi)容,
$(this).clone().css('color','red') 表示增加了一個(gè)顏色
2、通過傳遞true,將所有綁定在原始元素上的事件處理函數(shù)復(fù)制到克隆元素上
3、clone()方法是jQuery擴(kuò)展的,只能處理通過jQuery綁定的事件與數(shù)據(jù)
4、元素?cái)?shù)據(jù)(data)內(nèi)對(duì)象和數(shù)組不會(huì)被復(fù)制,將繼續(xù)被克隆元素和原始元素共享。深復(fù)制的所有數(shù)據(jù),需要手動(dòng)復(fù)制每一個(gè)
例: $(".aaron1").on('click', function() {
$(".left").append( $(this).clone().css('color','red') )
})//只克隆節(jié)點(diǎn)不克隆事件
.replaceWith( newContent ):用提供的內(nèi)容替換集合中所有匹配的元素并且返回被刪除元素的集合
例:$("p:eq(1)").replaceWith('<a style="color:red">替換第二段的內(nèi)容</a>')
.replaceAll( target ) :用集合的匹配元素替換每個(gè)目標(biāo)元素 目標(biāo)和源和replaceWith相反
例:$('<a style="color:red">替換第二段的內(nèi)容</a>').replaceAll('p:eq(1)')
.wrap( wrappingElement ):在集合中匹配的每個(gè)元素周圍包裹一個(gè)HTML結(jié)構(gòu),即增加父元素<p>p元素</p> 增加:$('p').wrap('<div></div>') 變成了<div><p>p元素</p></div>
.wrap( function ) :一個(gè)回調(diào)函數(shù),返回用于包裹匹配元素的 HTML 內(nèi)容或 jQuery 對(duì)象
例:$('p').wrap(function() {
return '<div></div>'; //與第一種類似,只是寫法不一樣
})
unwarp()方法 ,作用與wrap方法是相反的。將匹配元素集合的父級(jí)元素刪除,保留自身(和兄弟元素,如果存在)在原來的位置。
例:$('p').unwarp(); //刪除p的父節(jié)點(diǎn)
.wrapAll( wrappingElement ):給集合中匹配的元素增加一個(gè)外面包裹HTML結(jié)構(gòu)
.wrapAll( function ) :一個(gè)回調(diào)函數(shù),返回用于包裹匹配元素的 HTML 內(nèi)容或 jQuery 對(duì)象通過回調(diào)的方式可以單獨(dú)處理每一個(gè)元素
例:$('p').wrapAll('<div></div>') 結(jié)果:
<div>
<p>p元素</p>
<p>p元素</p>
</div> //給所有的p增加父元素,增加一個(gè),不是每個(gè)單獨(dú)增加父元素
$('p').wrapAll(function() {
return '<div><div/>';
})該方法返回結(jié)果是:
<div>
<p>p元素</p>
</div>
<div>
<p>p元素</p>
</div>
什么情況? 兩個(gè)例子中的結(jié)果為什么不一樣呢?小伙伴們自己查查咋回事呢?
注意:.wrapAll()函數(shù)可以接受任何字符串或?qū)ο螅梢詡鬟f給$()工廠函數(shù)來指定一個(gè)DOM結(jié)構(gòu)。這種
結(jié)構(gòu)可以嵌套多層,但是最內(nèi)層只能有一個(gè)元素。所有匹配元素將會(huì)被當(dāng)作是一個(gè)整體,在這個(gè)整體的外部用指定的 HTML 結(jié)構(gòu)進(jìn)行包裹。
.wrapInner( wrappingElement ):給集合中匹配的元素的內(nèi)部,增加包裹的HTML結(jié)構(gòu)
例:<div>p元素</div><div>p元素</div> 執(zhí)行:$('div').wrapInner('<p></p>')變成了:
<div><p>p元素</p></div>
<div><p>p元素</p></div>
.wrapInner( function ) :允許我們用一個(gè)callback函數(shù)做參數(shù),每次遇到匹配元素時(shí),該函數(shù)被執(zhí)行,返回一個(gè)DOM元素,jQuery對(duì)象,或者HTML片段,用來包住匹配元素的內(nèi)容
例:$('div').wrapInner(function() {
return '<p></p>';
})
學(xué)累了吧,來點(diǎn)實(shí)惠的?
1+1=?
不要往下看了,下面真的沒內(nèi)容了
.......
.......
哈哈 ,適可而止吧
*請(qǐng)認(rèn)真填寫需求信息,我們會(huì)在24小時(shí)內(nèi)與您取得聯(lián)系。