zoukankan      html  css  js  c++  java
  • Python之路(第十三篇)time模块、random模块、string模块、验证码练习

    一、time模块

    三种时间表示

    在Python中,通常有这几种方式来表示时间:

    • 时间戳(timestamp) : 通常来说,时间戳表示的是从1970年1月1日00:00:00开始按秒计算的偏移量。(从1970年到现在这一刻一共有多少秒)我们运行“type(time.time())”,返回的是float类型。如 time.time()=1525688497.608947

    • 格式化的时间字符串(字符串时间) 如“2018-05-06”

    • 元组(struct_time) (结构化时间) : struct_time元组共有9个元素共九个元素:(年,月,日,时,分,秒,一年中第几周,一年中第几天,夏令时)

    1、time.time():

    返回当前时间的时间戳

      import time
      ti = time.time()
      print(ti)
    

      

    输出结果

      
      1525688497.608947
    

      

    2、time.localtime( [secs] )

    将一个时间戳转换为当前时区的struct_time,即时间数组格式的时间 。secs参数未提供,则以当前时间为准。

    例子

      
      import time
      #没有参数
      print(time.localtime())
      #有参数
      print(time.localtime(1480000000))
    

      

    输出结果

      
      time.struct_time(tm_year=2018, tm_mon=5, tm_mday=7, tm_hour=18, tm_min=46, tm_sec=25, tm_wday=0, tm_yday=127, tm_isdst=0)
      time.struct_time(tm_year=2016, tm_mon=11, tm_mday=24, tm_hour=23, tm_min=6, tm_sec=40, tm_wday=3, tm_yday=329, tm_isdst=0)
    

      

    例子2

      import time
      ​
      t=time.localtime()
      print(t.tm_year)  #取结构化时间中单独的数值
      print(t.tm_mon)
      print(t.tm_mday)
    

      

    输出结果

      
      2018
      5
      6
    

      

    结构化时间各元素表示含义

      
       tm_year    #年 1970-2018
      ​
       tm_mon     #月 1-12
      ​
       tm_mday    #日 1-31
      ​
       tm_hour    #时 0-23
      ​
       tm_min     #分 0-59
      ​
       tm_sec     #秒 0-59
      ​
       tm_wday    #一周中得第几天 0-6  ,星期一是0,周日是6
      ​
       tm_yday    #一年中得第几天 0-365
      ​
       tm_isdst   #是否是夏令时  0-1
      ​
    

      

    3、gmtime([secs])

    和localtime()方法类似,gmtime()方法是将一个时间戳转换为UTC时区(0时区)的struct_time。

    即返回当前的格林尼治时间的元组数值

    4、 mktime(t)

    将一个struct_time转化为时间戳。

    例子

      
      import time
      print(time.mktime(time.localtime()))
    

      

    输出结果

      
      1525693661.0
    

      

    5、asctime([t])

    把一个表示时间的元组或者struct_time表示为这种形式:'Sun Jun 20 23:21:05 1993'。

    例子

      
      import time
      print(time.asctime(time.localtime()))
    

      

    输出结果

      
      Mon May  7 19:49:21 2018
    

      

    6、 ctime([secs])

    把一个时间戳(按秒计算的浮点数)转化为time.asctime()的形式。如果参数未给或者为

    None的时候,将会默认time.time()为参数。

    它的作用相当于time.asctime(time.localtime(secs))。

      
      import time
      print(time.ctime())
    

      

    输出结果

      
      Mon May  7 20:17:12 2018
    

      

    7、 strftime(format[, t])

    把一个代表时间的元组或者struct_time(如由time.localtime()和time.gmtime()返回)转化为格式化的时间字符串。如果t未指定,将传入time.localtime()。如果元组中任何一个元素越界,ValueError的错误将会被抛出。

    python中时间日期格式化符号:

      
      %y 两位数的年份表示(00-99)
      ​
      %Y 四位数的年份表示(000-9999)
      ​
      %m 月份(01-12)
      ​
      %d 月内中的一天(0-31)
      ​
      %H 24小时制小时数(0-23) #注意是大写
      ​
      %I 12小时制小时数(01-12)
      ​
      %M 分钟数(00=59) #注意是大写
      ​
      %S 秒(00-59) #注意是大写
      ​
      %a 本地简化星期名称
      ​
      %A 本地完整星期名称
      ​
      %b 本地简化的月份名称
      ​
      %B 本地完整的月份名称
      ​
      %c 本地相应的日期表示和时间表示
      ​
      %j 年内的一天(001-366)
      ​
      %p 本地A.M.或P.M.的等价符
      ​
      %U 一年中的星期数(00-53)星期天为星期的开始
      ​
      %w 星期(0-6),星期天为星期的开始
      ​
      %W 一年中的星期数(00-53)星期一为星期的开始
      ​
      %x 本地相应的日期表示
      ​
      %X 本地相应的时间表示
      ​
      %Z 当前时区的名称
      ​
      %% %号本身
    

      


    例子

      
      import time
      ​
      print(time.strftime("%Y-%m-%d %H:%M:%S",time.localtime()))
    

      

    输出结果

      
      2018-05-07 20:33:32
    

      

    8、strptime(string[, format])

    把一个格式化时间(字符串时间)字符串转化为struct_time。实际上它和strftime()是逆操作。

      
      import time
      ​
      print(time.strptime("2018/05/07 20:33:32","%Y/%m/%d %H:%M:%S")) #第一个参数这里的字符串分隔的字符#可以自己定义,第二个参数与第一个参数对应即可
    

      

    输出结果

      
      time.struct_time(tm_year=2018, tm_mon=5, tm_mday=7, tm_hour=20, tm_min=33, tm_sec=32, tm_wday=0, tm_yday=127, tm_isdst=-1)
    

      

    这里也可以单独取值

      
      import time
      ​
      t=time.strptime("2018/05/07 20:33:32","%Y/%m/%d %H:%M:%S")
      print(t.tm_mday)
      print(t.tm_year)
    

      

    输出结果

      
      7
      2018
     
    

      

    9、sleep(secs)

    线程推迟指定的时间运行,单位为秒。

      
      import time
      ​
      s1 = "你好"
      s2 = "nicholas"
      print(s1)
      time.sleep(2)
      print(s2)
    

      

    输出结果

      
      你好  #程序延迟2秒后输出“nicholas”
      nicholas
     
    

      

    10、clock() (了解)

    Python time clock() 函数以浮点数计算的秒数返回当前的CPU时间。用来衡量不同程序的耗时,比time.time()更有用。

    这个需要注意,在不同的系统上含义不同。在UNIX系统上,它返回的是"进程时间",它是用秒表示的浮点数(时间戳)。而在WINDOWS中,第一次调用,返回的是进程运行的实际时间。而第二次之后的调用是自第一次调用以后到现在的运行时间。(实际上是以WIN32上QueryPerformanceCounter()为基础,它比毫秒表示更为精确)

    time不同形式相互转换

     

    二、random模块

    产生随机数值的模块

    1、random.random()

    随机产生大于0且小于1之间的小数

      
      import random
      v1 = random.random()
      print(v1)
     
    

      

    2、random.uniform(a, b)

    返回一个介于a和b之间的浮点数。一般是a<b,即返回a和b之间的浮点数,如果 a大于b,则是b到a之间的浮点数。这里的a和b都有可能出现在结果中。

      
      import random
      v1 = random.uniform(1.1,2.5) #这里的a,b不一定的整数,一般会写成整数
      print(v1)
     
    

      

    3、random.randint(a,b)

    返回range[a,b]之间的一个整数,即整数

      
      import random
      v1 = random.randint(1,3) #这里a,b必须是整数,a,b都可以出现在结果中
      print(v1)
     
    

      

    4、random.randrange(start, stop[, step])

    random.randrange(start, stop[, step]) # 返回range[start,stop)之间的一个整数,startstop必须是整数,可加step,跟range(0,10,2)类似。

    start缺省值为1,stop值不能取到。

      import random
      v1 = random.randrange(1,5,2) 
      print(v1)
     
    

      

    5、random.choice(seq)

    从非空序列seq(字符串也是序列)中随机选取一个元素。如果seq为空则弹出 IndexError异常。

      
      import random
      v1 = random.choice([1,5,2,"ni",{"k1":"v1"},["hi",8]])
      print(v1)
    

      

    输出结果

    从列表[1,5,2,"ni",{"k1":"v1"},["hi",8]]随机返回一个元素

      
      import random
      ​
      print(random.choice("nicholas"))
    

      

    输出结果

    随机返回字符串“nicholas”的一个字符

    6、random.sample( population, k)

    从population样本或集合中随机选取k个不重复的元素组成新的序列

      
      import random
      v1 = random.sample([1,5,2,"ni",{"k1":"v1"},["hi",8]],3)
      print(v1)
    

      

    输出结果

    从列表中随机抽出3个不重复的元素组成新的列表

    7、random.shuffle()

    将列表的顺序打乱

      
      import random
      li = [1,5,2,3]
      random.shuffle(li)
      print(li)
    

      

    输出结果:输出这4个元素随机顺序的列表

    三、string模块(了解)

    字符串方法见之前的博文。

    下面是一些字符串常量

    1、string.ascii_lowercase

    返回字符串小写字母’abcdefghijklmnopqrstuvwxyz’

    import string
    print(string.ascii_lowercase)
    

      



    2、string.ascii_uppercase

    返回字符串大写的字母’ABCDEFGHIJKLMNOPQRSTUVWXYZ’

    import string
    print(string.ascii_uppercase)
    

      



    3、string.ascii_letters

    返回小写的a~z加上大写的A~Z组成的字符串,即string.ascii_lowercase连接string.ascii_uppercase组成的字符串

    import string
    print(string.ascii_letters)
    

      



    4、string.digits

    数字0到9的字符串:’0123456789’

    import string
    print(string.digits)
    

      



    5、string.hexdigits

    返回字符串’0123456789abcdefABCDEF’,即十六进制的所有字符(英文字母加上大小写)组成的字符串

    import string
    print(string.hexdigits)
    

      



    6、string.letters

    string.letters在python2中返回的结果与string.ascii_letters一样,python3中取消了,

    string.ascii_letters在python2、python3中都可以用

    7、string.lowercase

    string.lowercase在python2中返回字符串小写字母’abcdefghijklmnopqrstuvwxyz’,与string.ascii_lowercase一致,python3中取消了

    string.ascii_lowercase在python2、python3中都可以用

    8、string.uppercase

    string.lowercase在python2中返回字符串大写的字母’ABCDEFGHIJKLMNOPQRSTUVWXYZ’,与string.ascii_uppercase一致,python3中取消了

    string.ascii_uppercase在python2、python3中都可以用

    9、string.octdigits

    返回八进制的所有字符组成的字符串

    import string
    print(string.octdigits)
    

      



    10、string.punctuation

    返回所有标点字符

    import string
    print(string.punctuation)
    

      



    输出结果

    !"#$%&'()*+,-./:;<=>?@[]^_`{|}~
    

      



    11、string.printable

    返回所有的可打印的字符的字符串。包含数字、字母、标点符号和空格

    import string
    print(string.printable)
    

      



    输出结果

    0123456789abcdefghijklmnopqrstuvwxyzABCDEFGHIJKLMNOPQRSTUVWXYZ!"#$%&'()*+,-./:;<=>?@[]^_`{|}~ 	
    

      



    分析:即string.digits加上string.ascii_letters加上string.punctuation组成的字符串

    四、验证码练习

    生成四位数字验证码

    1、方法一

      
      import random
      li=[str(i) for i in random.sample(range(0,10),4)]
      print("".join(li))
    

      

    2、方法二

      
      import random
      li = []
      for i in range(4):
          li.append(str(random.randint(0,9)))
      print("".join(li))
    

      

    生成数字加字母的四位验证码

    1、方法一

      import random
      num_l = list(map(str,list(range(10)))) #获取以0-9字符串为元素的列表
      del_l = list(range(91,97))
      chr_l = [chr(i) if i not in del_l else ''for i in range(65,123)] #获取大小写的a-z的列表,去掉中间的6个特殊字符
      num_l.extend(chr_l)  #将字母和数字组合在一起
      res_l = num_l
      res_str = "".join(res_l).strip("") #去掉空字符元素
      print("".join(random.sample(res_str,4)))
    

      

    2、方法二

    import string
    import random
    res_str = ("%s%s")%(string.ascii_letters,string.digits)
    print("".join(random.sample(res_str,4)))
    

      

  • 相关阅读:
    面向对象编程技术的总结和理解(c++)
    对类的理解(c++)
    对指针和引用的理解(c++)
    3DES对称加密算法(ABAP 语言实现版)
    org.springframework.util.Base64Utils线程安全问题
    SAP传输请求自动发布
    ABAP WB01 BDC ”No batch input data for screen & &“ ”没有屏幕 & & 的批输入数据“
    SAP S/4 1610 IDES + HANA 2.0 安装
    ABAP语言实现 左移 <<、无符号右移 >>> 位移操作
    ABAP表抛FTP通用程序
  • 原文地址:https://www.cnblogs.com/Nicholas0707/p/9008413.html
Copyright © 2011-2022 走看看