因为地里面经分散,大家又说很简单,多办懒得附上题目,在这里提供几个思路给大家:
客户有优良购买记录3年
来了一个老头,买了150刀的东西,不是deal的时候买的,也没有之前折扣。问他可不可以不付运费。
若不满足两条,则必须付全款。
跟BST没啥关系,不要看到BST就以为是最左边的路径之和(左边路径可以很长,右边路径可以很短),用递归做很简单
给个array,其中只有一格是9,其他格子是0或1,0表示此路不通,1表示可以走,判断从(0,0) 点开始上下左右移动能否找到这个是9的格子
Maze : 这题折腾了我好久啊!之前没时间把所有题都做一遍(地里的面经已经几乎涵盖了题库了),然后就没做这题,觉得不会遇到……
这题呢,用故事性强一点的说法就是,一只可怜的饥饿的小老鼠在一个N乘以N的迷宫里面(其实就一个二维数组……),它从(0,0)点开始出发,要寻找奶酪来吃(似乎是它闻到有奶酪的味了?)。
然后呢,这个二维数组表示的迷宫里面,1是路,0是墙(如果没记错的话,大家还是认真看看这个),值为9的地方是终点!
题目给出的就是这个二维数组,问你小老鼠最后能不能吃到奶酪(到达9)呢?能的话就返回true,不(e)能(si)的话就返回false。
我留意到了之前做过这个题的楼主提醒,老鼠在(0,0)开始,然后要测(0,0)就是终点(==9)的情况, 多么坑的一个corner case。
然后我就很欢(ku)乐(bi)地开始写了。但是!楼主这题花了30多分钟才写完,原因如下:
倒霉1: 楼主之前各种训练shortest time job first, round robin, 然后各种需要递归迭代的题通通很弱……于是这题就花了很长的时间。
倒霉2: 楼主的网络连接不给力,10分钟之内断了3次,重复登录3次,幸运的是都登录回去了。每次登出都得等2分钟来登回去。(现在想想我应该利用这个登出的时间把题妥妥的做完在登入啊!!)
倒霉3: 楼主没想到起点为0(墙)的情况是直接返回不能(false)的!那时候我已经被网络不佳给搞得特别慌了,就剩12分钟了,心里想着这回惨了,简单题都过不了。然后楼主一个不小心点到“test case”那个tab。(注意不是你的test case运行的情况,而是OA给出来的两个示例test case) 然后那里就有一个起点为墙返回为false…… 然后楼主立即马上迅速地加上了这条才过了的。
给一个int[][]的matirx,对于一条从左上到右下的path pi,pi中的最小值是mi,求所有mi中的最大值。只能往下或右.
大家这么踊跃,分给少了,只能部分人得分了,不好意思。
首先是第一个问题:句柄是操作系统用于跟踪窗口属性而分配给窗口的一个编号。在C或C++中,句柄是一个指针。
第二个问题:因为你定义的a、b变量是整型,那么在VC中是先将a/b所得的值转化为整型(VC中对浮点转整型的处理都是丢弃小数点后的数),然后再转化为浮点数,送给变量c.如果你想得到正确的值,就将a、b中的其中一个设为浮点数或者用c=(float)a/b;
在32为平台下,句柄是一个32位的数。该数唯一的表示了一个对象。
句柄是操作系统分给程序的唯一标识符 (ID),一般为32位的整型,
搂主应该多看看书,这些东西都是很基本的东西
不要这个着急看MFC...
2.因为c是由两个整型的除法得来,所以自然后面的小数被截掉了
句柄简单的可以理解为一个数值,系统用它来访问内部的对象,如:窗口,位图。。。
inspect模块也被称为 检查现场对象。这里的重点在于“现场”二字,也就是当前运行的状态。
inspect模块提供了一些函数来了解现场对象,包括 模块、类、实例、函数和方法。
inspect函数主要用于以下四个方面
本文章会先带大家大概了解一下inspect模块有哪些功能,以及有哪些功能函数,然后再结合实例,解释每个方法他们的使用场景以及使用方法。
第二个参数通常可以根据需要调用如下16个方法;
返回值为object的所有成员,以(name,value)对组成的列表
name:模块名(不包括其所在的package)
inspect.getmembers()函数用于发现对象的成员属性。返回的成员类型取决于我们所传入的对象类型。传入的参数可以是 模块、类、实例、函数、方法。
object可以是 模块、类、实例、函数、方法;
predict表示的是谓语,可以是isclass(),ismodule()等等,用于筛选,看了后面例子就懂了。
用于获取对象的成员属性
现在准备了两个py文件,example_inspect.py文件中存放了一些类和方法的定义,作为模块;do_inspect.py文件会将上个py文件当作模块导入;来看这个模块里面有哪些成员。如下
上面的代码有3个注意点:
1、我们将example_inspect.py作为模块传入getmembers()方法,可以打印出这个模块中所有的成员,并以元组列表形式放回。
2、注意到我在遍历 getmembers()方法时,使用了 if name.startwith("--"),这是为什么呢?因为模块有一些私有属性作为导入实现的一部分,还会包含一组__builtins__。这两个东西的列表非常长,我们一般也都不关心。所以使用if将他们过滤掉。
3、我们还可以将do_inspect.py写法改变一下,如下,利用getmembers的谓语参数,可以选择得到自己想要的成员变量
所以当传入的参数为module时,不能打印出 类的方法。但是可以打印出 模块级别的函数。(与后面参数为 类 时做对比)
会打印出一堆结果,这里我只粘贴上了一部分,以双下划线开始的变量基本都是继承object得来的和一些自带的变量。但是注意到,打印出了 方法:get_name()和__init__() do_nothing() test(),如果我们给类A添加了类变量,同样也会打印出来。
当然我们可以使用 谓语 来筛选。
当然,如果类里面定义了类方法,ismethod会打印出这个类方法,因为类也是对象,而类方法就是与类绑定的方法
在B继承于A情况下,B拥有了A的方法,因此也被打印出来。
可以看出,类方法和实例方法都被打印出来,而静态方法被忽略掉
这两个函数在我们编程中用到的很少。这里也就不做介绍了。后面用到的话,直接去官方文档看就可以了。
getsourcelines()的返回值是一个tuple,其中包含一个字符串列表,和文件中源代码出现的起始行号,如下
3.1 (补充知识)函数签名是什么?
函数签名对象,表示调用函数的方式,即定义了函数的输入和输出
一个函数由这么bai几部分组成,函数名、参数个数、参数类型、返回值。函数签名就是指 参数个数、参数类型。
那么为什么会有参数签名这么个东西呢?
答:函数在重载时,利用函数签名的不同(即参数个数与类型的不同)来区别调用者到底调用的是那个方法。就如同下面两个方法,语言正是通过他们的函数签名不同,来区别同函数名但是不同参数的函数。
3.2(补充知识)python函数的参数分类
那么,我们把这些参数给扣出来又有什么用呢?
我们可以先为这些参数赋值,然后再去调用我们的函数。就实现了:先给参数赋值,然后再去和函数发生关联、调用。
使用函数签名的bind的方法,检查函数参数是否匹配签名。
继续延续 inspect_example.py的例子,通过函数签名的bind方法,接受函数参数。如果匹配,返回参数BoundArguments实例,如果不匹配,则抛出TypeError,并给出详细的异常信息。
通过BoundArguments实例的属性,可以获取函数签名、参数的值等内容。
并且,bind()函数必须指定 必传参数,默认参数不会计入到 BoundArguments中
也许你对上面三句话不太懂,那么好好看下面的代码例子,你就懂了。
这里只介绍getmro()函数,它接受的参数为 类,然后返回值是一个 类的tuple,它会解析出传入类的所有基类,并按照mro的顺序排列。(不从mro的,自行百度吧,比较简单的概念就不说了)
为了讲清楚这里,需要补充一些知识:
5.1.1、栈帧是什么,以及程序调用与栈帧
看完了关于栈帧的文章,相信大家已经知道栈帧是什么,以及函数调用时是如何将信息存入栈帧的。
我们经常说的 某一帧 指的就是一个函数存储在栈中的所有信息 就是一帧, 千万不要以为某一帧就是说的某一条数据,帧是一个块的概念。
那么frame对象又是什么呢?
Frame对象表示执行帧,表示程序运行时函数调用栈中的某一帧。
想要获得某个函数相关的栈帧,则必须在调用这个函数且这个函数尚未返回时获取。可以使用sys模块的_getframe()函数、或inspect模块的currentframe()函数获取当前栈帧。
而frame包含了一些属性,其实这些属性对应的就是我们在栈帧里存储的数据,如下
前一个堆栈帧(朝向调用者),如果这是底部堆栈帧则为None |
在这个框架中执行的Code对象 |
用于查找局部变量的字典 |
表示该函数是否在限制执行模式下执行的标志 |
给出精确的指令(这是代码对象的字节码字符串的索引) |
当前代码在文件中的哪一行 |
上面这些参数,大家可以通过ID E调试,看到他们的组成。还有很多参数我没有介绍。我这里只给出一个例子,大家可以自己去调试。
使用stack()函数,还可以访问到当前帧到第一个调用者的所有栈帧。这个例子与上面的例子相似。只不过它会一直等待,直到递归结束,再打印栈信息。
其实stack()获取的就是frame的列表,是一个按照调用顺序包含了所有栈帧的列表。
那么,它有什么用处呢?
我用它排插过错误,通过定位栈,来定位错误的来源。其他的场景还没有用过。如果后面有的话,再补充。
版权声明:文章内容来源于网络,版权归原作者所有,如有侵权请点击这里与我们联系,我们将及时删除。