1、用Python实现一个二分查找的函数。

  1. data = [1, 3, 6, 7, 9, 12, 14, 16, 17, 18, 20, 21, 22, 23, 30, 32, 33, 35]
  2.  
  3. def binary_search(dataset,find_num):
  4. if len(dataset) > 1:
  5. mid = int(len(dataset) / 2)
  6. if dataset[mid] == find_num:
  7. print('找到数字:',dataset[mid])
  8. elif dataset[mid] > find_num:
  9. print('你要找的数字在mid[%s]左边'%dataset[mid])
  10. return binary_search(dataset[0:mid],find_num)
  11. else:
  12. print('你要找的数字在mid[%s]右边'%dataset[mid])
  13. return binary_search(dataset[mid+1:],find_num)
  14. else:
  15. if dataset[0] == find_num:
  16. print('找到数字了:%s'%dataset[0])
  17. else:
  18. print('没得找了,你找的%s不在列表中啊。。。'%find_num)
  19.  
  20. find_num = 17
  21. binary_search(data,find_num)
  22.  
  23. 结果:
  24. 你要找的数字在mid[18]左边
  25. 你要找的数字在mid[9]右边
  26. 你要找的数字在mid[16]右边              
  27. 找到数字了:17

2、如何生成一个随机数?

  1. import random
  2. print(random.random()) # 0.2711376711558152 输出一个0~1的随机浮点数
  3. print(random.randint(1,10)) # 7 输出一个1-10的随机整数
  4. print(random.uniform(1,10)) # 3.235651225758224 输出一个1-10的随机浮点数
  5. print(random.choice('aksdhkfae')) # 输出一个随机字符
  6. print(random.sample('fahfewke',3)) # 输出一个含有3个随机字符的列表
  7. items = [1,2,3,4,5,6,7,8]
  8. random.shuffle(items) # 洗牌
  9. print(items) # [7, 2, 3, 5, 8, 1, 6, 4]

 3、如何使用python删除一个文件?

  1. import os
  2. os.remove('path/filename') # 删除文件
  3. os.rmdir/removedirs('dirname') 删除目录/多层目录

 4、谈谈你对面向对象的理解?

  1. 对面向对象的理解
  2.  
  3. 在我理解,面向对象是向现实世界模型的自然延伸,这是一种“万物皆对象”的编程思想。在现实生活中的任何物体都可以归为一类事物,而每一个个体都是一类事物的实例。面向对象的编程是以对象为中心,以消息为驱动,所以程序=对象+消息。
  4.  
  5. 面向对象有三大特性,封装、继承和多态。
  6.  
  7. 封装就是将一类事物的属性和行为抽象成一个类,使其属性私有化,行为公开化,提高了数据的隐秘性的同时,使代码模块化。这样做使得代码的复用性更高。
  8.  
  9. 继承则是进一步将一类事物共有的属性和行为抽象成一个父类,而每一个子类是一个特殊的父类--有父类的行为和属性,也有自己特有的行为和属性。这样做扩展了已存在的代码块,进一步提高了代码的复用性。
  10.  
  11. 如果说封装和继承是为了使代码重用,那么多态则是为了实现接口重用。多态的一大作用就是为了解耦--为了解除父子类继承的耦合度。如果说继承中父子类的关系式IS-A的关系,那么接口和实现类之之间的关系式HAS-A。简单来说,多态就是允许父类引用(或接口)指向子类(或实现类)对象。很多的设计模式都是基于面向对象的多态性设计的。
  12.  
  13. 总结一下,如果说封装和继承是面向对象的基础,那么多态则是面向对象最精髓的理论。掌握多态必先了解接口,只有充分理解接口才能更好的应用多态。
  14. ---------------------
  15. 作者:samhan0616
  16. 来源:CSDN
  17. 原文:https://blog.csdn.net/weixin_40066829/article/details/78111476?utm_source=copy
  18. 版权声明:本文为博主原创文章,转载请附上博文链接!
  1. # 多态的实现:
  2.  
  3. class Animal(object):
  4. def __init__(self,name,age):
  5. self.name = name
  6. self.age = age
  7.  
  8. def talk(self):
  9. raise NotImplementedError('Subclass must implement abstract method')
  10.  
  11. class Cat(Animal):
  12. def talk(self):
  13. print('%s:喵喵喵。。。'%self.name)
  14.  
  15. class Dog(Animal):
  16. def talk(self):
  17. print('%s:汪汪汪。。。'%self.name)
  18.  
  19. def fun(obj): # 一种接口,多种实现
  20. obj.talk()
  21.  
  22. cat = Cat('小七',3)
  23. dog = Dog('小汪',5)
  24.  
  25. fun(cat) # 小七:喵喵喵。。。
  26. fun(dog) # 小汪:汪汪汪。。。

 5、Python面向对象中的继承有什么特点?

继承的优点:

  1、建造系统中的类,避免重复操作

  2、新类经常是基于已经存在的类,这样就可以提升代码的复用程度

继承的特点:

  1、在继承中基类的构造(__init__()方法)不会被自动调用,它需要在其派生类的构造中亲自专门调用。有别于C#

  2、在调用基类的方法时,需要加上基类的类名前缀,且需要带上self参数变量。区别于在类中调用普通函数时并不需要带上self参数

  3、Python总是首先查找对应类型的方法,如果它不能在派生类中找到对应的方法,它才开始到基类中逐个查找。(先在本类中查找调用的方法,找不到才去基类中找)。

6、面向对象中super的作用?

super() 函数是用于调用父类(超类)的一个方法。
  super 是用来解决多重继承问题的,直接用类名调用父类方法在使用单继承的时候没问题,但是如果使用多继承,会涉及到查找顺序(MRO)、重复调用(钻石继承)等种种问题。
  MRO 就是类的方法解析顺序表, 其实也就是继承父类方法时的顺序表。

7、是否使用过functools中的函数?其作用是什么?

Python的functools模块用以为可调用对象(callable objects)定义高阶函数或操作。简单地说,就是基于已有的函数定义新的函数。
所谓高阶函数,就是以函数作为输入参数,返回也是函数。

8、列举面向对象中带爽下划线的特殊方法,如:__new__、__init__

  1. __str__ __call__ __getattr__ __setattr__ __enter__
  2. __exit__ __getitem__ __setitem__ __iter__ __doc__

9、如何判断是函数还是方法?

  1. def fun():
  2. print('这是一个函数')
  3.  
  4. class Obj(object):
  5. def fun(self):
  6. print('这是一个方法')
  7.  
  8. obj = Obj()
  9. print(type(fun)) # <class 'function'>
  10. print(type(obj.fun)) # <class 'method'>

10、静态方法和类方法区别?

  1. 一、先是在语法上面的区别:
  2. 1、静态方法不需要传入self参数,类成员方法需要传入代表本类的cls参数;
  3. 2、静态方法是无妨访问实例变量和类变量的,类成员方法无法访问实例变量但是可以访问类变量
  4. 二、使用的区别:
  5. 由于静态方法无法访问类属性,实例属性,相当于一个相对独立的方法,跟类其实并没有什么关系。这样说来,静态方法就是在类的作用域里的函数而已。

11:1、2、3、4、5 能组成多少个互不相同且无重复的三位数?

  1. count = 0
  2. nums = []
  3. for index1 in range(1,6):
  4. for index2 in range(1,6):
  5. for index3 in range(1,6):
  6. if index1 != index2 and index1 != index3 and index2 != index3:
  7. num = index1 * 100 + index2 * 10 + index3
  8. nums.append(num)
  9. count += 1
  10. print(count)
  11. print(nums)

12、metaclass作用?以及应用场景?

  1. metaclass是类的产生类,而并非继承类
  2. 通过它来控制类的产生,以及类实例化的操作
  3. wtform中实例化自定义form类时执行了其元类的__call__方法
  1.  

13、异常处理写法以及如何主动跑出异常(应用场景)

  1. try:
  2. 执行语句
  3. except 异常类型:
  4. 触发异常后执行的语句
  5. else:
  6. 没有触发异常执行的语句
  7. findlly:
  8. 有没有异常都执行的语句
  9.  
  10. # 主动抛出异常
  11. raise 异常类实例

14、什么是面向对象的mro

  1. 方法查找的顺序

15、isinstance作用以及应用场景?

  1. isinstance作用:来判断一个对象是否是一个已知的类型;
  2.  
  3. 其第一个参数(object)为对象,第二个参数为类型名(int...)或类型名的一个列表((int,list,float)是一个列表)。其返回值为布尔型(True or flase)。
  4.  
  5. 若对象的类型与参数二的类型相同则返回True。若参数二为一个元组,则若对象类型与元组中类型名之一相同即返回True

16、写代码并实现:

Given an array of integers, return indices of the two numbers such that they add up to a specific target.You may assume that each input would 
have exactly one solution, and you may not use the same element twice.
Example:

          Given nums = [2, 7, 11, 15], target = 9,
           
Because nums[0] + nums[1] = 2 + 7 = 9,

           return [0, 1]

  1. nums = [1,2,3,4,5,]
  2. target = 6
  3. index = []
  4. for i in range(len(nums)):
  5. for j in range(i,len(nums)):
  6. if nums[i]+nums[j] == target:
  7. li = []
  8. li.append(i)
  9. li.append(j)
  10. index.append(li)
  11. print(index)
  12. # [[0, 4], [1, 3], [2, 2]]

17、json序列化时,可以处理的数据类型有哪些?如何定制支持datetime类型?

  1. 字符串、列表、字典、数字、布尔值、None
  2. 自定义cls
  3. import json
    import datetime
    class MyEncoder(json.JSONEncoder):
    def default(self, o):
    if isinstance(o,datetime.datetime):
    return o.strftime('%Y-%m-%d %H:%M:%S')
    else:
    return super(MyEncoder,self).default(o)
  4.  
  5. d = {'name':'petrolero','data':datetime.datetime.now()}
    print(json.dumps(d,cls=MyEncoder))  
    # {"name": "petrolero", "data": "2018-10-17 13:01:47"}

18、json序列化时,默认遇到中文会转换成unicode,如果想要保留中文怎么办?

  1. import json
  2. a = json.dumps({'nh':'你好'},ensure_ascii=False)
  3. print(a)
  4. # {"nh": "你好"}

 19、什么是断言?应用场景?

断言条件为真时代码继续执行,否则抛出异常,这个异常通常不会去捕获他.我们设置一个断言目的就是要求必须实现某个条件

 20、有用过 with statement吗?它的好处是什么?

  1. with语句的作用是通过某种方式简化异常处理,它是所谓的上下文管理器的一种
  2.  
  3. 用法举例如下:
  4.  
  5. with open('output.txt', 'w') as f:
  6. f.write('Hi there!')
  7.  
  8. 当你要成对执行两个相关的操作的时候,这样就很方便,以上便是经典例子,with语句会在嵌套的代码执行之后,自动关闭文件。这种做法的还有另一个优势就是,无论嵌套的代码是以何种方式结束的,它都关闭文件。如果在嵌套的代码中发生异常,它能够在外部exception handler catch异常前关闭文件。如果嵌套代码有return/continue/break语句,它同样能够关闭文件。
  9.  
  10. 我们也能够自己构造自己的上下文管理器
  11.  
  12. 我们可以用contextlib中的context manager修饰器来实现,比如可以通过以下代码暂时改变当前目录然后执行一定操作后返回。
  13.  
  14. from contextlib import contextmanager
  15. import os
  16.  
  17. @contextmanager
  18. def working_directory(path):
  19. current_dir = os.getcwd()
  20. os.chdir(path)
  21. try:
  22. yield
  23. finally:
  24. os.chdir(current_dir)
  25.  
  26. with working_directory("data/stuff"):
  27. # do something within data/stuff
  28. # here I am back again in the original working directory
  29.  
  30. 本段转载自:http://www.cnblogs.com/zhuifeng-mayi/p/9248581.html

 21、使用代码实现查看列举目录下的所有文件。

  1. import os
  2. # 使用os.listdir
  3. dir_aim = input('请输入目标路径:')
  4. for filename in os.listdir(dir_aim):
  5. print(filename)
  6.  
  7. # 使用os.walk递归遍历
  8. for root,dirs,files in os.walk(dir_aim):
  9. print('root:',root)
  10. if files:
  11. print('files:')
  12. for file in files:
  13. print(file)
  14. print('')
  15. if dirs:
  16. for dir in dirs:
  17. print(dir)

Python面试题(练习二)的更多相关文章

  1. python面试题(二)字符串常用函数

    今天在微信的公众号上看到了一遍python学习开发的文章,里面有一些python的面试题,碰巧最近python不知道学什么了,索性学一下这篇文章啊!!先写一下一些字符串的常用函数.(ps:本人太菜,若 ...

  2. Python面试题(二)【转】

    转载出处http://www.cnblogs.com/goodhacker/p/3387027.html 1.python中类方法.类实例方法.静态方法有何区别? 区别: 类方法和静态方法都可以被类和 ...

  3. Python面试题(二)

    打印九九乘法表 思路:利用字符串的连接,梯形输出结果 >>> def st(num): ... l = [] ... for x in xrange(1, num + 1): ... ...

  4. SQL + Python 面试题:之二(难度:中等)

    SQL + Python 面试题:之二(难度:中等)

  5. python公司面试题集锦 python面试题大全

    问题一:以下的代码的输出将是什么? 说出你的答案并解释. class Parent(object): x = 1 class Child1(Parent): pass class Child2(Par ...

  6. 【Python】【面试必看】Python笔试题

    前言 现在面试测试岗位,一般会要求熟悉一门语言(python/java),为了考验求职者的基本功,一般会出 2 个笔试题,这些题目一般不难,主要考察基本功.要是给你一台电脑,在编辑器里面边写边调试,没 ...

  7. python 面试题4

    Python面试题 基础篇 分类: Python2014-08-08 13:15 2071人阅读 评论(0) 收藏 举报 最近,整理了一些python常见的面试题目,语言是一种工具,但是多角度的了解工 ...

  8. 很全的 Python 面试题

    很全的 Python 面试题 Python语言特性 1 Python的函数参数传递 看两个例子:           Python   1 2 3 4 5 a = 1 def fun(a):      ...

  9. Python面试题之一:解密

    Python面试题之一: 说明:就是Python工程师面试题 一.字典转换与正则提取值 1:key与Value交换 a = {'a':1,'b':2} print({value:key for key ...

  10. 最新python面试题

    1.一行代码实现1--100之和 利用sum()函数求和 2.如何在一个函数内部修改全局变量 利用global 修改全局变量 3.列出5个python标准库 os:提供了不少与操作系统相关联的函数 s ...

随机推荐

  1. 【机器学习实战】第2章 K-近邻算法(k-NearestNeighbor,KNN)

    第2章 k-近邻算法 KNN 概述 k-近邻(kNN, k-NearestNeighbor)算法主要是用来进行分类的. KNN 场景 电影可以按照题材分类,那么如何区分 动作片 和 爱情片 呢? 动作 ...

  2. 新项目升级到JFinal3.5之后的改变-着重体验自动依赖注入

    最近,JFinal3.5发布,喜大普奔,我也应JBolt用户的需求,将JBolt进行了升级,实现可配置自动注入开启,支持JFinal3.5的项目生成.具体可以看:JBolt升级日志 这等工作做完后,我 ...

  3. uvm_reg_fifo——寄存器模型(十五)

    当我们对寄存器register, 存储器memory, 都进行了建模,是时候对FIFO进行建模了 uvm_reg_fifo毫无旁贷底承担起了这个责任,包括:set, get, update, read ...

  4. CF Gym 100187E Two Labyrinths (迷宫问题)

    题意:问两个迷宫是否存在公共最短路. 题解:两个反向bfs建立层次图,一遍正向bfs寻找公共最短路 #include<cstdio> #include<cstring> #in ...

  5. JS中的作用域和作用域链

    本文原链接:https://cloud.tencent.com/developer/article/1403589 前言 作用域(Scope) 1. 什么是作用域 2. 全局作用域和函数作用域 3. ...

  6. stixel-world和psmnet结合出现的问题

    float32位,4字节 原本的stixel-world是用sgbm生成深度图,并且转成了float型 psmnet保存最终的disparity图是保存成uint16的,skimage.io.imsa ...

  7. spring-data-JPA源码解读

    spring-data-JPA源码部分有两个很重要的部分:1.识别repositories接口 2.将接口添加代理实现类并托管spring管理 JpaRepositoriesRegistrar 目的是 ...

  8. MySql查询时间段的方法

    本文实例讲述了MySql查询时间段的方法.分享给大家供大家参考.具体方法如下: MySql查询时间段的方法未必人人都会,下面为您介绍两种MySql查询时间段的方法,供大家参考. MySql的时间字段有 ...

  9. Java中List集合排序的方法 比较器的使用 根据学生对象数学 语文 英语成绩总和进行sort排序

    package com.swift; import java.util.ArrayList; import java.util.Collections; import java.util.Compar ...

  10. cocos2dx for android 接入 fmod的过程

    cocos2dx自带的音效播放有SimpleAudioEngine和AudioEngine两个,SimpleAudioEngine可以播放简单的音效, 如果播放音效数量过多的话,多导致有些音效播放失败 ...