私信小編007即可自動獲取大量的Python視頻教程以及各類PDF!
用Python寫一個簡單的計時程序
時隔這麼久,終於騰出點時間,就想把手頭的工作簡單介紹一下,所以做一期關於編程的推送。本次涉及到的Python,是個對初學者非常友好的一款編程語言,學習起來非常輕鬆,同時本次推送僅介紹相關的函數與命令。Python遵循GPL協議,大家可以到Python.org免費下載對應的版本。
Python的啟動與退出
這個非常簡單,我們打開“終端”(windows系統為命令提示符),輸入:
python
此時敲一下回車鍵即可。如果在Mac系統下,直接輸入python會進入系統自帶的2.7版本,如果要進入新版本,如果我下載的3.7.1,那麼需要輸入的命令是:
python3.7
我們可以看到,當前行最左邊出現了“>>>”,這就說明我們已經成功進入了python。
如果要退出python,非常簡單,我們需要調用一個退出函數(如下)即可,此時可以看到我們回到了正常的終端命令下。
exit()
基礎語法
這部分很簡單,我儘量言簡意賅一點。
一、註釋
單行註釋用#,多行註釋用一組'''或者"""引用。註釋內容不會被執行,只是留一個說明。以下兩種註釋其實質是一樣的。
# Hello
# Hi
'''
Hello
Hi
'''
二、縮進
在寫代碼塊的時候,python與其他大部分語言不同,不需要{}將內容括起來,而是通過縮進來完成,也就是按一下Tab鍵。例如if條件語句:
if a == 3: #第一行
a = a + 1 #第二行
b = a + 2 #第三行
c = a + 3 #第四行
else:
a = a + 2
這段的意思暫時不用理解,但是需要知道的是,第二行至第四行是第一行的子句。
三、數據類型與賦值
這裡僅介紹數字和字符串,其他數據類型,如列表、元組、集合、字典等有興趣可以自行百度。
數字很好理解,python3支持整數(int)、浮點(float)、布爾(bool)和複數(complex)。對於數字的計算很直觀:
>>> 3 + 9 #整型 加法
12
>>> 9.2 * 4 #浮點 乘法
36.8
>>> 8 / 3 #除法 結果為浮點
2.6666666666666665
>>> 8 // 3 #除法 結果為整型
2
>>> 12 % 5 #取餘
2
>>> 2 ** 4 #乘方
16
布爾型是True或者False,其值分別為1和0。(布爾型是python3新引入的,在python2中,只用1或0來表示)
複數很少會用到,其表示方法為 a+bj或者complex(a,b),a為實部,b為虛部。
字符串是一組字符,可以用單引號和雙引號標記。字符串可以用過[x:y]來截取,x、y為字符串中字符的序號,序號從0開始計,所取的值為x號字符到y號字符之前(不含y號字符)的字符。舉說明:
#單引號與雙引號是一樣的功能。
>>> 'qwer'
'qwer'
>>> "qwer"
'qwer'
>>> str = 'abcdefghijklmn' #給str賦值一串字符
# 此時,a的序號為0,b的序號為1,c的序號為2,以此類推
>>> str[0:1] #取a開始,到b之前(不含b)的字符
'a'
>>> str[1:3] #取b開始,到d之前(不含d)的字符
'bc'
上是正數的序號,倒數的序號用負數表示。-1表示最後一個字符,-2表示倒數第二個字符,以此類推。
>>> str = 'abcdefghijklmn' #給str賦值一串字符
>>> str[-2:-1] #取m開始,到n之前(不含n)的字符
'm'
>>> str[1:-2] #取b開始,到m之前(不含m)的字符
'bcdefghijkl'
# 其他
>>>str[2:] #取c開始,到最後的所有字符
'cdefghijklmn'
>>>str[3] #取d一個字符
'd'
字符串可以進行運算,例如:
>>> str = 'abcdefghijklmn' #給str賦值一串字符
>>> str + 'opq' #相加
'abcdefghijklmnopq'
>>> str * 2 #相乘
'abcdefghijklmnabcdefghijklmn'
特殊字符會用 \ 標註,比如 \n 表示換行,如下:
>>>str = 'abc\ndef' #給str賦值
>>>str #顯示str的內容
'abc\ndef' #可以看到賦值成功,這個字符串中有特殊字符“\n”
>>>print(str) #輸出一下str
abc
def #可以看出,“\n”並不是作為字符串內容輸出,而是自動換行了
如果你要抬槓,非要輸出個 “\n”,那麼請在字符串之前加一個“r”。
賦值很簡單,用“=”即可。前面的例子也有,a = 2,是將2的值賦給a。那麼等號呢?等號是“==”,不等號是“!=”
if控制與for、while循環
if、for和while是所有語言中非常基礎又非常重要的存在。
if條件控制
if 條件1 :
語句1.1
語句1.2
elif 條件2:
語句2.1
語句2.2
else:
語句3.1
語句3.2
簡單來說,如果條件1為真,執行語句1.1和1.2,結束;如果條件1為假,條件2為真,執行2.1和2.2,結束;如果條件1為假,條件2為假,那麼執行3.1和3.2,結束;
for循環
for 變量 in 序列:
語句1
else:
語句2
for循環可以遍歷序列:
>>> seq = [1,2,3,4,5,6,7,8,9]
>>> for i in seq:
... print(i)
...
1
2
3
4
5
6
7
8
9
定義一個序列,內容為1至9,九個數字,然後讓變量i遍歷這個序列,每次循環輸出i的值。
while循環
while 條件:
語句
while循環,當條件為真時,執行語句,然後再次判斷條件。
>>> n=100
>>> sum=0
>>> ct=1
>>> while ct <= n:
... sum = sum + ct
... ct = ct + 1
...
>>> print(sum)
5050
這個例子是計算1至100所有正數之和。
重點命令
下面將結合一個計時測試程序的實力來講講一些簡單命令。
import
import time
import命令是引入模塊用的。因為我們需要計時,所以需要調取一些時間相關的函數,因此在這裡引入了time的模塊。模塊就好比一些預製好的函數的集合,引入後,可以直接調取其中的函數,而不必重新定義函數。
input()
input()函數是讀取鍵盤輸入的本文,我們常常將讀取內容直接賦值給一個變量。如下:
>>> pthtestfile = input("請拽入文本或輸入測試文檔路徑:")
輸入這條命令後,系統會返回引號內的文字,並等待輸入內容。
如下圖,當我們輸入完路徑之後,可以再查看一下pthtestfile的值,已經變成了我們的文件路徑。
open(file, mode)
打開文件,file表示文件路徑,mode表示打開的模式。
>>> f = open(pthtestfile, "r")
>>> w = open(pthresultfile, "w")
這兩條命令是以讀模式打開pthtestfile路徑的文件,並賦值給文件對象f;以寫模式打開pthresultfile路徑的文件,並賦值給文件對象w。關於mode,在本實例中之只用讀模式r和寫模式w。
f.readline()
在我們有了文件對象f之後,f.readline()表示讀取文件f的一行,以“\n”為止。如果返回為空,那就說明讀取到最後一行了。每調用完一次,指針自動指向下一行。
類似的命令還有read(),和readlines(),可以自行百度。
我們現在準備一個txt文本,一共有三行,進行一下演練:
>>> f = open("/Users/gaoqy/Desktop/py/aaa.txt", "r")
>>> f.readline()
'Line 1\n'
>>> f.readline()
'Line 2\n'
>>> f.readline()
'Line 3'
>>> f.readline()
''
打開準備好的文件,調用readline命令,每調用一次返回一行的內容,以換行符“\n”為結尾,最後一次調用返回了一個空字符串,說明已經到最後一行了。
>>> f = open("/Users/gaoqy/Desktop/py/aaa.txt", "r")
>>> f.read()
'Line 1\nLine 2\nLine 3'
>>> f = open("/Users/gaoqy/Desktop/py/aaa.txt", "r")
>>> f.readlines()
['Line 1\n', 'Line 2\n', 'Line 3']
同樣的文件使用read()和readlines()讀取,效果是不一樣的。read()在一個字符串中返回所有內容,readlines()是返回了一個列表,列表裡的每一項就是文件中每一行的內容。
**因為每次讀取後,指針回指到文本末端,所以需要重新打開一遍。
w.write()
有讀取就要有寫入,所以寫入的命令就是write()。
>>> w = open("/Users/gaoqy/Desktop/py/bbb.txt", "w")
>>> w.write("你好呀!")
4
我們新建一個bbb.txt空白文檔,然後依然要打開它,模式為w,並賦值給文件對象w。向裡面寫入字符串“你好呀!”,此時返回的數字“4”表示寫入有4個字符。此時我們打開bbb.txt看不到此內容,因為我們寫完之後,並沒有關閉文檔,此時我們需要close()來關閉文檔。
>>> w.close()
time.time()
這條命令是獲取從1970年1月1日到此時此刻的時間,單位為秒。
>>> import time #需要先引入time模塊啦
>>> time.time()
1540814234.5979111 #15.4億秒,時間飛逝啊
部分系統可能並不是到1970年,我們可以用gmtime(0)來查看。同時我們可以使用gmtime()來查看當下時間。
**用gmtime調取的均為UTC,協調世界時。
#因為之前引入了time模塊,在關閉程序前不必再次引入。
>>> time.gmtime(0)
time.struct_time(tm_year=1970, tm_mon=1, tm_mday=1, tm_hour=0, tm_min=0, tm_sec=0, tm_wday=3, tm_yday=1, tm_isdst=0)
>>> time.gmtime()
time.struct_time(tm_year=2018, tm_mon=10, tm_mday=29, tm_hour=12, tm_min=1, tm_sec=26, tm_wday=0, tm_yday=302, tm_isdst=0)
str()
這個命令是把內容轉化為字符串
導入time模塊,調用time()時,返回的是浮點數。我們用str()套一下的話,返回的就是字符串了。
實例
利用以上的知識,我們來分析一下這個實例:
1-3行:版權聲明,系統生成的,我加了一個版本號方便修正
6行:引入time模塊
7行:讀取測試文檔路徑
8行:讀取空白文檔路徑
9行:打開測試文檔,並賦值給文件對象f
10行:打開空白文檔,並賦值給文件對象w
11行:定義sp,其實就是換行符啦
12行:if條件控制,我在測試文檔前加了一串字符當作校驗碼,校驗碼匹配才能繼續運行
13-19行:其實沒什麼用,就是個說明
20行:提示開始測試
21行:空白,為了閱讀時不易串行
22行:while循環,當沒有到文本最後一行的時候執行下面的語句
23-24行:讀一行文本並輸出該文本
25行:記錄起始時間
26行:等待輸入,其實就是等待閱讀完成
27-30行:記錄結束時間,並計算閱讀時長,寫入文件w
31-32行:提示準備開始下一句
33-36行:關閉兩個文件,並提示測試結束
37行:如果校驗碼有問題,提示警告
實際運行
這裡有個問題就是測試文檔需要經過提前編輯。第一行為校驗碼,第二、四、六、八等行為佔位用的,第三、五、七、九等行為閱讀內容。因為我們在程序的22行while循環中使用了readline(),所以程序其實是隔行輸出文本。
另外,我用的xcode寫的代碼,個人習慣吧。也可以用文檔app直接寫,寫完之後把後綴改成py即可。
如果有什麼問題,可以留言,一起研究咯
閱讀更多 編程夢工廠 的文章