day17:第三方模块(time,datetime,calenda,pygame)

time模块

import time  #导入模块
# 获得时间戳timeStamp,距1970-1-1(unix操作系统将1970年1月1日作为时间纪元,因为32位系统只能表示68.1年,所以综合考虑选择1970年)的秒数
# 当前时间的时间戳
timeStamp = time.time()
# 指定时间的时间戳(strptime将指定时间转化为时间元组,mktime将时间元组转成时间戳)
timeStamp = time.mktime(time.strptime("2008-01-02 10:50:50","%Y-%m-%d %H:%M:%S" )))
# 获得本地时间的时间元组(localtime将时间戳转成时间元组)
time_struc = time.localtime(time.time())
# 时间元组转成时间字符串
time_str = time.strftime("%Y-%m-%d %H:%M:%S",time_struc)

三种形式的相互转化:

(1) 时间字符串 -> 时间元组 ->时间戳
(2)时间戳 -> 时间元组 ->时间字符串
时间元组是中间过渡形式,两头的时间字符串和时间戳不能直接互转。

时间字符串 时间元组 时间戳 strptime mktime localtime strftime 时间字符串 时间元组 时间戳

(1)时间字符串转时间元组:strptime(“2008-01-02 10:50:50”,"%Y-%m-%d %H:%M:%S" )
时间元组转成时间戳:mktime()
(2) 时间戳转时间元组:localtime()
时间元组转时间字符串:strftime("%Y-%m-%d %H:%M:%S", localtime(time.time()))

例子:2018年1月3日的3天后的时间字符串形式

# 要转换的字符串时间
ori_str = '2018-5-3'
# 字符串时间->时间元组
ori_stru = time.strptime(ori_time,"%Y-%m-%d")
# 时间元组 -> 时间戳
ori_stamp = time.mktime(ori_stru)
# 3天后的时间戳
new_stamp = ori_stamp + 3600*24*3
# 时间戳转化成时间元组
new_stru = time.localtime(new_stamp)
# 时间元组转成字符串
new_str = time.strftime("%Y-%m-%d",new_stru)
print(new_str)

休眠time.sleep(1) 参数单位为秒

耗时 time.clock() 获得当前时间

# 打印程序执行时间
startTime = time.clock()
for x in range(0, 5):
    print("*")
    time.sleep(0.1)  # 暂停0.1秒
endTime = time.clock()
print(endTime - startTime)  # 打印程序执行时间

datetime模块

  • 导入
from datetime import datetime,timedelta
  • 获得日期时间,时间戳
# 获得日期时间
d1 = datetime.now()
d2 = datetime(2008,10,11,11,56,57)
# 获得年月日时分秒
d1.year
d1.month
......
# 转化成时间戳
d3 = datetime.timestamp(d1)

timedelta计算时间差

t1 = datetime(2008,11,11,12,11,22)
t2 = timedelta(days=3)
# 三天前的日期
t1-t2
# 三天后的日期
t1+t2

calendar模块

# 导入日历模块
import calendar
# 月份的万年历形式
c1 = calendar.month(2008,5)
# 月份的二维列表形式
c2 = calendar.monthcalendar(2008,5)
# 年份的万年历形式
c3 = calendar.calendar(2008)
# 是否闰年
c4 = calendar.isleap(2009)
# 两个年份间有几个闰年
c5 = calendar.leapdays(2000,2020)
# 返回某月的第一天是周几(周一为0),共几天
c6 = calendar.monthrange(2008,5)
# 返回星期几
c7 = calendar.weekday(2008,10,2)

pygame

  • 指定国内源安装
pip install -i https://pypi.tuna.tsinghua.edu.cn/simple pygame
  • 卸载
pip uninstall pygame

学生成绩管理系统v2

选择值由menu.makeChoice()返回,由main()进行判断即可。这样将除了主程序以外的所有函数都放在menu模块中。
main.py

# ---coding:utf-8----
# 文件名: 作业2_main.py
# @Time:2020/2/24 15:58

import 作业2_menu as menu
def main():
    while True:
        menu.mainMenu()
        subMenu = menu.makeChoice()

        if subMenu == '0':
            menu.shutDown()
        elif subMenu == '1':
            menu.infoInput()
        elif subMenu == '2':
            menu.infoOutput()
        elif subMenu == '3':
            menu.infoSearch()
        elif subMenu == '4':
            menu.infoOrder()
        else:
            print("请输入0、1、2、3、4中的一个。")

if __name__ == "__main__":
    main()

menu.py

# ---coding:utf-8----
# 文件名: 作业2_menu.py
# @Time:2020/2/24 15:58
infoList = []


def mainMenu():
    print('''******欢迎使⽤成绩管理系统********
        [1] 学⽣信息输⼊
        [2] 学⽣信息输出
        [3] 查找学⽣信息
        [4] 成绩排序
        [0] 退出
        ********************************''')

def makeChoice():
    while True:
        subMenu = input("请输入你的选择【0-4】:")
        return subMenu

def shutDown():
    print("*" * 50)
    print("谢谢使用,再见!")
    print("*" * 50)
    exit(0)

fm = "\t{:>8}\t{:>8}\t{:>8}\t{:>8}\t{:>8}\t{:^8}"
fm1 = "{:>5}{:>8}{:>5}{:>5}{:>5}{:>5}"

def infoInput():
    while True:
        info = input(f"请输入第{len(infoList) + 1}个学生的信息,按n退出(请按姓名、学号、数学成绩、计算机成绩输入,如张三,200901,95,100:)").split(",")
        if len(infoList) > 30:
            print("该班人数不超过30")
            break
        if info[0] == 'n':
            print(infoList)
            break
        for i in infoList:
            if i["id"] == info[1]:
                print("重复输入相同id号学生")
                break
        else:
            infoList.append({"name": info[0], "id": info[1], "math": int(info[2]), "computer": int(info[3])})


def infoOutput():
    print(fm.format("姓名", "id", "数学", "计算机", "总分", "平均分"))
    for k in infoList:
        print(fm.format(k['name'], k['id'], k['math'], k['computer'], k['computer'] + k['math'],
                        (k['computer'] + k['math']) / 2))


def infoSearch():
    id = input("输入要查找的学号:")
    for k in infoList:
        if k['id'] == id:
            print(fm1.format(k['name'], k['id'], k['math'], k['computer'], k['computer'] + k['math'],
                             (k['computer'] + k['math']) / 2))
            break
    else:
        print("无此id号")


def infoOrder():
    if len(infoList) != 0:
        for j in range(len(infoList) - 1):
            for i in range(len(infoList) - 1 - j):
                if infoList[i]['math'] + infoList[i]['computer'] < infoList[i + 1]['math'] + infoList[i + 1][
                    'computer']:
                    infoList[i], infoList[i + 1] = infoList[i + 1], infoList[i]
    else:
        print("没有任何学生记录")
    print(fm.format("姓名", "id", "数学", "计算机", "总分", "平均分"))
    for k in infoList:
        print(fm.format(k['name'], k['id'], k['math'], k['computer'], k['computer'] + k['math'],
                        (k['computer'] + k['math']) / 2))

  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值