用Python写一个简单的计时程序

用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即可。

如果有什么问题,可以留言,一起研究咯

  • 发表于:
  • 原文链接https://kuaibao.qq.com/s/20181029G1UQ2900?refer=cp_1026
  • 腾讯「云+社区」是腾讯内容开放平台帐号(企鹅号)传播渠道之一,根据《腾讯内容开放平台服务协议》转载发布内容。
  • 如有侵权,请联系 yunjia_community@tencent.com 删除。

扫码关注云+社区

领取腾讯云代金券