这个代码运行结果-5是怎么得来的?

  • while循环缺少i++造成死循环
  • Print Pattern:for-loop里一共两句话但是没有用大括号,所以第二句没有被包含进去
  • 循环里要加上 i++, 否则死循环
  • 曼切斯特如果arr[i-1],arr相等为0,否则为1,要注意不但==要改成!=,ret[0]也要加一下,不然有一个case过不了。

因为地里面经分散,大家又说很简单,多办懒得附上题目,在这里提供几个思路给大家:

  1. 排序类:这种题Compile & Run出来的结果,多半是Sort的顺序反了,稍微看一下找到关键的if statement把他反过来就成。我7题里遇到2题这种的。
  2. TLE类:这种结果TLE的多半是while死循环了,有while的检查一下。
  3. 其他类:其他特别的bug,多半地里找一下都有,记一下就成。

  • 2 8 5 6 8 (4) 11(应该是4吧,两两这么看的, 2、5、8、11, 加3得来的。 另外一组应该是减2,也就是8、6、4)
  • 16 30 46 62 (13+3, 29+1, 43+3, 61+1 然后前面的都是质数,每个质数之间隔了三个质数, 61之后第四个质数是79, 79+3=82,或者16加上后面的数为第二个的结果)
  • 2, 5, 26,(677)(规律是当前数字是前一个数字平方加1)
  • ?(记录ASSERTIVENESS每个字母的位置,再记录下SENSSAEVISTRE每个字母的位置,找出mapping关系(比如A在ASSERTIVENESS中第一个位置,在SENSSAEVISTRE第六个位置,那么1->6)。最后记录MULTINATIONAL每个字母的顺序,按照之前找出的mapping对找出来(如M肯定会在所求字符串的第六个位置)。这种题字符串的长度和所包含的字母个数肯定是一样的。)重复字母的情况是有一定规律的,你看ASSERTIVENESS->

  • 一个面朝北的朋友,先左走15m,然后一个about-turn走了30,这货在哪?(about turn应该指的是向后转)
  • 小明往东南走4 miles,往西走8 miles, 再往西北走4 miles。现在小明离出发点是什么方位?(正西?平行四边形?)
  • 小明面朝南,往左走20miles, 再往右走 10miles, 再往左走30miles。 现在小明离出发点是什么方位?(大致东南方向?)
  • 南5西4南7东4北5,问方向、离原点距离
  • 一个楼有3层,每个level 坐一些人,第二层能坐最多,一共坐66个人。给了两个条件求第二层坐了多少人。
    • 1,其中有一层坐了21 人。
    • 2,第二层比其中一层多座了2人
    • 我选的可以求出第二层多少人, 21,22, /bbs
    • 客户有优良购买记录3年

      • 如果不满足2,那么要是他满足地区code小于10,收10刀,大于10,收8刀。

来了一个老头,买了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模块方法的使用

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函数的参数分类

  • POSITIONAL_ONLY(不用管,很难用到):仅限定位参数, python声名的函数不支持, 但是有些c语言实现且不接受关键字参数的函数, 例如: divmod 支持
参数 参数类型 参数默认值 # 创建一个函数参数列表,列表内的元素由类Parameter的实例组成 # Parameter实例化时,依次接受参数名、参数类型、默认值和参数注解 # 默认值和参数类型默认为空,这里的空值不是None,而是Parameter.empty,代表没有值 # 使用Signature类,接受函数参数列表,实例化出函数签名实例

那么,我们把这些参数给扣出来又有什么用呢?

我们可以先为这些参数赋值,然后再去调用我们的函数。就实现了:先给参数赋值,然后再去和函数发生关联、调用。

使用函数签名的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的列表,是一个按照调用顺序包含了所有栈帧的列表。

那么,它有什么用处呢?

我用它排插过错误,通过定位栈,来定位错误的来源。其他的场景还没有用过。如果后面有的话,再补充。

}

我要回帖

更多关于 写出下面代码的运行结果 的文章

更多推荐

版权声明:文章内容来源于网络,版权归原作者所有,如有侵权请点击这里与我们联系,我们将及时删除。

点击添加站长微信