用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)。对于数字的计算很直观:
布尔型是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循环可以遍历序列:
定义一个序列,内容为1至9,九个数字,然后让变量i遍历这个序列,每次循环输出i的值。
while循环
while 条件:
语句
while循环,当条件为真时,执行语句,然后再次判断条件。
>>> n=100
>>> sum=0
>>> ct=1
>>> while ct
... 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即可。
如果有什么问题,可以留言,一起研究咯
领取专属 10元无门槛券
私享最新 技术干货