效果:
目录结构:
- 根目录
- curriculum_inquiry
- __init__.py
- data.py
- main.py
在__init__.py
里写好了核心功能,定义了用于调用的query_today
(查询今天课表)和query_tomorrow
(查询明天课表)函数。
在data.py
里存储了课程时间表timetable
,用whole_week
作为一整周的变量,里面是阿拉伯数字7天,一天里有1-2
,3-4
,5-6
,7-8
,9-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_inquiry
async 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 data
tz = pytz.timezone('Asia/Shanghai') # 指定时区为北京时间
start_date = datetime.date(2023, 2, 27) # 开学时间
timetable = data.timetable
whole_week = data.whole_week
def 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的内容在改变