2020-07
15

改进

By xrspook @ 10:06:49 归类于: 烂日记

我觉得哪一天自己不看一下脚本,尤其是在工作日的时候,就觉得日子好像缺了点什么。脚本可以是VS Code里的那些,也可以是Excel VBA,同样也可以是各种的网页源代码,又或者是XML文件。反正就是一些不是给人看的东西,又或者说,不是给人直接看的东西。那些东西经过软件的处理以后,结果是给人看的,但是我看那些东西的时候,却是给机器看的。我还没有神经病到要看二进制代码的地步。

一个没有完美倾向的码农,绝对不是一个好码农。所以当我看到,单位的那个所谓智能系统出来东西每一页都有错的时候,我怎么可能不吐槽。他们测试过了吗?他们真的测试过了吗?他们不只是没有测试过,而且做那个表的人根本没用心,连抄都可以抄错。因为我自己是一个码农,所以我知道那些步骤到底应该是怎样的。我不知道专业的码农日子是怎么过的,反正只要我开始任务。任何时候我脑子里可能都在想,有可能是吃饭的时候,也有可能是跑步的时候,经常发生在我洗澡的时候。

写出来的东西的确能实现一些功能,但是那个东西真的能兼容所有情况吗?如果有一些突发的呢?突发的时候,我们可以手动使用B计划,也就是非智能秒杀计划,但是能不能在秒杀计划里加一些判断分分支适应特殊情况呢?这完全是可以做到的,但是一开始的时候,那并不是核心功能所在,所以没有被考虑进去。到达一定程度以后,我就要把那个功能泛化出来。不仅仅做到一些核心的东西,连一些正常的例外也得考虑进去。之所以这么说,是因为昨天走回宿舍的路上,在洗澡之前,我又想起前天写的两个脚本我还可以加一些条件判断进去,使之适应一些后续增加的例外事件。虽然说那些是例外事件,但是在某些情况下,有可能变成常态。之前我不知道该如何处理,但昨天,写了两个数据透视表的脚本以后,我明白到数据透视表我可以固定用某个表名。如果之前已经存在那样的表名,第一步需要把那个表删掉,然后开始后面的操作。又或者,我并不需要删掉那个东西,我只需要改变数据的引用范围。在我的知识范围内,直接删掉比调整引用范围简单。但实际上调整应用范围也必定是一个可控的东西,所以大概接下来我要了解一下怎么在VBA里改变数据透视表的应用范围。另外一个脚本更简单一些,直接是判断某个单元格那时是不是某个固定的东西,是的话就无需进行插入操作,直接开始排序,不是的话就要先进行插入,然后排序。

如果之前我没有学过python,没有努力地写过各种脚本,大概我会觉得泛化有点麻烦,但是当我经历过那些东西以后,我觉得这一切都理所当然了,我甚至想写一个自定义函数把主流程丢到里面去,那么,核心部分的判断就会非常明了,理论上VBA也肯定能做到。之所能具备了这种思路,我必须得感谢Think Python这本书。这种思路是我大学时学习程序语言的时候所不知道的。虽然那时我通过了计算机二级C语言的考试,但那考试对我来说只是一张纸。是后续我接触到、我自学回来的东西,成就了现在的我。

变得更好的路永无尽头。

2020-07
8

过去的纠结开花了

By xrspook @ 9:38:16 归类于: 烂日记

当我以死磕式全包围的方法学习Think Python和做里面的习题的时候,网友觉得我完全不需要这样,那样太学生了,只需用到什么就学什么就可以了,但实际上,我觉得我这样做挺好。虽然我学的时候并不知道我除了这样还能怎样。看完书,但不会做里面的习题,我这书算算看好了吗?我要上手python,得到达条件反射的程度,不经过练习根本不行。我完全明白知道了理解了某些东西,但没有经过实践会是一个什么状态。

初中前两年我的英语老师从前是大学老师,后来不知怎的沦落到在一所臭名昭著的中学里教英语。他从来不给我我们布置作业,也不会有什么小测之类的东西,所以一年下来除了期中考试和期末考试,我们见不到习题。的确,开学的时候除了教材以外还会发1本练习题,很薄的一本,但做不做,做到什么程度,老师是放任自流的。他讲课完全么有问题,语法解释得很到位,字也写得非常漂亮,但他这种教法除非遇到非常自觉刷题的学生,遇到我们这种完全不自觉的,简直是必死无疑。我觉得小学毕业的时候,我的英语是很不错的,尤其是英语听力,因为某年寒假我还被选去某个地方上某个班强化过,但初中的前两年我算是被荒废了。要用得溜,无论你心法掌握得多好,依然需要大量的练习。中考的几门科目里,我的英语是最低分的。当我上了一所重点高中以后,我更加领会到我跟其他同学的差距,因为我所经历过的习题实在比他们少太多了!为什么当年我会刷物理的参考书,刷化学的参考书,却从来不刷英语的参考书和习题呢???英语这个东西和理科有一定的差别,理科你掌握了原理以后或许还能八九不离十,即便某些题目里有些综合,见过和没见过顶多是反应快慢的差别,但思路还是摆在那里的。英语这个东西有什么规定搭配,什么默认的例外,什么俚语,没遇到根本没法玩,我的跟头就是栽在了这里。如果可以重来,英语这个鬼东西我一定会刷很多题,而且还必须建立错题本。海量的阅读量和海量的单词量外加各种写作技巧拼凑起来,英语考试是可以拿高分的。不过话说回来,英语考试高不高分我完全无所谓,大概从高中开始,我就觉得英语是一种工具,实用至上。跟外国人交流的时候你根本不需要用非常正确的英语他们都能理解,所以其实六十分跟九十分没啥区别,都能解决问题。

学习python我之所以要做习题是因为Think Python那本书里面的实例其实非常少,知识点也不是真的全部都涵盖了。融会贯通这种东西完全靠做习题去达成。近段时间,我在写博客导出数据的转换脚本。的确,一些功能性的东西,我还是得去搜索,边学边用,但那些最基础的思路,是在我做习题的时候印到我脑子里的。比如我要筛选标签,正常人的第一个反应肯定是找筛选的函数,如果标签关键词只有一个,用find就好,但如果多个,那就得用正则了。我一开始也是怎么干的,但后来我发现这样会带入一些莫名其妙的路人甲,我需要准确匹配关键词,所以先建立列表,然后用if str in list就能完美解决的问题。如果标签数量多,还可以用字典替换列表,in在字典里的索引速度杠杠的。如果我不曾在字符串、列表和字典那里下过功夫,我怎么可能会有这种思路。习题的确折磨了我好段时间,但那都是值得的。

过去的纠结,让我现在顺畅。

2020-06
10

shelf这只鬼

By xrspook @ 9:52:26 归类于: 烂日记

连题目都看不懂到底要做什么,解答那道题当然是无从说起,但是我还是硬着头皮去做了。用我理解的那个方式去做。本来我没有打算看参考答案,我是去看另一道题的参考答案的,参考答案没看懂,顺便把上一题的参考答案下载回来,结果发现,那个我看不懂的单词的确是个人家觉得你应该知道,但实际上我毫不知情的东西。shelf中文翻译很好理解,就是柜子嘛,但是柜子是干嘛的呢?这到底纯粹是某个单词,某个函数,某个字典,还是什么东西呢?当我看到参考答案的文件的命名后,我有点明白了,那个估计是一个数据库。我直接拿着那个单词去问我的网友,他也没反应过来,这到底是什么东西?他没学过python,他学过其他编程语言。这就证明了,其它编程语言里是没有这个东西的。写Think Python这本书的人默认我们都知道shelf是什么。在那个单词出现之前,那一章书里没有出现过那个东西,我看的那章书是第14章,前面13章也半个字没有提及这个单词到底意味着什么。情况就好像,你在没有学过python的人面前说元组,人家完全不知道你在说什么。之前的习题,如果遇到这种情况,写书的会在题目后面提醒那是个什么东西,读者可以自己从某个链接那里了解这个玩意,但这道题他们半个字都没有提醒,所以我真的很怀疑翻译Think Python这本书的中国人到底有没有看懂这个单词。如果他们看懂了,至少他们应该提醒一下读者,这实际上是要他们把字典里的映射放到数据库里面,而那个数据库又不是真的传统意义上的数据库。要解释这种东西,的确用三言两语无法说清。即便我已经看过中文版Python手册里面介绍shelf的部分,但我觉得自己还是没搞懂到底那是什么。

按照参考答案的写法,我在自己的程序里先加入了一个建立数据库的语句,然后再增加shelf的处理。我不知道到底是怎么回事,因为终端里光标就一直停在那个地方,好像卡机一样,当我关掉软件以后,脚本的文件夹里面多了一些数据库文件。我不知道那到底是什么,但显然里面有很多东西。其中一个dir文件,有100多KB,而另外一个数据库的缓存文件,接近30MB,我不知道哪来那么多的内容。大概我应该把后缀改一改,然后用Access打开看一下里面到底有些什么神奇的玩意。因为这个数据库很大,所以我在终端里就看到光标卡在那里。为什么python里的字典秒杀就能显示完毕的东西建立数据库居然这么庞大呢?可想而知,在字典里可以秒杀完成的搜索,如果放在数据库里反应时间估计是万倍的区别。这让我想起Excel的VBA里,如果读写的是单元格,那么脚本将非常耗时,但如果把读写的内容先存在数组里面,完成以后一并输出,效率会高非常多,随便高个几百倍算很少了。

高中的时候,我学过Access,但只是老师说什么我就做什么,我只知道一些非常皮毛的东西。Access的精髓是数据库,数据库的灵魂是查询语句,但那时的学习我们只停留在可视化表格操作。

无论精通了哪一门编程语言,所有事情都能用那个方法搞定。有些人学习是为了赚更多的钱,而我努力学习只是因为我想知道、我想实现。

2020-06
9

我得有本手册

By xrspook @ 10:52:11 归类于: 烂日记

到底我想要的是什么类型的教材呢?其实我没想明白。大概是个问题我永远都想不明白。从我自学python以来,我觉得自己实在遇到了太多的问题。Think Python 2是一本很好的书,但问题是那个东西实在太跳跃了。他们只会告诉你,你该往哪个方向研究,但是没有确切的告诉你具体的方法。这是一个挺郁闷的局面,从大处上说,这样的教育方式的确有利于学生自学。大概他们默认的学生首先还得备有一大堆的其他教材。起码手边得有一本像字典般的手册。手册这种东西我感觉跟字典差不多,你不可能读懂里面的每一条细则,但是当你要用到某个功能的时候,你得明白如何查找以及如何使用。这里的使用,很多情况下不是单打独斗,而是把多个功能结合在一起。所以,如果我手边只有一本Think Python 2,我怎么可能学的下去呢?!这种觉悟是我学第14章,讲有关文件的时候才领悟到的。这章书里的知识点实在太多,而书里面的例子就好像蜻蜓点水一般,你甚至不知道该如何模仿,你不知道放在某个大的案例里该怎么使用。看完一整章书以后,我感到很蒙圈。他们给我的感觉就像是以高铁的速度,带我游览了故宫。导游讲的是不咸不淡的英语里面夹杂着咖喱味。语速还算可以,但问题是我眼前的画面太多了,我还没搞清楚怎么回事就已经到了下一个讲解点。在一章书里,他们谈到了普通的文件读写,讲到了数据库,讲到了在python里用命令行实现功能。我不知道他们默认的读者到底是什么层次的,为什么我从他们的介绍看来,他们觉得读取文件跟调用数据库又或者是随手用命令行控制所有很简单,根本不需要浪费口水。我只能在那里发呆,不知道发生了什么。直到第14章,他们才表达出了python的根本属性,像乐高积木一样,拼凑就能实现功能。所有的python文件都可以以模块的方式被引用,然后直接调用里面的函数,所以只要你手边的积木足够多,那些积木又足够强大,你可以拼凑出自己的王国。在其它程序语言里,我也试过把其他文件里面的函数搬过来用,但那个时候我只是把整个函数复制过来,而不是用以引入模块的方式。之所以没做到这一步,大概是因为我还没学得那么的深入。

当文件可以以模块方式被引入,然后使用的时候,自然就会进入了其它语言里我没有接触到,但却把我整得很惨的递归。获取一个文件夹里面所有文件的路径是一个递归,这对他们来说是非常简单,再正常不过的递归,但是对我来说,这已经是一个有点让我望而生畏的东西了。对我来说,python的递归就是我心里的魔鬼,我确信某一天,我肯定能克服这个东西。但现在我还没有达到那个层次。

要怎么啃下Think Python 2的第14章,我不知道。即便我把那些文字阅读一遍又一遍,把那些习题全部都亲手过一遍,我觉得我还是知道得不够多。

如果在看Think Python时候,手边必须得有一本手册类的东西,我应该选择什么书呢?

2020-06
5

随机单词扎堆成文

By xrspook @ 14:47:54 归类于: 扮IT

从某本书里随机找单词拼出句子段落。重点是把握好前缀和后缀,前缀要捆绑查找,后缀要关联对应。

Exercise 8: Markov analysis: Write a program to read a text from a file and perform Markov analysis. The result should be a dictionary that maps from prefixes to a collection of possible suffixes. The collection might be a list, tuple, or dictionary; it is up to you to make an appropriate choice. You can test your program with prefix length two, but you should write the program in a way that makes it easy to try other lengths. Add a function to the previous program to generate random text based on the Markov analysis. Here is an example from Emma with prefix length 2: He was very clever, be it sweetness or be angry, ashamed or only amused, at such a stroke. She had never thought of Hannah till you were never meant for me?” “I cannot make speeches, Emma:” he soon cut it all himself. For this example, I left the punctuation attached to the words. The result is almost syntactically correct, but not quite. Semantically, it almost makes sense, but not quite. What happens if you increase the prefix length? Does the random text make more sense? Once your program is working, you might want to try a mash-up: if you combine text from two or more books, the random text you generate will blend the vocabulary and phrases from the sources in interesting ways. Credit: This case study is based on an example from Kernighan and Pike, The Practice of Programming, Addison-Wesley, 1999. You should attempt this exercise before you go on; then you can download my solution from http://thinkpython2.com/code/markov.py. You will also need http://thinkpython2.com/code/emma.txt.

1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
import string
import random
from collections import defaultdict
def set_book(fin1,num):
    d = defaultdict(list) # 默认键值为列表
    l = []
    header = ()
    for line in fin1:
        line = line.replace('-', ' ')
        for word in line.rstrip().split(): # 空格换行为分割,单词存入列表
            l.append(word)
    for i in range(len(l)-num): # 以列表序号逐一推进方式建立字典
        header = (l[i-1],) # 元组header为前缀,做键
        for j in range(i,i+num-1):
            header += (l[j],)
            j += 1
        if l[i+num-1] not in d[header]:
            d[header].append(l[i+num-1]) # 列表后缀做键值
    return d
def next(start, book):
    return random.choice(book[start])
fin1 = open('emma.txt', encoding='utf-8')
prefix_num = 3 # 前缀个数
suffix_num = 100 # 后缀个数
book = set_book(fin1,prefix_num)
start = random.choice(list(book.keys())) # 随机前缀开头
final =  start
for i in range(suffix_num): # 截取最后几个单词为前缀找后缀
    final += (next(final[len(final)-prefix_num:], book),) 
for word in final:
    print(word, end=' ')
# reigns alone. A very proper compliment! and then follows the application, 
# which I think, my dear, you said you had a great deal happier if she had no 
# intellectual superiority to make atonement to herself, or frighten those 
# who might hate her into outward respect. She had never seen her look so well, 
# so lovely, so engaging. There was consciousness, animation, and warmth; 
# there was every appearance of its being all in proof of how much he was 
# in love with, how to be able to return! I shall try what I can do. 
# Harriet's features are very delicate, which makes a likeness
© 2004 - 2021 我的天 | Theme by xrspook | Power by WordPress