python学习——练习题(10)
""" 题目:暂停一秒输出,并格式化当前时间。 """ import sys import time def answer1(): """ 每隔一秒刷新一下时间 Print是比较多用到的函数,但是很多人对它的详细用法还不是很清楚,今天我们就来一探庐山真面目,详解print的前世今生。 print在Python2.x时代不是一个函数,只是一个关键字。因此那时候print可以这么用: print " aaa" #输出字符串"aaa" print 1,2 #输出1,2 print "aaa","bbb" #输出两个字符串 在最后一个object后面加上, 即可实现不换行输出: print 1,2, print "aaa","bbb" 输出 :1 2 aaa bbb 进入Python3.x时代,print必须使用括号()。在括号内添加对象,具体用法如下: print(*objects,sep="",end="\n",file=sys.stdout,flush=False) 1.objects: 之所以是复数,表示可以一次输出多个对象。输出多个对象时,需要用,分隔 举个栗子: a1="aaa" a2="bbb" print(a1,a2,) 输出:aaa bbb 但是如果对象不是变量,而是字符串。可以不用,分隔,此时Python会把两个字符串当做一个输出。再举个栗子: print("aaa""bbb") print("aaa","bbb") 输出:aaabbb aaa bbb 对象输出到流式文件(stream file)--流式文件属于无结构文件,构成文件的基本单位是字符,流式文件是有序字符的集合,其长度为该文件所包含的字符个数, 所以又称为字符流文件。流式文件无结构,且管理简单,用户可以方便地对其进行操作。源程序、目标代码等文件属于流式文件。UNIX系统采用的是流式文件结构。 无结构文件是最简单的文件组织形式。无结构文件将数据按顺序组织成记录并积累保存,它是有序相关信息项的集合,以字节(Byte)为单位。由于无结构文件没有结构, 因而对记录的访问只能通过穷举搜索的方式,故这种文件形式对大多数应用不适用。但字符流的无结构文件管理简单,用户可以方便地对其进行操作。 所以,那些对基本信息单位操作不多的文件较适于釆用字符流的无结构方式,如源程序文件、目标代码文件等。 2.sep=" " 用来间隔多个对象,默认值是一个空格。你可以设置成其他字符。在print函数中,所有非关键字的参数都会被转化成字符型。 举个栗子: print("aaa""bbb",sep="hello") print("aaa","bbb",sep="hello") 结果: aaabbb aaahellobbb 再次证明了推论:两个字符串不用,隔开就会当做一个字符串。 3.end="\n" 这个参数的作用很明显,用来设定以什么结尾。默认值是换行符,我们可以换成其他字符串。用这个选项可以实现不换行输出: a1="aaa" a2="bbb" print(a1,end="") print(a2) 结果:aaabbb 我们也可以在end结尾加上换行符: print("aaa",end="hello\n") print("aaa","bbb",sep="hello",end="hello") 结果: aaahello aaahellobbbhello 4.file=sys.stdout file指定的对象必须要有写(write)的方法,如果指定的对象没有该方法或者不存在,就会使用默认值。举个栗子: new=open("new.txt","w")#新建一个对象new,对应的是txt文本,属性可写 print("aaa",end="hello\n",file=new)#输出,file指向该对象,不能指向txt文本文件 结果:在new.txt文本中成功写入字符串。 5.flush=False 该参数只有两个选项--true or false。True表示强制清除缓存,false表示缓存的事情交给文件本身吧。 至此一个小小的print函数终于讲完了,不知道你有没有收获,我是收获挺多的。我们下次再见,亲。 :return: """ print("输出一:") for i in range(10): time.sleep(1) print(time.strftime("%Y-%m-%d %H:%M:%S"), sep=" ", end="\r", file=sys.stdout, flush=False) # time.sleep(1) #放在这里问什么连一条都不显示,奇怪 answer1() def answer2(): """ answer1,虽然最后是在同一行输出,切覆盖了前面的输出,但是前面的都没有显示,只有最后一次才显示 print的打印,好像需要一行完全完成后才会显示一整行,所以若是end不能\n,则不管你在该条print后 sleep多久,都将不会显示信息,所以上面的方法不能实现我想要的效果 使用两个ANSI.SYS,ANSI.SYS参考资料 https://www.zhihu.com/question/21100416 http://www.jb51.net/article/8197.htm :return: """ print("\n输出二:") for i in range(10): print("\r%s%s%s%s" % ("\x1b[1;0m", time.strftime("%Y-%m-%d %H:%M:"), "\x1b[1;31m", time.strftime("%S")), sep=" ", end=",", file=sys.stdout, flush=False) time.sleep(1) print("完成") answer2()