ctguoj-cli校oj命令行版


python大作页做了一个校oj的命令行版. 源于之前刷LEETCODE使用 leetcode-cli 体验到了屌丝般顺滑…

开发环境:

功能演示:

ha

ctguoj list -c 显示比赛列表:

ctguoj list -p 显示题目列表

ctguoj show ranking 显示排名

ctguoj submit id 提交题目

ctguoj show help 显示帮助信息

代码结构

leetcode-cli 用的js,所以只能模仿功能。 我在网上找了v2ex和网易云音乐命令行版python源码 学习借鉴.

    session = requests.session()  #得到session对象
    data = {                                                         
         'user.username': username,                               
          'user.userpassword': password,                             
          'verifycode':vcode                              
    }   
    #发送登录请求,得到返回内容对象resp,data是登录参数
    resp = session.post(login_url,data=data)
    print(resp.text)  #输出网页内容
    
    
    #初始化cookie对象,.cookies是保存文件名
    session.cookies = cookiejar.LWPCookieJar(".cookies") 
    #保存cookie,开始没加两个参数,保存cookie始终为空
    #ignore_discard的意思是即使cookies将被丢弃也将它保存下来,
    #ignore_expires的意思是如果在该文件中cookies已经存在,则覆盖原文件写入
    session.cookies.save(ignore_discard=True, ignore_expires=True)
    #加在cookie
    session.cookies.load(ignore_discard=True, ignore_expires=True)
    

解析示例:

       #初始化soup对象,resp.text为网页内容
        soup = BeautifulSoup(resp.text,"lxml")
        pList = [] #保存题目列表
        #查找所有id为title_+数字 的div元素
        allProblemDiv = soup.find_all('div',id=re.compile(r'title_\d*'))
        #每个div块包含一个题目信息
        for pdiv in allProblemDiv:
            p = Problem() #自定义题目类 
            p.Pid = re.sub("\D", "",pdiv['id']) #获取题目id
            p.title = pdiv.find('div',class_='nav').string.split('.')[1].strip()  #题目标题
            pList.append(p)  
        return pList
    
    class UserInfo:
        #构造函数
        def __init__(self):
            pass
        #打印用户信息
        def showUserInfo(self):
            #设置颜色
            username = termcolor.colored(self.username, 'white')
            #设置对齐占
            username = '{:<{l}}'.format(username,l= 25-len(username.encode('GBK'))+len(username))
            score = termcolor.colored(self.score, 'red')
           #格式化输出 
            info = ''.join(rank + ' ' + username+' ' + name + ' ' + stuid+ ' '+ college + ' ' + major + ' ' + score)
            print(info)

不足与改进:

代码:

我的gayhub

0

Powered by Jekyll and Theme by solid