python大学课程表查询模块【开源】

编程入门 行业动态 更新时间:2024-10-20 07:44:15

python大学<a href=https://www.elefans.com/category/jswz/34/1742828.html style=课程表查询模块【开源】"/>

python大学课程表查询模块【开源】

效果:


目录结构:

- 根目录- curriculum_inquiry- __init__.py- data.py- main.py

__init__.py里写好了核心功能,定义了用于调用的query_today(查询今天课表)和query_tomorrow(查询明天课表)函数。
data.py里存储了课程时间表timetable,用whole_week作为一整周的变量,里面是阿拉伯数字7天,一天里有1-23-45-67-89-10,因为我们的课程是连着两节课一起上的,两节课组成的一个小单元,比如1-2节是一个学科,里面有5个属性,课程名称从第几周到第几周上课,是不分单双周上课还是单周上课还是双周上课教室门牌号教师姓名数组(因为一个科目有两个教师的情况)。
main.py里通过import curriculum_inquiry引入模块,用curriculum_inquiry.query_today()查询今天课表,用curriculum_inquiry.query_tomorrow()查询明天课表
假设在main.py里只有这些代码,这个例子展示了如何调用模块并输出到控制台。

import curriculum_inquiry
print(curriculum_inquiry.query_today())#查询今天课表
print(curriculum_inquiry.query_tomorrow())#查询明天课表

如果想实现和图片上一样的效果(Tg机器人),可以在main.py里这样写:
main.py

from telegram import Update
from telegram.ext import ApplicationBuilder, CommandHandler, ContextTypes
import curriculum_inquiryasync def start(update: Update, context: ContextTypes.DEFAULT_TYPE) -> None:await update.message.reply_text('欢迎使用')async def query_today(update: Update, context: ContextTypes.DEFAULT_TYPE) -> None:await update.message.reply_text(curriculum_inquiry.query_today())async def query_tomorrow(update: Update, context: ContextTypes.DEFAULT_TYPE) -> None:await update.message.reply_text(curriculum_inquiry.query_tomorrow())app = ApplicationBuilder().token("1234567890:AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA").build()app.add_handler(CommandHandler("start", start))
app.add_handler(CommandHandler("today", query_today))
app.add_handler(CommandHandler("tomorrow", query_tomorrow))app.run_polling()

curriculum_inquiy/__init__.py

import datetime
import pytz
from . import datatz = pytz.timezone('Asia/Shanghai')  # 指定时区为北京时间
start_date = datetime.date(2023, 2, 27)  # 开学时间
timetable = data.timetable
whole_week = data.whole_weekdef query(time_object, which_day_str):# 计算几月几日date_str = time_object.strftime('%#m月%#d日')# 计算开学第几周week_num = time_object.weekday() + 1  # 第几周的阿拉伯数字weekday_str = '星期' + '一二三四五六日'[week_num - 1]now_date = time_object.date()weeks_since_start = (now_date - start_date).days // 7 + 1  # 开学第x周(阿拉伯数字)# 计算单双周odd_even_week = '-'odd_even_week_value = ''if weeks_since_start % 2 == 1:odd_even_week = '单'odd_even_week_value = 'odd'elif weeks_since_start % 2 == 0:odd_even_week = '双'odd_even_week_value = 'even'# 生成日期和周的一行信息date_week_info_str = f"{which_day_str}是{date_str},{weekday_str},开学第{weeks_since_start}周,{odd_even_week}周。"# 生成课表内容# 课表生成字符串的字典 如果为False,就生成 '1-2 -' 这样的一行,如果value被替换掉了,则显示课程信息。period_gen_str_dict = {'1-2': False,'3-4': False,'5-6': False,'7-8': False,}# 这一周我的班级有课的课节(别的班级可能会有9-10,11-12的课节)class_period = ['1-2', '3-4', '5-6', '7-8', ]for each_class_period in class_period:  # 循环一天内的每一个课节if whole_week[week_num][each_class_period]['name'] != '':  # 如果课程名称不为空字符串(有内容)# 只有each_class_period的内容在改变# 把例如[1,15]的数组存入变量class_weeks里class_weeks = whole_week[week_num][each_class_period]['week']# weeks_since_start 是开学第x周(阿拉伯数字)if weeks_since_start in range(class_weeks[0], class_weeks[1] + 1):  # 如果在规定的上课周次内whether_to_generate = False  # 是否符合显示条件if whole_week[week_num][each_class_period]['odd_even'] == '':  # 数据如果没写单双周信息whether_to_generate = Trueif whole_week[week_num][each_class_period]['odd_even'] == odd_even_week_value:  # 数据如果和当前单双周信息相同whether_to_generate = Trueif whether_to_generate:period_gen_str_dict[each_class_period] = ''period_gen_str_dict[each_class_period] += f"{whole_week[week_num][each_class_period]['name']} {whole_week[week_num][each_class_period]['classroom']} "teachers = whole_week[week_num][each_class_period]['teacher']for teacher in teachers:period_gen_str_dict[each_class_period] += f"{teacher} "period_gen_str_dict[each_class_period] += f"{timetable[each_class_period]}"return_str = ''return_str += date_week_info_str + '\n'for each_class_period in class_period:  # 循环一天内的每一个课节if period_gen_str_dict[each_class_period] != False:return_str += each_class_period + ' ' + period_gen_str_dict[each_class_period] + '\n'else:return_str += each_class_period + ' -\n'return return_strdef query_today():now_time_object = datetime.datetime.now(tz=tz)  # 获取当前时间return query(now_time_object, '今天')def query_tomorrow():now_time_object = datetime.datetime.now(tz=tz)  # 获取当前时间tomorrow = now_time_object + datetime.timedelta(days=1)  # 获取明天的日期tomorrow_time_object = datetime.datetime(year=tomorrow.year,month=tomorrow.month,day=tomorrow.day,hour=0,minute=0,second=0,microsecond=0,tzinfo=tz)  # 将日期和时间设为明天的 0 时 0 分 0 秒return query(tomorrow_time_object, '明天')

curriculum_inquiry/data.py

timetable = {'1-2': '8:20-9:50','3-4': '10:05-11:35','5-6': '12:55-14:25','7-8': '14:40-16:10','9-10': '17:30-19:00','11-12': '19:10-20:40','晚自习': '17:30-20:00',
}
whole_week = {1: {'1-2': {'name': '软件设计与体系结构','week': [1, 12],'odd_even': '','classroom': 'A101','teacher': ['张三'],},'3-4': {'name': '思政','week': [1, 15],'odd_even': '','classroom': 'A102','teacher': ['李四'],},'5-6': {'name': '人工智能应用开发','week': [1, 15],'odd_even': '','classroom': 'B202','teacher': ['王五'],},'7-8': {'name': '','week': [],'odd_even': '','classroom': '','teacher': [],},'9-10': {'name': '','week': [],'odd_even': '','classroom': '','teacher': [],},},2: {'1-2': {'name': '操作系统','week': [1, 15],'odd_even': '','classroom': 'B201','teacher': ['赵六'],},'3-4': {'name': '','week': [],'odd_even': '','classroom': '','teacher': [],},'5-6': {'name': '微信小程序设计与开发','week': [1, 15],'odd_even': '','classroom': 'A103','teacher': ['孙七', '周八'],},'7-8': {'name': '','week': [],'odd_even': '','classroom': '','teacher': [],},'9-10': {'name': '','week': [],'odd_even': '','classroom': '','teacher': [],},},3: {'1-2': {'name': 'JavaEE体系框架与应用','week': [1, 15],'odd_even': '','classroom': 'A104','teacher': ['吴九'],},'3-4': {'name': '就业指导','week': [5, 8],'odd_even': '','classroom': 'C101','teacher': ['郑十'],},'5-6': {'name': '','week': [],'odd_even': '','classroom': '','teacher': [],},'7-8': {'name': '人工智能应用开发','week': [1, 15],'odd_even': '','classroom': 'B202','teacher': ['王五'],},'9-10': {'name': '','week': [],'odd_even': '','classroom': '','teacher': [],},},4: {'1-2': {'name': '思政','week': [1, 15],'odd_even': 'even','classroom': 'A102','teacher': ['李四'],},'3-4': {'name': '','week': [],'odd_even': '','classroom': '','teacher': [],},'5-6': {'name': '软件设计与体系结构','week': [1, 12],'odd_even': '','classroom': 'A101','teacher': ['张三'],},'7-8': {'name': '微信小程序设计与开发','week': [1, 15],'odd_even': '','classroom': 'A103','teacher': ['孙七', '周八'],},'9-10': {'name': '','week': [],'odd_even': '','classroom': '','teacher': [],},},5: {'1-2': {'name': '形势与政策','week': [5, 8],'odd_even': '','classroom': 'A102','teacher': ['陈二'],},'3-4': {'name': 'JavaEE体系框架与应用','week': [1, 15],'odd_even': '','classroom': 'A104','teacher': ['吴九'],},'5-6': {'name': '就业指导','week': [1, 8],'odd_even': '','classroom': 'A105','teacher': ['郑十'],},'7-8': {'name': '','week': [],'odd_even': '','classroom': '','teacher': [],},'9-10': {'name': '','week': [],'odd_even': '','classroom': '','teacher': [],},},6: {'1-2': {'name': '','week': [],'odd_even': '','classroom': '','teacher': [],},'3-4': {'name': '操作系统','week': [1, 15],'odd_even': '','classroom': 'B201','teacher': ['赵六'],},'5-6': {'name': '','week': [],'odd_even': '','classroom': '','teacher': [],},'7-8': {'name': '','week': [],'odd_even': '','classroom': '','teacher': [],},'9-10': {'name': '','week': [],'odd_even': '','classroom': '','teacher': [],},},7: {'1-2': {'name': '','week': [],'odd_even': '','classroom': '','teacher': [],},'3-4': {'name': '','week': [],'odd_even': '','classroom': '','teacher': [],},'5-6': {'name': '','week': [],'odd_even': '','classroom': '','teacher': [],},'7-8': {'name': '','week': [],'odd_even': '','classroom': '','teacher': [],},'9-10': {'name': '','week': [],'odd_even': '','classroom': '','teacher': [],},},
}

更多推荐

python大学课程表查询模块【开源】

本文发布于:2024-03-13 02:26:00,感谢您对本站的认可!
本文链接:https://www.elefans.com/category/jswz/34/1732975.html
版权声明:本站内容均来自互联网,仅供演示用,请勿用于商业和其他非法用途。如果侵犯了您的权益请与我们联系,我们将在24小时内删除。
本文标签:课程表   开源   模块   大学   python

发布评论

评论列表 (有 0 条评论)
草根站长

>www.elefans.com

编程频道|电子爱好者 - 技术资讯及电子产品介绍!