随笔分类 - Python
摘要:这两天在写爬虫程序,涉及英文文本处理,需要规范化英文标点符号的写法。正常情况下,英文句号「.」后面需要保证有且只有一个空格,但也有例外情况,比如「i.e.」、「e.g.」、「P.S.」这种。由于无法预测大小写,因此在正则表达式中使用了「标志位」flags,却死活不生效。 一开始,我的函数是这样写的:
阅读全文
摘要:因为工作原因,需要定期清理某个文件夹下面创建时间超过1年的所有文件,所以今天集中学习了一下Python对于本地文件及文件夹的操作。网上 这篇文章 简明扼要地整理出最常见的os方法,抄袭如下: os.listdir(dirname):列出dirname下的目录和文件 os.getcwd():获得当前工
阅读全文
摘要:本题来自 Project Euler 第22题:https://projecteuler.net/problem=22 本题中,有个txt文件,内有5000个英文姓名,要求首先对这些姓名进行排序,然后分别计算各个姓名每个字母的序号之和a、以及该姓名在txt文件中的序号b,将a和b相乘,作为该姓名的分
阅读全文
摘要:本题来自 Project Euler 第21题:https://projecteuler.net/problem=21 首先需要明确两个数学概念: 真因数(proper divisor):除去数字本身的所有因数(不要求是素数)。比如:12的所有真因数是:1、2、3、4、6 亲和数(amicable
阅读全文
摘要:本题来自 Project Euler 第20题:https://projecteuler.net/problem=20 这题也容易,让先算出阶乘100的结果,然后把这结果的每个数字相加即可。 我想,应该是要练习递归阶乘吧,但我觉得用循环也挺方便的啊,就是很讨厌递归函数,总记不住写法,唉……
阅读全文
摘要:本题来自 Project Euler 第19题:https://projecteuler.net/problem=19 好吧,欧拉计划第18题做不出来,先跳过,先做第19题吧。 这题思路挺简单:在区间之内,先找出第1个星期天,然后7天7天地找,只要是每月的第1天,计数器就加1,很快就有答案。 话说,
阅读全文
摘要:本题来自 Project Euler 第17题:https://projecteuler.net/problem=17 老实说,看到这题的时候,我心里其实是不愿意做的:对于我这样的算法渣,肯定得写出N个 if 和 elif。但没办法,只好硬着头皮写,错了好几回之后,总算是把所有情况都考虑到了。擦汗…
阅读全文
摘要:本题来自 Project Euler 第16题:https://projecteuler.net/problem=16 送分题又来了。一行代码搞定!思路:先计算出 2**1000,转为字符串,取出每个字符,转为数值,求和。搞定。
阅读全文
摘要:本题来自 Project Euler 第15题:https://projecteuler.net/problem=15 原谅我智商低,这题我思考了一两天了也没想出来。参考网上 这篇文章 的分析,说是: 20*20的方格中,从左上角到右下角,不论怎么走,都只需要40步,其中必然有20步时横着走,20步
阅读全文
摘要:本题来自 Project Euler 第14题:https://projecteuler.net/problem=14 互动百科说了,考拉兹猜想--又称为3n+1猜想、角谷猜想、哈塞猜想、乌拉姆猜想或叙拉古猜想,是指对于每一个正整数,如果它是奇数,则对它乘3再加1,如果它是偶数,则对它除以2,如此循
阅读全文
摘要:本题来自 Project Euler 第13题:https://projecteuler.net/problem=13 这题算是送分题吧。只要取得这100个数字,相加,取前10位数值就可以了。因为数值无法切片,所以用 str() 先转为字符串,之后就好办了。
阅读全文
摘要:本题来自 Project Euler 第12题:https://projecteuler.net/problem=12 所谓“三角形数”,指的是自然数相加后的和,第n个三角形数即是从1开始的n个自然数相加后的和。例如:第5个三角形数就是 1+2+3+4+5=15。而15这个数字拥有的所有因子为:1、
阅读全文
摘要:本题来自 Project Euler 第11题:https://projecteuler.net/problem=11 就是有个 20 * 20 的数字网格,求任意直线方向(横、竖、斜)4个数字相乘最大的乘积。 做完这一题,深深感觉到写代码真是体力劳动…… 话说,把 n1-n20 放进 lst 列表
阅读全文
摘要:本题来自 Project Euler 第10题:https://projecteuler.net/problem=10 又是一道求解素数的题目。看来,只要能找到判断素数的最佳方法,就能解决很多问题啊。 本题沿用了之前的素数判断函数。不知道有没有优化的版本,能大幅压缩计算时间啊……
阅读全文
摘要:本题来自 Project Euler 第9题:https://projecteuler.net/problem=9 这题若是想清楚了,其实是相当简单,无非是找出各种 a+b+c=1000 的组合,然后验证 a**2 + b**2 = c**2 就行了。遍历范围方面,因为 a<b<c,最小的 a 最大
阅读全文
摘要:本题来自 Project Euler 第8题:https://projecteuler.net/problem=8 有一个 1000 位的数字,任意选取相邻的 13 个数字相乘,求其中最大的乘积。 老实说,要找出这个最大的乘积并不难,遍历一下就好。但——1000位的数字?放在 PyCharm 里根本
阅读全文
摘要:本题来自 Project Euler 第7题:https://projecteuler.net/problem=7 求解第 10001 个素数。 上述代码的思路其实挺简单:首先自定义一个函数,用来判断某个数字是否为素数。之后从数字1开始判断,只要是素数,就放进 lst 列表,直到 len(lst)
阅读全文
摘要:本题来自 Project Euler 第6题:https://projecteuler.net/problem=6 这题纯粹是送分题,就是简单的加减法和乘方计算。应该没啥算法可言吧。。。
阅读全文
摘要:本题来自 Project Euler 第5题:https://projecteuler.net/problem=5 为了这题,我这数学渣真是想破了脑袋也没想出算法。后来只好借助网络手段,在 “Python实现Project Euler 5” 中了解到,原来求解 a,b 两个数字的最小公倍数,可以把
阅读全文
摘要:本题来自 Project Euler 第4题:https://projecteuler.net/problem=4 所谓的“回文积”(Palindrome Product),指的是某个数字,正着念、倒着念都一样,而且这个数字是另外两个数字之乘积。比如:9009 = 91 × 99,9009就是个回文
阅读全文