Python教程

hakerrank 刷题三(Python 基础)

本文主要是介绍hakerrank 刷题三(Python 基础),对大家解决编程问题具有一定的参考价值,需要的程序猿们随着小编来一起学习吧!

1. 题一:Dealing with Complex Numbers. 构建一个class Complex(object),object含有实数部分和虚数部分,__sub__, __add__等替换python的built-in “-,+” operator,__str__用来编辑并返回相应格式的复数。输入:

  • 2 1
  • 5 6

要求输出,两个复数的加减乘除,看以下表:

这个题要求我们运用python class的概念,其中包含的__init__, __str__, self 等都是需要掌握的基础。在这个Class里,每个object 有两个属性,re(real part) 和im(imaginary part)。 当a,b被Class(a,b)时,里面的__str__将自动检测a,b,并且执行相应的return。__ini__(self, re, im) 里的self 代表创建的object,而其他__sub__,__add__等后面的self, no 两个是不同的object。思路,了解这些含义后,看一下code吧。

 2. 题二: reduce() function. reduce()和lambda 连用,用来连续地将,左边的数据和右边的一个数据带入lambda 匿名函数。最后的argument代表初始值,默认是为0的。

3. 题三: Maximize it. 输入n,m,紧接着输入n个list。要求在每个list里,挑出一个element, (第一个element 表示这个list 的大小, 所以不需要每列第一个数) 把他们的平方值相加,最后算出除以m的余数。找到将结果最大化的值。

思路,这里用itertools.product(*lists), 每个list中抽出一个element与别的list中抽出的结合成一个新list,example: a=[1,2] ,b=[4,5] --> product(a,b) =[(1,4),(1,5),(2,4),(2,5)]. 有了各种组合方式后,用map(),lambda, sum 算出所有可能的值,最后输出最大值。

4.  题四:Validating the postal code. 这个题目imoprt re,re(regular expression) 是一个有效的搜索字符规律的class,真的很复杂,读它的documendation (长的一批),脑细胞挂了一半。。。总而言之, re 能让我们快速的找到一段话里的 字母,数字,特殊符号,并且可以找出一定规律的单词,数字等。运用起来大致是先定义一个re.compile(r"......") compiler, 再对想要确认的string进行需要的操作:match(),find(),findall()等等。 其中的含义。。。说来话长,不过说下几个重点。 

  • 开头的r".....", r 代表raw,将赋予".... "里面的'$', '.' , '\', '*' 等相应的含义,比如$代表读取string直至结尾,'.'代表除了"\n"的任何字符. 
  • compiler里可以插入特定的组合,用来表示特定字符的规律,比如 \d 代表只数字,\D代表除了数字的任何字符,\s -- 空格, \S -- 除了空格的, \w -- 字母或数字,\W -- 除了字母和数字。
  • 连续重复: *代表读取至少0个重复,+代表读取至少1个重复,?代表0或1个重复。example: ca*t 会读取('ct' , 'cat', 'caat'...)。 而ca+t只会读取1个'a'以上的:('cat','caat',...)。紧接着ca?t。 我们用代码表达是这样的:
  • Capturing group : 用"( )" 来包括想要capturing group的内容。当match()了之后,将会产生一个默认等于读取内容的group[0],之后每个"( )"包括的内容都会被送到新的group[1], group[2]...里。可以直接通过group(0,x,y ...) 来获取一个包含每个小组的list。groups()则返回所有被"( )"包含的小组。也可以用(?P<name>) 来储存为字典,用groupdict()来展示为字典.
  • Lookahead assertion. 有(?=... ), (?! ...)等,用来检查"... "里的内容是不是能被读取,如果能被读取的化,什么事都没有发生,继续之后的读取,如果不能则直接fail。(?!)则相反。甚至可以
    这个功能对于检查string里特定位置是否为目标内容很有用处,比如我们要检查一系列文件的结尾,要求不能以.bat结尾。这时候怎么做呢,我们在结尾用(?! bat) 来检查有没有bat. 具体的方法如下
  • 对于检查字符或者字符串是否重复出现,可以用到的是'\n'.    首先来看p=re.compile(r'(...) \1'), 括号里的'...'将被保存在group[1]中,随后用 '\1' 来检查目前的位置,是否有和group[1]的内容一致的字符或字符串,没有的话就fail了。同样的,可以用(?P<name>)先对小组命名,之后在目标处用(?P=name)来检查是否重复。

 5. 题五: Matrix Script. 把相邻两个字母或数字中间的 非字母数字 替换成空格。

example: 

This$#is% Matrix#  %!

 替换成:

This is Matrix#  %!

 --> 用 re.sub(r'(?<=\w)\W+(?=\w)',' ', string) 替换. (?<=...)的作用是检查有没有'...',即使有,也不输出'...'里的内容

这篇关于hakerrank 刷题三(Python 基础)的文章就介绍到这儿,希望我们推荐的文章对大家有所帮助,也希望大家多多支持为之网!