分类 Python 下的文章

3月10号晚上,我在v2ex上看到了这篇帖子 《JetBrains Quest,解开可获得全家桶三个月免费订阅》 https://www.v2ex.com/t/651662,当时准备已经洗完澡,准备休息了,看到这个,勾起了我的兴趣,虽然我用的是Community的版本……

No.0

首先看第一步,给出了一串文本,如下:

48 61 76 65 20 79 6f 75 20 73 65 65 6e 20 74 68 65 20 73 6f 75 72 63 65 20 63 6f 64 65 20 6f 66 20 74 68 65 20 4a 65 74 42 72 61 69 6e 73 20 77 65 62 73 69 74 65 3f

从这个文本来看,应该是16进制的文本, 直接将这个16进制转换成文本试下:

x = '4861766520796f75207365656e2074686520736f7572636520636f6465206f6620746865204a6574427261696e7320776562736974653f'
print(bytes.fromhex(x).decode('utf-8'))

果然,结果是:

Have you seen the source code of the JetBrains website?

那就去JetBrains的官网看看

- 阅读剩余部分 -

3月11日,今天晚上到家,发现v2ex上又有人发出来JetBrains的第二道解谜了,就又参与了。

谜题是在JetBrains的twitter发布的:

Time for the next #JetBrainsQuest!
.spleh A+lrtC/dmC .thgis fo tuo si ti semitemos ,etihw si txet nehw sa drah kooL .tseretni wohs dluohs uoy ecalp a si ,dessecorp si xat hctuD erehw esac ehT .sedih tseuq fo txen eht erehw si ,deificeps era segaugnal cificeps-niamod tcudorp ehT

No.1

这段文字一看就像倒过来的,使用python进行reverse处理:

print(".spleh A+lrtC/dmC .thgis fo tuo si ti semitemos ,etihw si txet nehw sa drah kooL .tseretni wohs dluohs uoy ecalp a si ,dessecorp si xat hctuD erehw esac ehT .sedih tseuq fo txen eht erehw si ,deificeps era segaugnal cificeps-niamod tcudorp ehT"[::-1])

得到结果:

The product domain-specific languages are specified, is where the next of quest hides. The case where Dutch tax is processed, is a place you should show interest. Look hard as when text is white, sometimes it is out of sight. Cmd/Ctrl+A helps.

No.2

下一个谜题藏身于JetBrains的一款DSL工具中,参加过第一个谜题的话,应该会注意到,上次谜题中的MPS就是这个工具。打开MSP的网址:https://www.jetbrains.com/mps/

找到有关“Dutch tax”的地方,这个是一个case study,叫做“Agile Law Execution Factory”,介绍是“Domain-specific languages to implement Dutch tax legislation and process changes of that legislation.”,点击下面的“Read MPS case study”,是一个pdf文件,地址是:https://resources.jetbrains.com/storage/products/mps/docs/MPSQuest_DTO_Case_Study.pdf

下载好这个pdf文件,然后我使用chrome打开,乍一看下去,没有任何线索。但是上面的提示中,说到有些文本是白色的,使用Ctrl+A进行帮助,我就Ctrl+A然后Ctrl+C,再Ctrl+V到vscode中,发现有下面这一段话:

This is our 20th year as a company,
we have shared numbers in our JetBrains
Annual report, sharing the section with
18,650 numbers will progress your quest.

其实,这段话就位于第一页首部右侧的空白区域内。

- 阅读剩余部分 -

今天下午上数据库应用的课程,在路上就突然冒出这么一个想法。

交作业~~~

好几门课都有作业要交,大部分都是电子版的,特别是一些论文或报告,都是以word或pdf格式交的,发QQ或邮件,命名都有学号和姓名。

课代表收作业的时候都要检查一下,谁没有交,催一下,或者告诉老师~

当然,我们这一个小班也才50多个人,大班也才100号人,检查谁没有交作业可能花不了多少功夫。

然而,对于整个学院,或者带了很多班的老师,检查起来确实是一件很费力的功夫。

如果交大的作业形如:13091xxx_XXX,那么按文件名排序,可能还要好找些。不过就有几个特别的同学是这么交的:XXX_13091xxx,这个就尴尬了。

可以帮他们改名字,不过这估计是另一份工作了,和我今天要讨论的话题不符,我们要找到是谁没有交作业,而不是帮那些有个性的同学改名字。

我想了下,于是写了一个python,来做这份工作。

当然,大家可能对我的成品有兴趣,特别是课代表或什么的(自恋一下),不过,大部分同学可能并不是课代表,他们就对我是如何做的这个过程比较感兴趣。

  • 首先,思考一下环境。那些收上来的文件是放在一个文件夹里的(可能怪异的课代表会采用其他的方法,比如按男女或者其他什么的)
  • 然后,咱们要对这些文件的文件名进行分析,就要取得这些文件名
  • 最后对这些文件名进行分析,取出咱们关心的学号,然后进行比对,看看有哪些同学没有交作业

Ok,这个就是大概的步骤。看我的源码

#3.py 
#encoding:utf8 
import os 
import re

directory=raw_input("Please enter directory to traversal:") 
s=range(13091250,13091260)#大家的学号,是全部的哟,一个也不能少,13091250-13091259 
for root,dirs,files in os.walk(directory):#遍历目录下的所有文件 
   print root 
    for name in files:#取得文件名称,进行分析 
        n=re.findall(r’[w+]*(d{8})[w+]*’,name)#正则表达式找出那8个连在一起数字,即学号 
        if n:#找出学号,如果没有的话,那这位童鞋要么学号不是8位,要么他是采用了什么加密手段 
            m=int(n[0])#对取出的学号进行类型转换,变为int 
            if m in s:#查看该同学的学号在不在那一个大列表里 
                s.remove(m)#在的话,删掉,那么剩下的就是没有交作业的 
print s#OVER,看看是哪些同学没有交作业

看下的的测试文件,我只选取13091250-13091259 的进行测试:

这些文件位于E:name

wholostpaper

这些文件,极尽那些同学的想法吧

看看我的结果,是哪些同学没有交作业呢?

哦,是257和259啊,那课代表可以去找他们啦~

大家可以拿其他语言实现以下,比如java,C#,C/C++ ~

虽然这个寒假才决定要好好学下Python,现在先忙考试,毕竟能刷分还是要刷下分数,为下学期末的保研努力。

不过,前天吧,一个同学(f-x-ch)跟我说他的想法,提到了Django,正好我寒假也准备学下,一下子就勾引起了我的兴趣,现在就想试试手,于是就下了一个,跑起来了~

django0

这个Django是从国内某站下的,那个官网djangoproject.com貌似打不开,就想用这个1.2版本的了。

django1

先把服务跑起来~

django2

看下效果,貌似还不错的样子~

这个,我下学期课程不多的话,可能就和那位同学一起实现他说的那个计划了,也算是大学期间一件有意义的事。

他学习很好,貌似也找过很多和他一样学习优秀的人,拉他们一起,不过,那些人对这种不能加学分,不能保研的事情不感兴趣,看出来,他很失望。

之所以,找到我,可能是因为我跟他说了我这个学期用Python实现了编译原理课程的词法分析和语法分析,而他正想用Django这个框架~

所以,所以,加油吧~

这学期,事有点多,而这个博客也是在墙外~

下学期,估计会开始正常的更新~