1.利用"大綱"視圖
打開PPT演示文稿,單擊"大綱",在左側"幻燈片/大綱”任務窗格的“大綱”選項卡里單擊一下鼠標,按"Ctrl+A"組合健全選內容,然后使用"Ctrl+C"組合鍵或右鍵單擊在快捷菜單中選擇"復制"命令,然后粘貼到Word里。
提示:這種方法會把原來幻燈片中的行標、各種符號原封不動的復制下來。
2.利用"發送"功能巧轉換
打開要轉換的PPT幻燈片,單擊"文件"→"發送"→"MicrosoftWord"菜單命令。然后選擇"只使用大綱"單選按鈕并單擊"確定"按鈕,等一會就發現整篇PPT文檔在一個Word文檔里被打開。
提示: 在轉換后會發現Word有很多空行。在Word里用替換功能全部刪除空行可按"Ctrl+H"打開"替換"對話框,在"查找內容"里輸入"^p^p",在"替換為"里輸入"^p",多單擊幾次"全部替換"按鈕即可。("^"可在英文狀態下用"Shift+6"鍵來輸入。)
3.利用"另存為"直接轉換
打開需要轉換的幻燈片,點擊"文件"→"另存為",然后在"保存類型"列表框里選擇存為"rtf"格式。現在用Word打開剛剛保存的rtf文件,再進行適當的編輯即可實現轉換。
4.PPTConverttoDOC軟件轉換
PPTConverttoDOC是綠色軟,解壓后直接運行,在運行之前請將Word和PPT程序都關閉。選中要轉換的PPT文件,直接拖曳到"PPTConverttoDOC"程序里。單擊工具軟件里的"開始"按鈕即可轉換,轉換結束后程序自動退出。
提示:如果選中"轉換時加分隔標志",則會在轉換好的word文檔中顯示當前內容在原幻燈片的哪一頁。轉換完成后即可自動新建一個Word文檔,顯示該PPT文件中的所有文字。
ps:第四種慎用,百度上很多所謂的那個軟件都是有病毒的,毒性不小,一般的殺毒軟件查不出~~
PDF文檔的規范性使得瀏覽者在閱讀上方便了許多,但倘若要從里面提取些資料,實在是麻煩的可以。
Adobe Acrobat 7.0 Professional 是編輯PDF的軟件。
用Adobe Acrobat 7.0 Professional 打開他另存為WORD試試看。
或者用ScanSoft PDF Converte,安裝完成后不須任何設置,它會自動整合到Word中。
當我們在Word中點擊“打開”菜單時,在“打開”對話框的“文件類型”下拉菜單中可以看到“PDF”選項,這就意味著我們可以用Word直接打開PDF文檔了!
ScanSoft PDF Converter的工作原理其實很簡單,它先捕獲PDF文檔中的信息,分離文字、圖片、表格和卷,再將它們統一成Word格式。由于Word在打開 PDF文檔時,會將PDF格式轉換成DOC格式,因此打開速度會較一般的文件慢。打開時會顯示PDF Converter轉換進度。轉換完畢后可以看到,文檔中的文字格式、版面設計保持了原汁原味,沒有發生任何變化,表格和圖片也完整地保存下來了,可以輕松進行編輯。
除了能夠在Word中直接打開PDF文檔外,右擊PDF文檔,在彈出菜單中選擇“Open PDF in Word”命令也可打開該文件。另外,它還會在Outlook中加入一個工具按鈕,如果收到的電子郵件附件中有PDF文檔,就可以直接點擊該按鈕將它轉換成Word文件。
有時我們在網上搜索到PDF格式的文件,同樣可以通過右鍵菜單的相關命令直接在Word中打開它。
我們通常用Word來錄入、編輯、打印材料,而有時需要將已經編輯、打印好的材料,做成PowerPoint演示文稿,以供演示、講座使用。如果在PowerPoint中重新錄入,既麻煩又浪費時間。如果在兩者之間,通過一塊塊地復制、粘貼,一張張地制成幻燈片,也比較費事。
其實,我們可以利用PowerPoint的大綱視圖快速完成轉換。
首先,打開Word文檔,全部選中,執行“復制”命令。
然后,啟動PowerPoint,如果是Word 2002版,選擇“普通”視圖,單擊“大綱”標簽;
如果沒有“大綱”和“幻燈片”選項卡,顯示的方法是在“視圖”菜單上,單擊“普通(恢復窗格)”或在窗口的左下角,單擊〔普通視圖(恢復窗格)〕按鈕;
如果是Word 97/2000版,可直接選擇“大綱”視圖,將光標定位到第一張幻燈片處,執行“粘貼”命令,則將Word文檔中的全部內容插入到了第一幻燈片中。
接著,可根據需要進行文本格式的設置,包括字體、字號、字型、字的顏色和對齊方式等;
然后將光標定位到需要劃分為下一張幻燈片處,直接按回車鍵,即可創建出一張新的幻燈片;如果需要插入空行,按〔Shift+Enter〕。
經過調整,很快就可以完成多張幻燈片的制作。
最后,還可以使用“大綱”工具欄,利用“升級”、“降級”、“上移”、“下移”等按鈕進一步進行調整。
反之,如果是將PowerPoint演示文稿轉換成Word文檔,同樣可以利用“大綱”視圖快速完成。
方法是將光標定位在除第一張以外的其他幻燈片的開始處,按〔BackSpace〕(退格鍵),重復多次,將所有的幻燈片合并為一張,然后全部選中,通過復制、粘貼到Word中即可。
方法一: 用以上方法將PDF轉DOC,再用WORD將DOC轉TXT
方法二:用PDF2TXT 3.1漢化版
PDF2TXT 3.1漢化版可以快速把.pdf文件轉換為.txt或.htm(.html)文件的小工具.操作簡單,快捷注:Adobe Acrobat Reader6.0以上版本可以直接把PDF文件另存為txt文件。
方法一:用PDFTOOLS
PDF是Adobe公司開發的作為全世界可移植電子文檔的通用格式,它能夠正確保存源文件的字體、格式、顏色和圖片,使文件的交流可以輕易跨越應用程序和系統平臺的限制。但是,一些文檔的特殊操作(如提取PDF文檔中的一段文字或圖片)對于一般用戶來說,不是那么容易上手的。不過現在有了PDFTools這款神奇工具后,你就可以輕松地把PDF文檔的內容轉換成HTM、TXT和BMP這三種常用的文件格式。
為了PDFTools能更好地為我們服務,我們首先得對它進行一番設置。在主界面中點擊菜單“文件→設置”或直接按“Ctrl+D”組合鍵調出設置對話框。在“常規設置”標簽頁中設置頁面的轉換范圍,默認為全部轉換,你可以點擊下拉按鈕,選擇“選擇指定頁”后,輸入轉換的起始頁和停止頁。未注冊版本只能轉換PDF文檔的前五頁內容。
“輸出設置”框的內容是設置輸入圖片的像素和JPEG圖片質量。選中“轉換后瀏覽”的復選框,那么當文檔轉換完成后,程序就會調出對應程序打開轉換后的文件。“PDF2HTM”標簽頁只有一“使用完全處理模式”復選框,依實際情況決定。
HTM是網頁的通用格式,但PDFTools轉換HTM文件后,所形成的HTM文件并不包含有PDF文檔中的文字,而是將PDF文檔的內容轉換成JPG圖像文件,然后再用HTML語言將圖片嵌入到網頁中。生成的HTM文件是一個框架網頁,即左邊是各頁面的鏈接窗口,右邊的內容就是JPG圖片了。如果你用的是IE6的話,當鼠標移到右邊窗口后,就會浮出一排快捷工具欄。
首先選擇菜單“工具→PDF轉HTM”,使其轉為HTM模式。接著打開文件有多種操作方式:通過菜單“文件→打開”直接按“Ctrl+F”鍵后調出打開對話框選擇文件,或者直接把待轉換的PDF文檔拖到PDFTools主界面中,軟件馬上開始轉換。轉換后的文件是保存在源文件中,而且還有相應名稱的子文件夾,里面就是一些JPG圖片和其它資源。最后彈出一個提示窗口,點擊“確定”即可。
一不小心,刪錯了,還把回收站清空了,咋辦啊?
只要三步,你就能找回你刪掉并清空回收站的東西
步驟:
1、單擊“開始——運行,然后輸入regedit (打開注冊表)
2、依次展開:HEKEY——LOCAL——MACHIME/SOFTWARE/microsoft/WINDOWS/ CURRENTVERSION/EXPLORER/DESKTOP/NAMESPACE
在左邊空白外點擊“新建”,選擇:“主鍵”,把它命名為“645FFO40——5081——101B——9F08——00AA002F954E”
再把右邊的“默認”的主鍵的鍵值設為“回收站”,然后退出注冊表。就OK啦。
3、要重啟計算機。
只要機器沒有運行過磁盤整理。系統完好.任何時候的文件都可以找回來。
覺得有用就分享給身邊的小伙伴吧~
尚德機構——學習是一種信仰,歡迎關注尚德機構微信公眾號(ID:shangdegonghui),獲取更多學習資訊。
、基本概念
靜態語言:編譯方式執行(如C語言);
腳本語言:解釋方式執行(如Python語言);
Python重要特點:
具體特點:
例子:
#斐波那契數列(F(n) = F(n-2) + F(n-1)), n >= 2) a, b = 0, 1 while a < 1000 : print(a, end = ',') a, b = b, a + b
#計算圓半徑 r = 25 area = 3.1415 * r * r print(area) print('{:.2f}'.format(area)) #兩位小數
#繪制五角星 from turtle import * color('red', 'red') begin_fill() for i in range(5): fd(200) rt(144) end_fill() done()
#程序運行計時 import time limit = 10 * 1000 * 1000 start = time.perf_counter() while True: limit -= 1 if limit <= 0: break delta = time.perf.counter() - start print('時間是:{}秒'.format(delta))
#繪制七種圓圈 import turtle colors = ['red', 'orange', 'yellow', 'green', 'blue', 'indigo', 'purple'] for i in range(7): c = color[i] turtle.color(c.c) turtle.begin_fill() turtle.rt(360/7) turtle.circle(50) turtle.end_fill() turtle.done()
二、Python基本語法元素
縮進:表示程序的邏輯。指每行語句開始前的空白局域,用來表示Python程序之間的包含和層次關系。
變量:可以隨時命名、賦值、使用。
命名:首字符不能是數字,中間不能出現空格,長度無限制。
保留字(keyword):
| and | as | assert | break | class | continue | | def | del | elif | else | except | False | | finally | for | from | global | if | import | | in | is | lambda | None | nonlocal | not | | or | pass | return | True | try | while | | with | yield | | | | |
數字類型:整數、浮點數、復數
字符串:雙引號與單引號作用相同
賦值:<變量> = <表達式>
引用:
import <庫名稱> <庫名稱>.<函數名稱>()
input():<變量> = input(“<提示性文字>”)
a = input('請輸入:') # >請輸入: X print(a) # >X
eval():去掉字符串最外側的引號。<變量> = eval(“<字符串>”)
print():
實例解析——倒背如流:
s = input('請輸入一段文本:') i = len(s) - 1 while i >= 0 : print(s[i], end = '') i = i - 1
s = input('請輸入一段文本:') i = -1 while i >= -1 * len(s): print(s[i], end = '') i = i -1
三、基本數據類型
種類引導符號描述十進制無\二進制0b 或 0B由字符0和1組成,例:0b1010,0B1010八進制0o 或 0O由字符0到7組成,例:0o1010,0O1010十六進制0x 或 0X由字符0到9、a 到 f 或 A 到 F 組成,例:0x1010,0X1010
不同進制的整數可以直接運算
必須帶有小數部分,小數可以是0。
科學計算法使用字母 e 或 E 作為冪的符號,以10為基數。
不確定尾數:兩個浮點數運算,有一定概率在運算結果后增加一些不確定尾數
>>> 0.1 + 0.2 0.30000000004
round()函數:對字符串四舍五入。
round(1.2345, 2) = 1.23
基本單位元素 j 或 J , <a href="https://www.codecogs.com/eqnedit.php?latex=\fn_cs&space;j&space;=&space;\sqrt{-1}" target="_blank"><img src="https://latex.codecogs.com/gif.latex?\fn_cs&space;j&space;=&space;\sqrt{-1}" title="j = \sqrt{-1}" /></a>,叫做“虛數單位”。
復數可以看作是二元有序實數對(a, b),表示 a + bj,a 是實數部分,b 是虛數部分。
當 b 是1時,‘1’不能省略,即’1j’
對于復數 z,可以用 z.real 和 z.imag 分別獲得它的實部和虛部
>>> (1.23e4 + 5.67e4j).real 12300.0 >>> (1.23e4 + 5.67e4j).imag 56700.0 >>> 1.23e4 + 5.67e4j.imag #先獲得5.67e4j的虛部,再與1.23e4進行求和計算 69000.0
操作符描述x + y和x - y差x * y積x / y商,產生結果為浮點數x // y整數商,即:不大于 x 與 y 之商的最打整數x % y商的余數,稱為模運算-x負值,即 x * (-1)+xx本身x ** yx 的 y 次冪
基本規則:
所有二元運算操作符都可以與賦值符號(=)相連,形成增強賦值操作符(+=,-=等)。用 ‘op’ 表示運算操作符,增強賦值操作符的用法如下:
? x op= y 等價于 x = x op y,op 與 = 之間不用加空格
函數描述abs(x)x的絕對值divmod(x, y)(x // y, x % y),輸出為二元組形式(也稱為元組類型)pow(x, y) 或 pow(x, y ,z)x y 或 (x y) % z,冪運算round(x) 或 round(x, d)對 x 四舍五入,保留 d 位小數max(a, b, c, d, …)最大值min(a, b, c, d, …)最小值
單行字符串可以由一對單引號或雙引號作為邊界表示
多行字符串可以由一對三單引號或三雙引號作為邊界表示
反斜杠字符(\)表示“轉義”,即該字符與后面相鄰的一個字符共同組成了新的含義。
\ 的額外作用:續行
<字符串>.format(<逗號分隔的參數>)
*若在字符串中直接輸出大括號,使用 {{}} 表示 {}
{<參數符號>:<格式控制標記>}
<填充><對齊><寬度><,(英文逗號)><.精度><類型>用于填充的單個字符< 左對齊;> 右對齊;^ 居中槽的設定輸出寬度數字的千位分隔符,適用于整數和浮點數浮點數小數部分的精度或字符串的最大輸出長度整數類型:b, c, d, o, x, X;浮點數類型:e, E, f, %
整數類型:
浮點類型:
>>> '{:.2f}'.format(3.14159) #輸出小數后2位 '3.14' >>> '{:X}'.format(1010) #輸出十六進制形式 '3F2' >>> '{:.5}'.format('這是一個很長的字符串') #輸出前5位 '這是一個很' >>> '{:-^10}'.format('PYTHON') #居中并以 - 填充 '--PYTHON--'
操作符描述x + y連接兩個字符串 x 與 yx n 或 n x復制 n 次字符串 xx in s如果 x 是 s 的字符串,返回True,否則False
函數描述len(x)返回 x 的長度,也可以返回其他組合數據類型的元素個數str(x)返回 x 的字符串形式chr(x)返回 Unicode 編碼 x 對應的單字符ord(x)返回 x 表示的 Unicod 編碼hex(x)返回整數 x 對應十六進制的小寫形式字符串oct(x)返回整數 x 對應八進制的小寫形式字符串
方法描述str.lower(x)返回 str 全部小寫str.upper(x)返回 str 全部大寫str.split(sep = None)返回由 str 根據 sep 被分割構成的列表,默認以空格分割str.count(sub)返回 sub 出現的次數str.replace(old, new)返回 old 被替換為 new 的 strstr.center(width, fillchar)字符串居中函數,fillchar 可選str.strip(chars)從 str 中去掉其左右 chars 中的字符str.join(iter)將 iter 變量的每一個元素后增加一個 str
例:
>>> 'Python is an excellent language.'.replace('a', '#') 'Python is #n excellent l#ngu#ge.' >>> 'Python'.center(20, '=') '===Python===' >>> 'Python'.center(2, '=') 'Python' #當 width 小于 str 長度,返回 str >>> ' ==Python== '.strip(' =n') 'Pytho' >>> ','.join('12345') '1,2,3,4,5'
type(x):對 x 進行類型判斷,適用于任何數據類型
n = eval(input('請輸入一個數字:')) if type(n) == type(123): print('輸入的是整數') elif type(n) == type(11.3): print('輸入的是浮點數') else : print('無法判斷')
int(x):將 x 轉為整數
float(x):將 x 轉為浮點數
str(x):將 x 轉為字符串
見 CEncode.py CDecode.py CCEncode.py CCDecode.py
Unicode 范圍:
四、程序的控制結構
具體圖省略
描述一個計算問題的程序過程有多種方式:IPO、流程圖、偽代碼和程序代碼。
三種基本結構:
A.單分支結構
if <條件> : <語句塊>
<條件>可一個或多個,用 and 與 or 連接多個條件。
B.二分支結構
if <條件> : <語句塊1> else : <語句塊2>
更簡潔的表達方式:適合<語句塊1>和<語句塊2>都只包含簡單表達式的情況。
<表達式1> if <條件> else <表達式2>
s = eval(input('請輸入一個整數:')) token = '' if s % 3 == 0 and s % 5 == 0 else "不" print('這個數字{}能夠同時被3和5整除。'.format(token))
C.多分支結構
if <條件1> : <語句1> elif <條件2> : <語句2> ... else : <語句N>
**按照多分支結構的代碼順序依次評估判斷條件,尋找并執行第一個結果為 True 條件對應的語句塊,然后跳過整個 if - elif -else 結構。(只有條件為 False 才會進入 elif)
score = eval(input('輸入成績:')) if score >= 90 : grade = 'A' elif score >= 80 : grade = 'B' elif score >= 70 : grade = 'C' elif score >= 60 : grade = 'D' else : grade = 'E' print('對應的等級是:{}'.format(grade))
判斷條件及組合:判斷條件可以使用任何能夠產生 True 或 False 的語句或函數
操作符數學符號含義<<小于<=$\leq$小于等于>=$\geq$大于等于>>大于===等于!=$\neq$不等于
Python 中,任何非零的數值、非空的數據類型都等價于 True,反之可以可直接用作判斷條件。
>>> 0 == False True >>> '' == True False
not : 否;and : 與;or : 或
for <循環變量> in <遍歷結構> : <語句>
遍歷結構可以是字符串、文件、range()函數或組合數據類型等。
字符串:
for <循環變量> in <字符串> : <語句塊>
range()函數:可以制定語句塊的循環次數。
for <循環變量> in range(<循環次數>) : <語句塊>
擴展模式:
for <變量> in <結構> : <語句1> else : <語句2>
當 for 循環正常結束后,程序會執行 else 語句。
while <條件> : <語句塊>
<條件>與 if 一樣,結果為 True 或 False。
當判斷條件為 True,執行循環體語句,結束后再次判斷條件;當 False,循環終止,執行與 while 同級別縮進的后續語句。
else 擴展:
while <條件> : <語句1> else : <語句2>
break : 用來跳出最內層 for 或 while 循環,脫離后從循環后的代碼繼續執行。
while True : s = input('請輸入名字(按Q退出):') if s == 'Q' : break print('輸入的是:', s) print('程序退出')
continue : 結束當前當次循環,跳出循環體下面尚未執行的語句,但不跳出整個循環。
for s in 'PYTHON' : if s == 'Y' : continue print(s, end = '')
Python 用 try 和 except 進行異常處理。
try : <語句1> except : <語句2>
語句1是正常執行的程序內容,當執行這個語句發生異常時,則執行 except 后的語句2。
try : n = eval(input('請輸入一個數字:')) print('輸入數字的3次方的值為:', n ** 3) except : print('輸入錯誤,請輸入一個數字!')
import random target = random.randint(1, 1000) count = 0 while True : guess = eval(input('請輸入一個猜測的整數(1至1000):')) count = count + 1 if guess > target : print('大了') elif guess < target : print('小了') else : print('猜對了') break print('此輪的猜測次數是:', count)
import random target = random.randint(1, 1000) count = 0 while True : try : guess = eval(input('請輸入一個猜測的整數(1至1000):')) except : print('輸入有誤,請重試。') continue count = count + 1 if guess > target : print('大了') elif guess < target : print('小了') else : print('猜對了') break print('此輪的猜測次數是:', count)
五、函數和代碼復用
def <函數名>(<參數列表>) : <函數體> return <返回值列表>
def fact(n) : s = 1 for i in range(1, n+1): s *= i return s print (fact(100))
使用步驟:
(1)可選參數傳遞
def <函數名>(<非可選參數>, <可選參數> = <默認值>) : <函數體> return
>>> def multiply(x, y = 10) : print(x * y) >>> mulitply(99) 990 >>> multiply(99, 2) 198
(2)參數名稱傳遞
>>> def multiply(x, y = 10) : print(x * y) >>> multiply(x = 99) 990 >>> multiply(y = 2, x = 99) 198
不需要保持參數傳遞的順序,參數之間的順序可以任意調整。
(3)函數的返回值
return 語句用來結束函數并將程序返回到函數被調用的位置繼續執行。
(1)局部變量
在函數內部定義的變量,僅在函數內部有效,當函數退出時變量將不再存在。
>>> def mul(x, y = 10) : z = x * y #z是局部變量 return z >>> s = mul(99, 2) >>> print(s) 198 >>> print(z) error : ...
(2)全局變量
在函數之外定義的變量,在程序執行全過程有效。全局變量在函數內部使用時,需提前使用 global 聲明。
>>> n = 2 #n是全局變量 >>> def mul(x, y = 10) : global n return x * y * n >>> s = mul (99, 2) >>> print(s) 396
好處:
模塊化設計:指通過函數的封裝功能將程序劃分為主程序、子程序和子程序間關系的表達。
模塊化設計基本要求:
耦合性:指程序結構中各模塊之間相互關聯的程度,它取決于各模塊間接口的復雜程度和調用方式。
略
六、組合數據類型
能夠表示多個數據的類型成為組合數據類型
(1)集合類型
包含0個或多個數據的無序組合,用大括號表示,集合中的元素可以動態增加或刪除。
元素類型只能是不可變數據類型:整數、浮點數、字符串。
使用集合類型能夠過濾掉重復元素
>>> T = {1010, '1010', 12.3, 1010, 1010} >>> print(T) {1010, '1010', 12.3}
操作符及運算描述S - T返回一個新集合,包括在集合 S 中但不在集合 T 中的元素S & T返回一個新集合,包括同時在集合 S 和 T 中的元素S ^ T返回一個新集合,包括集合 S 和 T 中非共同元素S \T返回一個新集合,包括集合 S 和 T 中所有元素
函數或方法描述S.add(x)如果數據項 x 不在集合 S 中,將 x 增加到 SS.remove(x)如果 x 在集合 S 中,移除 x;不在則產生 KeyError 異常S.clear()移除 S 中所有數據項len(S)返回集合 S 元素個數x in S如果 x 是 S 的元素,返回 True;否則 Falsex not in S如果 x 不是 S 的元素,返回 True;否則 False
set(x) 函數將其他的組合數據類型變成集合類型,也可以生成空集合變量。
>>> S = set('知之為知之不知為不知') >>> S {'不', '為', '之', '知'} >>> for i in S : print(i, end = '') 不為之知
(2)序列類型
操作符描述x in s如果 x 是 s 的元素,返回 True,否則 Falsex not in s如果 x 不是 s 的元素,返回 True,否則 Falses + t連接 s 和 ts n 或 n s將序列 s 復制 n 次s[i]索引,返回 s 的第 i 個元素s[i : j]切片,返回包含 s 第 i 到 j 個元素的子序列(不包含 j)s[i : j : k]步驟切片,返回包含 s 第 i 到 j 個元素以 k 為步數的子序列len(s)s 的元素個數(長度)min(s)s 中的最小元素max(s)s 中的最大元素s.index(x)s 中第一次出現元素 x 的位置s.count(x)s 中出現 x 的總次數
(3)映射類型
是序列類型的一種擴展,由用戶來定義序號,即鍵,用其去索引具體的值。
(1)定義
列表是包含0個或多個元組的有序序列,屬于序列類型。
可進行元素的增加、刪除、替換、查找。
沒有長度限制,元素類型可以不同,不需要預定長度。
列表類型用中括號,也可以通過 list() 函數將集合或字符串類型轉換成列表類型。
>>> list('舉個栗子') ['舉', '個', '栗', '子']
(2)索引
沿用序列類型的索引方式,即正向遞增序號或反負遞減序號,用中括號作為索引操作符,不得超過列表的元素范圍,否則 IndexError。
>>> ls = [1010, '1010', [1010, '1010'], 1010] >>> ls = [3] 1010 >>> ls[-2] [1010, '1010']
可以用遍歷循環進行操作
for <循環變量> in <列表變量> : <語句塊>
>>> ls = [1010, '1010', [1010, '1010'], 1010] >>> for i in ls : print(i * 2) 2020 10101010 [1010, '1010', 1010, '1010'] 2020
(3)切片
切片后的結果也是列表類型
<列表或列表變量>[N : M] 或 <列表或列表變量>[N : M : K]
在 [ ] 中表示區間需要用冒號(:),表示枚舉使用英文逗號
一般要求 N 小于 M,當 N 大于 M 時,返回空列表
(1)操作函數
函數描述len(ls)列表 ls 的元素個數(長度)min(ls)ls 中的最小元素max(ls)ls 中的最大元素list(x)將 x 轉變成列表類型
(2)列表的操作方法
<列表變量>.<方法名稱>(<方法參數>)
方法描述ls.append(x)在 ls 最后增加 xls.insert(i, x)在 ls 第 i 位置增加 xls.clear()刪除 ls 中所有元素ls.pop(i)將 ls 中第 i 項元素取出并從 ls 中刪除ls.remove(x)將 ls 中出現的第一個 x 刪除ls.reverse()ls 中元素反轉ls.copy()生成新列表,復制 ls
del
對列表元素或片段進行刪除
>>> ls = [1, 2, 3, 4] >>> del ls[1] >>> ls [1, 3, 4]
ls.copy() 生成的新列表不受舊列表影響
>>> ls = [1, 2, 3, 4] >>> lsn = ls.copy() >>> ls.clear() >>> print(lsn) [1, 2, 3, 4] >>> lt = [1, 2, 3, 4] >>> ls = lt >>> lt.clear() >>> print(ls) []
<值> = <字典變量>[<鍵>]
>>> d = {'20101':'小明', '20102':'小紅', '20103':'小白'} >>> print(d['20102']) 小紅
大括號 { } 可以創建字典,索引和賦值可以增加元素。
>>> t = {} >>> t['20104':'小新'] >>> print(t) {'20104':'小新'}
字典是存儲可變數量鍵值對的數據結構,鍵和值可以是任意數據類型。
(1)操作函數
函數描述len(d)字典 d 的元素個數(長度)min(d)字典 d 中鍵的最小值max(d)字典 d 中鍵的最大值dict()生成一個空字典
(2)操作方法
<字典變量>.<方法名稱>(<方法參數>)
方法描述d.keys()返回所有的鍵信息d.values()返回所有的值信息d.items()返回所有的鍵值對d.get(key, default)鍵存在則返回相應值,否則返回默認值d.pop(key, default)鍵存在則返回并刪除值對,否則返回默認值d.popitem()隨機從字典中去取出一個鍵值對,以元組(key, value)形式返回,并從字典中刪除d.clear()刪除所有的鍵值對
>>> d = {'1':'A', '2':'B', '3':'C'} >>>d.items() dict_items([('1','A'), ('2', 'B'), ('3', 'C')]) >>> d.get('4') >>> d.get('4', '不存在') '不存在' >>> del d['1'] >>> print(d) {'2':'B', '3':'C'} >>> '1' in d True >>> '4' in d False >>> for k in d: print('The key and value are {} and {}'.format(k, d.get(k))) The key and value are 1 and A The key and value are 2 and B The key and value are 3 and C
#CalHamlet.py def getText(): txt = open('hamlet.txt', 'r').read() txt = txt.lower() for ch in '!"#$&%()*+,-./:;<=>?@[\\]^_{|}~': txt = txt.replace(ch, '') return txt hamletTxt = getText() words = hamletTxt.split() counts = {} for word in words: counts[word] = count.get(word, 0) + 1 items = list(counts.items()) items.sort(key = lambda x:x[1], reverse = True) for i in range(10): word, count = items[i] print('{0:<10}{1:>5}'.format(word, count))
七、文件和數據格式化
兩種類型:文本文件、二進制文件
存儲在輔助存儲器上的一組數據序列。
(1)文件的類型
文本文件:由單一特定編碼的字符組成;
二進制文件:直接由比特0和比特1組成,沒有統一的字符編碼,文件內部數據的組織格式與文件用途有關。
(2)打開和關閉
文件的存儲狀態是默認狀態,打開后變成占用狀態,關閉后再次回到存儲狀態。
open() 函數:打開一個文件,并返回一個操作這個文件的變量
`<變量名> = open(<文件路徑及文件名>, <打開模式>)
打開模式含義‘r’只讀,如果文件不存在返回異常 FileNotFoundError,默認值‘w’覆蓋寫,文件不存在則創建,存在則完全覆蓋原文件‘x’創建寫,文件不存在則創建,存在則返回異常 FileExistsError‘a’追加寫,文件不存在則創建,存在則在源文件最后追加內容‘b’二進制文件模式‘t’文本文件模式,默認值‘+’與 r w x d 一同使用,在原功能上增加讀寫功能
<變量名>.close() 關閉文件,釋放文件的使用授權。
表示路徑時,使用 \ 或 / 代替 \
(3)文件的讀寫
讀取方法含義f.read(size = -1)從文件中讀入整個文件內容。參數可選,讀入前size長度的字符串或字節流f.readline(size = -1)從文件中讀入一行內容。參數可選,讀入該行前size長度的字符串或字節流f.readlines(hint = -1)從文件中讀入所有行,以每行為元素形成一個列表。參數可選,讀入 hint 行f.seek(offset)改變當前文件操作指針的位置。offset : 0為文件開頭;2為文件結尾
寫入方法含義f.write(s)向文件寫入一個字符串或字節流f.writelines(s)將一個元素為字符串的列表整體寫入文件
f.write(s) 寫入字符串 s,每次寫入后,將會記錄一個寫入指針
f = open('d:/c.txt', 'w') f.write('123\n') f.write('456\n') f.close()
要顯式地使用 \n 進行分行
ls = ['123', '456', '789'] f = open('d:/d.txt', 'w') f.writelinese(ls) f.close()
(1)一維數據
由對等關系的有序或無序數據構成,采用線性方式組織。
任何表現為序列或集合的內容都可以看作是一維數據。
(2)二維數據
也稱表格數據,由關聯系數構成,采用二維表格方式組成。
(3)高維數據
由鍵值對類型的數據組成,采用對象方式組織,可以多層嵌套。
(1)表示
由于是線性結構,因此主要采用列表形式表示。
(2)存儲
4種方法:
逗號分隔的存儲格式為 CSV 格式(Comma_Separated Values),它是一種通用的、相對簡單的文件格式
ls = ['北京', '上海', '廣州'] f = open('city.csv', 'w') f.write(','.join(ls) + '\n') f.close()
(3)處理
首先需要從 CSV 文件讀入一維數據,并將其表示為列表對象。
默認包含了一個換行符 \n。采用 .strip() 去掉
f = open('city.csv', 'r') ls = f.read().strip('\n').split(',') f.close() print(ls)
(1)表示
二維數據可以采用二維列表來表示。
二維數據一般采用相同的數據類型存儲
(2)存儲
用 csv 文件存儲
# ls 代表二維列表 f = open('cpi.csv', 'w') for row in ls: f.wrtie(','.join(row) + '\n') f.close()
(3)處理
f = open('cpi.csv', 'r') ls = [] for line in f : ls.append(line.strip('\n').split(',')) f.close() print(ls)
與一維列表不同,二維列表一般需要借助循環遍歷實現對每個數據的處理
for row in ls : for item in row: 對第 row 行第 item 列元素進行處理
對二維數據進行格式化輸出,打印成表格形狀:
#此出省去從 CSV 獲得的 ls for row in ls: line = '' for item in row: line += '{:10}\t'.format(item) #\t 橫行制表符 print(line)
略
(1)zip() 函數
用來獲取兩個組合數據類,并將它的元素交織返回
>>> x = [1, 2, 3] >>> y = [4, 5, 6] >>> print(zip(x, y)) [(1, 4), (2, 5), (3, 6)]
(2)線性回歸代碼
$\hat y$ = b$\hat x$ + a
def means(data): return sum(data) / len(data) def linearRegression(xlist, ylist): xmeans, ymeans = means(xlist), means(ylist) bNumerator = -len(xlist) * xmeans * ymeans bDenominator = -len(xlist) * xmeans ** 2 for x, y in zip(xlist, ylist): bNumerator += x * y bDenominator += x ** 2 b = bNumerator / bDenominator a = ymeas - b * xmeans return a, b
八、Python 計算生態
程序設計是實踐計算思維的重要手段
本質:抽象和自動化
算法(Algorithm):解決問題的清晰指令
(1)自頂向下設計:最重要是頂層設計
是一種開發復雜程序最具價值的設計理念和工具,設計過程自然且簡單,自頂向下設計通過封裝實現抽象,利用了模塊化設計的思想。
見 MatchAnalysis.py
(2)自底向上執行
import 開展單元測試:
import <源文件名稱>
https://pypi.python.org/pypi
函數庫并非都采用 Python 編寫,很多采用 C 等語言編寫的庫可以通過簡單的接口封裝供 Python 程序調用。“膠水語言”。
Python 第三方程序包:
見 getNGurl.py
九、Python 標準庫概覽
turtle 是 Python 重要的標準庫之一,它能夠進行基本的圖形繪制。概念誕生于1969年,成功應用于 LOGO 編程語言。
基本框架:一個龜在坐標系中爬行,其爬行軌跡形成了繪制圖形。
剛開始時,位于正中央,前進方向為水平右方。
三種引用方式:
(1)窗體函數:turtle.setup()
`turtle.setup(width, height, startx, starty)
作用:設置主窗體的大小和位置。
width:窗口寬度。整數:像素值;小數:窗口寬度與屏幕的比例。
height:窗口高度。
startx:窗口左側與屏幕左側的像素距離。None:水平中央。
starty:窗口頂部與屏幕頂部的像素距離。None:垂直中央。
(2)畫筆狀態函數
函數作用pendown()放下畫筆penup()提起畫筆,與 pendown() 配對使用pensize()設置畫筆線條的粗細pencolor()設置顏色begin_fill()填充前,調用end_fill()填充結束filling()返回填充的狀態,True 為填充,False 為未填充clear()清空當前窗口,但不改變當前畫筆位置reset()清空并重置screensize()設置畫布的長與寬showturtle()顯示畫筆的 turtle 形狀hideturtle()隱藏畫筆的 turtle 形狀isvisible()如果 turtle 可見,則返回 Truewrite(str, font = None)輸出 font 字體的 str
(3)畫筆運動函數
函數作用forward()前進指定距離backward()后退指定距離right(angle)向右旋轉 angle 角度left(angle)向左旋轉 angle 角度goto(x, y)移動到(x,y)處setx()將當前 x 軸移動到指定位置sety()將當前 y 軸移動到指定位置setheading(angle)設置當前朝向為 angle 角度home()設置當前位置為原點,朝向東circle(radius, e)繪制一個半徑 r 和角度 e 的園或弧形dot(r, color)繪制一個半徑 r 和顏色的圓點undo()撤銷畫筆最后一個動作speed()設置繪制速度,參數為0~10
用于產生各種分布的偽隨機數序列。采用梅森旋轉算法(Mersenne twiste)生成偽隨機數序列,可用于除隨機性要求更高的加密算法外大多數工程應用。
最基本函數:random.random(),它生成 [0.0, 1.0] 之間的小數
函數作用seed(a = None)初始化隨機數種子,默認值為當前系統時間random()生成 [0.0, 1.0] 之間的小數randint(a, b)生成一個 [a, b] 之間的整數getrandbits(k)生成一個 k 比特長度的隨機整數randrange(start, stop [step])生成一個 [start, stop) 之間以 step 為步數的隨機整數uniform(a, b)生成一個 [a, b] 之間的隨機小數choice(seq)從序列類型(如列表)中隨機返回一個元素shuffle(seq)將序列類型中元素隨機排列,返回序列sample(pop, k)從 pop 類型中隨機選取 k 個元素,以列表類型返回
Python 提供的處理時間標準庫。提供系統級精確計時器的計時功能,可以用來分析程序性能,也可以讓程序暫停運行時間。
3方面主要功能:
函數作用time.time()獲取當前的時間戳time.gmtime()獲取當前時間戳對應的 struct_time 對象time.localtime()獲取當前時間戳對應的本地時間的 struct_time 對象time.ctime()獲取當前時間戳對應的易讀字符串表示,內部會調用 time.localtime()time.mktime()將 srtuct_time 轉換為時間戳time.strftime()時間格式化最有效的方法,幾乎可以以任何通用格式輸出時間time.strptime()提取字符串中的時間來生成 struct_time
struct_time 元素
下標屬性值0tm_year年份,整數1tm_mon月份 [1, 12]2tm_mday日期 [1, 31]3tm_hour小時 [0, 23]4tm_min分鐘 [0, 59]5tm_sec秒 [0, 61]6tm_wday星期 [0, 6] (0 表示星期一)7tm_yday該年第幾天 [1, 366]8tm_isdst是否夏令時,0否,1是,-1未知
time.strftime():
time.strftime('<參數>', time)
參數符號日期/時間值范圍%Y年份0001 - 9999%m月份01 - 12%B月名January - December%b月名縮寫Jan. - Dec.%d日期01 - 31%A星期Monday - Sunday%a星期縮寫Mon. - Sun.%H小時(24h)00 - 23%I12h01 - 12%p上/下午AM, PM%M分鐘00 -59%S秒00 - 59
三要素:
time.sleep(t):推遲 t 秒執行
time.perf_counter():計時器,每次調用記錄當前執行時間
見 Counter.py
見 SnowView.py
十、Python 第三方庫概覽
(1)pip 工具
是 Python 官方提供并維護的在線第三方庫安裝工具。
pip install <庫名>
(2)自定義安裝
一般適用于在 pip 中尚無登記或安裝失敗的第三方庫
(3)文件安裝
略
(4)pip 工具使用
pip uninstall <庫名> pip list #列出當前系統以安裝的第三方庫 pip show <庫名> #列出某個以安裝庫的詳細信息 pip download <庫名> #下載第三方庫的安裝包,但不安裝 pip search <關鍵字> #聯網搜索庫名或摘要中的關鍵字
將 Python 源文件(.py)打包,變成直接可運行的可執行文件。
PyInstaller <程序文件名>
生成 dist 和 build 文件夾。build 是存儲臨時文件的目錄。
注意問題:
常用參數描述-h, —help查看幫助—clean清理打包過程中的臨時文件-D, —onedir默認值,生成 dist 目錄-F, —onefile在 dist 文件夾中只生成獨立的打包文件-i, <圖標.ico>指定打包程序使用的圖標文件
重要的第三方中文分詞函數庫
原理:中文詞庫 $\rightarrow$ 內容X分詞詞庫 $\rightarrow$ 圖結構和動態規劃 $\rightarrow$ 最大概率的詞組
三模式:
函數作用lcut(s)精確模式,返回列表lcut(s, cut_all = True)全模式lcut_for_search(s)搜索模式add_word(w)向詞典中添加新詞 w
“關鍵詞云層”、“關鍵詞渲染”
參數功能font_path指定字體文件的完整路徑,默認 Nonewidth生成圖片寬度,默認400像素height生成圖片高度,默認200像素mask詞云形狀,默認 None,方形圖min_font_size詞云中最小的字體字號,默認4號font_step字號步進間隔,默認1stopwords被排除詞列表,排除詞不再詞云中顯示background_color背景顏色,默認黑色max_words詞云中最大詞數,默認200max_font_size詞云中最大的字體字號,默認 None,根據高度自動調整
方法功能generate(text)生成詞云tofile(filename)保存
圖像詞云:
from scipy.misc import imread mask = imread('***.png')
見 CalStoryOfStone.py 與 CalStoryOfStone2.py
十一、Python 第三方庫縱覽
自動進行 HTTP 訪問并捕獲 HTML 頁面的程序。
(1)requests
簡潔且簡單
函數功能request()構建一個請求get()獲取 HTML 網頁的主要方法head()獲取 HTML 網頁頭信息post()提交 POST 請求patch()提交局部修改請求delete()提交刪除請求put()提交 PUT 請求
(2)scrapy
快速的、高層次的 web 獲取框架
(1)numpy
開源數值計算擴展第三方庫,用于處理數據類型相同的多維數據(ndarray),“數組”。
(2)scipy
在 numpy 庫的基礎沈陽增加了眾多的科學、數學以及工程計算中常用的庫函數。包括統計、優化、整合、線性代數、傅里葉變換、信號分析、圖像處理、常微分方程求解等眾多模塊。
(3)pandas
基于 numpy 擴展。為解決數據分析任務。
(1)pdfminer
一個可以從 PDF 文檔中提取各類信息的第三方庫。
(2)openpyxl
一個處理 Excel 文檔的 Python 第三方庫。
(3)python_docx
一個處理 Word 文檔的第三方庫。
(4)beautifulsoup4
用于解析和處理 HTML 和 XML。
指根據數據特點將其展示為易于理解的圖形的過程。
(1)matplotlib
主要進行二維圖標數據展示,廣泛用于科學計算的數據可視化。
(2)TVTK
專業可編程的三維可視化工具。
(3)mayavi
基于 VTK 開發,完全用 Python 編寫。
(1)PyQt5
最成熟的商業級 GUI 第三方庫。
(2)wxPython
(3)PyGTK
(1)scikit-learn
一個簡單且高效的數據挖掘和數據分析工具。
(2)TensorFlow
Google 基于 DistBelief 進行研發的第二代人工智能學習系統。
(3)Theano
為執行深度學習中大規模神經網絡算法而設計,擅長處理多維數組。
(1)Django
最流行的開源 Web 應用框架。
(2)Pyramid
相對小巧、快速、靈活的開源 Python Web 框架。
(3)Flask
輕量級 Web 應用框架。
(1)Pygame
在 SDL 庫基礎上進行封裝的、面向游戲開發入門的 Python 第三方庫。
(2)Panda3D
一個開源、跨平臺的3D渲染和游戲開發庫。
(3)cocos2d
一個構建2D游戲和圖形界面交互式應用的框架。
(1)PIL
在圖像處理方面的重要第三方庫。
(2)SymPY
一個支持符號計算的第三方庫。一個全功能的計算機代數系統。
(3)NLTK
自然語言處理第三方庫。
語料處理、文本統計、內容理解、情感分析等多種應用。
(4)WeRoBot
一個微信公眾號開發框架,也成為微信機器人框架。
(5)MyQR
一個能夠產生基本二維碼、藝術二維碼和動態二維碼的第三方庫。
附錄
名稱范圍基礎漢字[0x4e00, 0x9fa5]數字[0x0030, 0x0039]小寫字母[0x0061, 0x007a]大寫字母[0x0041, 0x005a]箭頭[0x2190, 0x21ff]數字運算符[0x2200, 0x22ff]封閉式字母數字[0x2460, 0x24ff]制表符[0x2500, 0x257f]方塊元素[0x2580, 0x259f]幾何圖形[0x25A0, 0x25ff]一般標點符號[0x2000, 0x206f]韓文[0xAC00, 0xD7A3]貨幣[0x20a0, 0x20cf]泰文[0x0e00, 0x07f]中日韓符號[0x3000, 0x303f]中日韓括號數字[0x3200, 0x32ff]
符號作用\(在行尾時)續行符\反斜杠符號\’單引號\”雙引號\a響鈴\b退格(Backspace)\e轉義>\(在行尾時)續行符\反斜杠符號\’單引號\”雙引號\a響鈴\b退格(Backspace)\e轉義\000空\n換行\v縱向制表符\t橫向制表符\r回車\f換頁
級熱鍵可通過簡單編程 —— 自動化完成復雜操作,提升效率。
本教程需要一個很小的開源軟件 ImTip ( 體積 639 KB ),了解 ImTip 請點擊:電腦必備:通用輸入法狀態提示,再也不怕按錯,再也不用看右下角
請右鍵點開 ImTip 托盤菜單,然后點擊「管理超級熱鍵」:
然后將熱鍵配置改為如下代碼,并且勾選「啟用超級熱鍵」,再點擊「保存」按鈕使熱鍵生效。
//大寫金額、日期、時間
["Ctrl+$"] = function(hFocus){
win.dlg.chineseNumber().show();
};
//打開調色器
["Ctrl+#"] = function(hFocus){
//創建選色器
var dlg = win.ui.ctrl.pick();
dlg.show();
//置頂
win.setTopmost(dlg.hwnd,true);
};
上面的配置定義了 "Ctrl+$","Ctrl+#" 這兩個熱鍵。中括號里是按鍵名字符串,等號的后面指定要輸入的文本或者需要執行的函數對象。
以上熱鍵配置將自動轉換為以下 aardio 代碼,然后編譯執行:
//導入超級熱鍵
import key.hotkey;
//創建超級熱鍵
var superHotkey = key.hotkey(winform);
//批量加載熱鍵配置表
superHotkey.loadTable({
["Ctrl+$"] = function(hFocus){
win.dlg.chineseNumber().show();
};
["Ctrl+#"] = function(hFocus){
var dlg = win.ui.ctrl.pick();
dlg.show();
win.setTopmost(dlg.hwnd,true);
};
});
超級熱鍵配置其實就是一個表對象 ( table )。每個熱鍵配置由等號分隔的鍵值對組成,等號前面指定熱鍵,等號后面用一個函數指定要執行的代碼。多個熱鍵配置使用分號隔開。
如果不會編程沒關系,下面會提供可直接復制粘貼的范例,建議先看幾個范例 —— 再看一下:aardio 編程語言快速入門——語法速覽
下面看一下 Ctrl + $ 熱鍵運行效果:
Ctrl + # 熱鍵運行效果:
1、如果首個按下的鍵不是控制鍵,則不必同時按住多個鍵。如果按下的鍵是已注冊的熱鍵前半部分,則阻止當前按鍵繼續發送。如果繼續按鍵已不符合任何熱鍵,則釋放已捕獲的按鍵并按原順序重新發送。
2、如果首次按住的是控制鍵( CTRL,ALT,SHIFT,WIN 之一),則必須同時按住多個鍵才算已完成熱鍵。如果這樣同時按住的多個鍵是一個已完成的熱鍵,但同時又是其他熱鍵的前半部分,則必須放開所有鍵才會生效。
3、如果注冊單個控制鍵熱鍵,并且加上 @ 前綴,則放開該鍵(且中間沒有按其他鍵)才算完成熱鍵。
4、超鍵熱鍵中任何鍵名都只表示該鍵名所在的按鍵,不區分上檔鍵。例如熱鍵 "~hi" 指連續按 3 個鍵,其中的 ~ 鍵不必按 Shift + ~。
5、超級熱鍵會檢測按鍵順序,["Ctrl+Shift"] 與 ["Shift+Ctrl"] 是不同的熱鍵。如果希望不同順序觸發同一個回調函數,則需要添加多個熱鍵配置。
示例:
//按連續按 3 個鍵,每個鍵都要放開。
["~AA"] = function(){
};
//按下Shift不放,再按2下Q。
["SHIFT+Q,Q"] = function(){
};
//按下Ctrl不放,再按K, 然后都放開。
["Ctrl+K"] = function(){
};
//按下Ctrl不放,再按2次K。
//因為不是其他熱鍵的前半部分,不需要等待放開。
["Ctrl+K,K"] = function(){
};
//表示按下 Shift 鍵再放開,中間不按其他鍵,
//通常不會阻止 Shift 切換輸入法狀態的默認熱鍵。
["@Shift"] = function(){
};
運行 「aardio 自帶范例 > Windows 窗口 > 快捷鍵 > 超級熱鍵」看下效果:
熱鍵回調函數返回 true 表示允許系統繼續發送按鍵,否則取消該按鍵,不再繼續發送。
例如把斜杠“/”改為頓號的熱鍵配置:
["/"] = function(hFocus){
var openState,mode = key.ime.state();//
if( !openState /*&&(mode==3) */ ) return true;
key.sendString("、")
};
上面的代碼檢測到當前不是中文標點就執行 return true 允許系統繼續發送按鍵。
如果熱鍵回調函數返回一個函數對象,則取消該按鍵不再發送,并在返回函數以后異步執行返回的函數對象。
例如輸入法糾錯熱鍵配置就是這樣做的:
["Ctrl+,"] = function(hFocus){
//... 省略其他代碼
//通過返回函數異步執行耗時操作
return function(){
key.combine("SHIFT","HOME");
key.combine("CTRL","C");
//... 省略其他代碼
};
};
超級熱鍵基于低級鍵盤鉤子,在熱鍵回調中不允許做耗時操作(在熱鍵回調中返回異步執行的函數則不受限制)。
//運行計算器
["~calc"] = function(hFocus){
process.execute("calc.exe")
};
//運行word
["~word"] = function(hFocus){
var word = com.CreateObject("Word.Application")
if(word)word.Visible = true;
};
["Ctrl+P"] = function(){
var dpSchemes = tsfInput.getDoublePinyinSchemes();
tsfInput.enableoublePinyinScheme(dpSchemes.default===null);
}
["Ctrl+."] = function(hFocus){
key.up("Ctrl"); //先把已經按下的鍵彈起來
key.combine("CTRL","A"); //換成別的鍵,具體看 aardio 庫函數文檔
return false; //阻止按鍵事件
};
[";"] = function(hFocus){
if( winex.msCandidate.isVisible() ){
key.send(" ;")
}
else return true;
};
["SHIFT+BACK"] = function(hFocus){
key.up("SHIFT"); //先把已經按下的鍵彈起來
key.combine("CTRL","Z")
};
["/"] = function(hFocus){
var openState,mode = key.ime.state();//
if( !openState /*&&(mode==3) */ ) return true;
key.sendString("、")
};
//增加音量
["Ctrl+F6"] = function(hFocus){
key.press("VOLUME_UP");
}
//降低音量
["Ctrl+F7"] = function(hFocus){
key.press("VOLUME_DOWN");
}
//切換靜音
["Ctrl+F8"] = function(){
key.press("VOLUME_MUTE");
}
["~date"] = function(hFocus){
var zh = string.chineseNumber('〇一二三四五六七八九');
key.sendString(zh.date()); //改為 zh.time() 輸出大寫的當前時間
};
注意超鍵熱鍵中任何鍵名都只表示該鍵名所在的按鍵,不區分上檔鍵。所以 ~ 鍵不需要同時按 Shift + ~ 。
["CAPSLK"] = function(hFocus){
key.ime.setOpenStatus(false);
key.ime.setConversionMode(0);
return true;
};
["RSHIFT"] = function(hFocus){
key.ime.setOpenStatus(false);
key.ime.setConversionMode(0);
};
["LSHIFT"] = function(hFocus){
var openState,mode = key.ime.state();
if( openState && !key.ime.capital() ) return true; //當前已經是中文輸入模式,不改變默認行為
key.up("SHIFT");//先放開 SHIFT 鍵
//如果是大寫狀態,切換為小寫
if(key.ime.capital()) key.press("CAPSLK")
//英文直接切中文 + 中文標點
key.ime.setOpenStatus(true); //打開輸入法
key.ime.setConversionMode(1|0x400); //切換到中文狀態,這一步不能省略
//再次嘗試用鍵盤切換中文標點,這一步不能省略
key.combine("CTRL",".");
//現在再次檢測中文標點狀態
var openState,mode = key.ime.state();
if(mode!=3/*_IME_SYMBOLMODE_SYMBOL*/){
//說明切換到了英文標點,再切換回去
key.combine("CTRL",".")
}
};
["Ctrl+."] = function(hFocus){
var openState,mode = key.ime.state();
if( openState && !key.ime.capital() ) return true; //當前已經是中文輸入模式,不改變默認行為
key.up("Ctrl");//先放開 Ctrl 鍵
//如果是大寫狀態,切換為小寫
if(key.ime.capital()) key.press("CAPSLK")
//英文直接切中文 + 中文標點
key.ime.setOpenStatus(true); //打開輸入法
key.ime.setConversionMode(1|0x400); //切換到中文狀態,這一步不能省略
//再次嘗試用鍵盤切換中文標點,這一步不能省略
key.combine("CTRL",".");
//現在再次檢測中文標點狀態
var openState,mode = key.ime.state();
if(mode!=3/*_IME_SYMBOLMODE_SYMBOL*/){
//說明切換到了英文標點,再切換回去
key.combine("CTRL",".")
}
};
["Ctrl+,"] = function(hFocus){
var openState,mode = key.ime.state();
if( openState && !key.ime.capital() ) return true; //當前已經是中文輸入模式,不改變默認行為
key.up("Ctrl");//先放開 Ctrl 鍵
//如果是大寫狀態,切換為小寫
if(key.ime.capital()) key.press("CAPSLK")
//英文直接切中文 + 中文標點
key.ime.setOpenStatus(true); //打開輸入法
key.ime.setConversionMode(1|0x400); //切換到中文狀態,這一步不能省略
//再次嘗試用鍵盤切換中文標點,這一步不能省略
key.combine("CTRL",".");
//現在再次檢測中文標點狀態
var openState,mode = key.ime.state();
if(mode!=3/*_IME_SYMBOLMODE_SYMBOL*/){
//說明切換到了英文標點,再切換回去
key.combine("CTRL",".")
}
//通過返回函數異步執行耗時操作(避免系統刪除熱鍵鉤子)
return function(){
key.combine("SHIFT","HOME");//選中當前行
key.combine("CTRL","C");//復制當前行
var line = win.clip.read(); //讀取剪貼板文本
var str = string.match(line,"[a-zA-Z]+$"); //查找尾部連續字母
key.press("RIGHT");//按右方向鍵,取消選區
//如果字符串非空
if(#str){
key.repeat("BACK",#str);//按退格鍵指定次數(取字符串長度)
key.send(str);//字符串轉換為發送按鍵
//key.press("SPACE");//發果需要按空格,請取消前面的注釋符號
}
};
};
["Ctrl+V"] = function(){
var str = win.clip.read();
if(str && string.find(str,"abcd")){
str = string.replace(str,"abcd","");
win.clip.write(str);
}
return true; //執行默認操作
}
[`SHIFT+"`] = function(hFocus){
if( checkImeProcess(hFocus,"Code.exe") ){
return true;//允許繼續發送按鍵
}
var o,s = key.ime.state();
key.sendString(s==3 ? `“”` : `""`);
//與目標窗口共享輸入狀態
winex.attach(hFocus,true);
//設置LSHIFT,RSHIFT 為彈起狀態
key.up("RSHIFT","LSHIFT","SHIFT");
key.setState(false,"RSHIFT","LSHIFT","SHIFT");
//移動光標
key.press("LEFT");
//取消共享輸入狀態
winex.attach(hFocus,false);
}
["Ctrl+,"] = function(hFocus){
import win.reg;
var reg = win.reg("HKEY_CURRENT_USER\Software\Microsoft\InputMethod\Settings\CHS");
var mode = !reg.queryValue("PinyinMixEnable") ? 1 : 0
reg.setDwValue("PinyinMixEnable",mode)
key.ime.changeRequest(0x4090409)
key.ime.changeRequest(0x8040804)
};
["Ctrl+SHIFT+RIGHT"] = function(hFocus){
::User32.SwapMouseButton(!::User32.GetSystemMetrics(23));
}
["`"] = function(hFocus){
var openState,mode = key.ime.state();//用法請查看 aardio 文檔
if(!openState
|| mode !=3 || key.getState("Shift")
|| key.getState("Ctrl")
|| key.getState("CAPSLK") ) {
return true; //允許此按鍵繼續發送
}
key.combine("SHIFT","LEFT"); //向后選一個字
key.combine("CTRL","C"); //復制
key.press("RIGHT"); //取消選中
key.combine("CTRL","V"); //粘貼
};
ImTip 體積雖然小,但已自帶了大量 #aardio# 庫。您也可以下載 aardio ,將 aardio 目錄下的 /lib/ 目錄復制到 ImTip.exe 所在目錄 —— 超級熱鍵就可以使用全部的 aardio 庫了。
也可以在 /lib/ 目錄下新建用戶庫,然后通過 import 語句導入超級熱鍵。
超級熱鍵配置本質是一個表對象 (table),不但可以包含鍵值對,也可以包含數組成員。利用這個特性可在超級熱鍵配置內直接執行代碼。例如添加一個檢測當前窗口啟動程序名的全局函數 checkImeProcess,然后使用該函數檢測目標窗口的啟動程序文件名:
(function(){
var lastFocus,lastPath,lastClass;
checkImeProcess = function(hFocus,exeFile){
if(lastFocus != hFocus){
lastClass = win.getClass(hFocus);
var tid,pid = win.getThreadProcessId(hFocus);
lastPath = process.getPath(pid);
lastFocus = hFocus
}
return (lastPath && io.splitpath(lastPath).file == exeFile )
}
})();
//引號配對
[`SHIFT+"`] = function(hFocus){
if( checkImeProcess(hFocus,"Code.exe") ){
return true;//允許繼續發送按鍵
}
var o,s = key.ime.state();
key.sendString(s==3 ? `“”` : `""`);
//與目標窗口共享輸入狀態
winex.attach(hFocus,true);
//設置LSHIFT,RSHIFT 為彈起狀態
key.up("RSHIFT","LSHIFT","SHIFT");
key.setState(false,"RSHIFT","LSHIFT","SHIFT");
//移動光標
key.press("LEFT");
//取消共享輸入狀態
winex.attach(hFocus,false);
}
比較常用的按鍵、文本輸入函數:
//發送字符串
key.sendString("這里是要發送的字符串")
//發送按鍵
key.send("/")
//發送按鍵
key.press("ENTER")
//判斷中文輸入法是否打開,打開則執行花括號中的語句
if( key.ime.state() ){ }
更多庫函數用法請參考 aardio 自帶的《庫函數文檔》,或者 aardio 自帶的范例:
aardio 也支持很多第三方編程語言,例如 C語言、C++、C#、Java、Python、R、Javascript、Node.Js、Fortran、VB、PHP、VBScript、PowerShell、NewLISP、AutoLISP、Delphi、FreeBASIC、Ruby、Rust、Julia、Nim、Go 語言、批處理 ...... 用法請參考 aardio 自帶范例。
如果您對超級熱鍵還有任何疑問,歡迎在評論區留言,我會盡快解答。
*請認真填寫需求信息,我們會在24小時內與您取得聯系。