1. Python 的特点和优点是什么?
优点:1. 简单 Python的语法非常优雅,甚至没有像其他语言的大括号,分号等特殊符号,代表了一种极简主义的设计思想。阅读Python程序像是在读英语。
2. 易学 Python入手非常快,学习曲线非常低,可以直接通过命令行交互环境来学习Python编程。
3. 免费/开源 Python的所有内容都是免费开源的,这意味着你不需要花一分钱就可以免费使用Python,并且你可以自由地发布这个软件的拷贝、阅读它的源代码、对它做改动、把它的一部分用于新的自由软件中。
4. 自动内存管理 如果你了解C语言、C++语言你就会知道内存管理给你带来很大麻烦,程序非常容易出现内存方面的漏洞。但是在Python中内存管理是自动完成的,你可以专注于程序本身。
5. 可以移植 由于Python是开源的,它已经被移植到了大多数平台下面,例如:Windows、MacOS、Linux、Andorid、iOS等等。
6. 解释性 大多数计算机编程语言都是编译型的,在运行之前需要将源码编译为操作系统可以执行的二进制格式(0110格式的),这样大型项目编译过程非常消耗时间,而Python语言写的程序不需要编译成二进制代码。你可以直接从源代码运行程序。在计算机内部,Python解释器把源代码转换成称为字节码的中间形式,然后再把它翻译成计算机使用的机器语言并运行。
7. 面向对象 Python既支持面向过程,又支持面向对象,这样编程就更加灵活。
8. 可扩展 Python除了使用Python本身编写外,还可以混合使用像C语言、Java语言等编写。
9. 丰富的第三方库 Python具有本身有丰富而且强大的库,而且由于Python的开源特性,第三方库也非常多,例如:在web开发、爬虫、科学计算等等
缺点:
1. 速度慢 由于,Python是解释型语言,所有它的速度会比,C、C++慢一些,但是不影响使用。由于,现在的硬件配置都非常高,基本上没有影响,除非是一些实时性比较强的程序可能会受到一些影响,但是也有解决办法,可以嵌入C程序。
2.Python 的 GIL 锁限制并发: Python 的另一个大问题是,对多处理器支持不好。如果读者接触 Python 时间比较长,那么,一定听说过 GIL 这个词。GIL 是指 Python 全局解释器锁(Global Interpreter Lock),当 Python 的默认解释器要执行字节码时,都需要先申请这个锁。这意味着,如果试图通过多线程扩展应用程序,将总是被这个全局解释器锁限制。当然,我们可以使用多进程的架构来提高程序的并发,也可以选择不同的 Python 实现来运行我们的程序。
3.Python 2 与 Python 3 不兼容: 如果一个普通的软件或者库,不能够做到后向兼容,那么,它会被用户无情的抛弃了。在 Python 中,一个槽点是 Python 2 与 Python 3 不兼容。因为 Python 没有向后兼容,给所有的 Python 工程师带来了无数的烦恼。
2. 什么是lambda函数?它有什么好处?
lambda 函数是一个可以接收任意多个参数(包括可选参数)并且返回单个表达式值的函数。 lambda 函数不能包含命令,它们所包含的表达式不能超过一个。不要试图向lambda函数中塞入太多的东西;如果你需要更复杂的东西,应该定义一个普通函数,然后想让它多长就多长。
lambda函数可以接受任意个参数,包括可选参数,但是表达式只有一个:
>>> g = lambda x, y: x*y
>>> g(3,4)
12
>>> g = lambda x, y=0, z=0: x+y+z
>>> g(1)
1
>>> g(3, 4, 7)
14
也能够直接使用lambda函数,不把它赋值给变量:
>>> (lambdax,y=0,z=0:x+y+z)(3,5,6)
14
如果你的函数非常简单,只有一个表达式,不包含命令,可以考虑lambda函数。否则,你还是定义函数才对,毕竟函数没有这么多限制。
3. 深拷贝和浅拷贝的区别是什么?
深拷贝是将对象本身复制给另一个对象。这意味着如果对对象的副本进行更改时不会影响原对象。在 Python 中,我们使用 deepcopy()函数进行深拷贝,使用方法如下:
>>> import copy
>>> b=copy.deepcopy(a)
浅拷贝是将对象的引用复制给另一个对象。因此,如果我们在副本中进行更改,则会影响原对象。使用 copy()函数进行浅拷贝,使用方法如下:
>>> b=copy.copy(a)
4. 列表和元组有什么不同?
try…except…except…[else…][finally…]
执行try下的语句,如果引发异常,则执行过程会跳到except语句。对每个except分支顺序尝试执行,如果引发的异常与except中的异常组匹配,执行相应的语句。如果所有的except都不匹配,则异常会传递到下一个调用本代码的最高层try代码中。
try下的语句正常执行,则执行else块代码。如果发生异常,就不会执行;如果存在finally语句,最后总是会执行。
5. Python里面如何生成随机数?
答:random模块
随机整数:random.randint(a,b):返回随机整数x,a<=x<=b
random.randrange(start,stop,[,step]):返回一个范围在(start,stop,step)之间的随机整数,不包括结束值。
随机实数:random.random( ):返回0到1之间的浮点数
random.uniform(a,b):返回指定范围内的浮点数
6. 如何在Python中实现多线程?
a. Python有一个multi-threading包,但是如果你想让multi-thread加速你的代码,那么使用它通常不是一个好主意。
b. Python有一个名为GlobalInterpreter Lock(GIL)的结构。 GIL确保只有一个“线程”可以在任何时候执行。一个线程获取GIL,做一点工作,然后将GIL传递到下一个线程。
c. 这种情况很快发生,因此对于人眼看来,您的线程似乎并行执行,但它们实际上只是轮流使用相同的CPU核心。
d. 所有这些GIL传递都增加了执行的开销。这意味着如果您想让代码运行得更快,那么使用线程包通常不是一个好主意。
7. 如何在python中使用三元运算符?
三元运算符是用于显示条件语句的运算符。这包含用于评估为true或false值的语句。
句法:三元操作符语法如下,
[on_true] if [expression] else [on_false]
例:
x,y = 25,50
big = x if x < y else y
如果x 8. 用一个例子解释Python中的继承。 继承允许一个类获得另一个类的所有成员(比如属性和方法)。继承提供代码可重用性,使创建和维护应用程序变得更容易。我们继承的类称为super-class,继承的类称为派生/子类。 以下是Python支持的不同类型的继承: a. 单一继承 - 派生类获取单个超类的成员。 b. Multi-level继承 - 从基类base1继承的派生类d1,d2继承自base2。 c. 分层继承 - 从一个基类可以继承任意数量的子类 d. 多重继承 - 派生类从多个基类继承。 9. 解释Flask是什么及其好处? Flask是基于“Werkzeug,Jinja2和良好意图”BSD许可证的Python网络微框架。 Werkzeug和Jinja2是它的两个依赖项。这意味着它对外部库几乎没有依赖性。它使框架变得轻盈,只是少量依赖于更新和更少的安全性错误。 会话基本上允许您记住从一个请求到另一个请求的信息。在flask中,会话使用签名的cookie,以便用户可以查看会话内容并进行修改。当且仅当有密钥Flask.secret_key,用户可以修改会话。 10. Python中的字典是什么? Python中的内置数据类型称为字典。它定义了键和值之间的one-to-one关系。字典包含一对键及其对应的值。字典由键来索引。 我们来举个例子: 以下示例包含一些键,Country, Capital & PM,它们的相应值分别是印度,德里和莫迪。 dict={'Country':'India','Capital':'Delhi','PM':'Modi'} print dict[Country] India print dict[Capital] Delhi print dict[PM] Modi 11. 什么是负指数,为什么使用它们? Python中的序列是索引的,它由正数和负数组成。正的数字使用'0'作为第一个索引,'1'作为第二个索引,以此类推。 负数的索引从'-1'开始,表示序列中的最后一个索引,' - 2'作为倒数第二个索引,依次类推。 12. 如何用Python来进行查询和替换一个文本字符串? 可以使用sub()方法来进行查询和替换,sub方法的格式为: a. sub(replacement, string[,count=0]) b. replacement是被替换成的文本 c. string是需要被替换的文本 d. count是一个可选参数,指最大被替换的数量 13. 解释一下python的and-or语法 与C表达式 bool ? a : b类似,但是bool and a or b,当 a 为假时,不会象C表达式 bool ? a : b 一样工作 应该将 and-or 技巧封装成一个函数: defchoose(bool, a,b):return(booland[a]or[b])[0] 因为 [a] 是一个非空列表,它永远不会为假。甚至 a 是 0 或 '' 或其它假值,列表[a]为真,因为它有一个元素。 14. 请写出一段Python代码实现删除一个list里面的重复元素 1,使用set函数,set(list) 2,使用字典函数, >>>a=[1,2,4,2,4,5,6,5,7,8,9,0] >>> b={} >>>b=b.fromkeys(a) >>>c=list(b.keys()) >>> c 15. 单引号,双引号,三引号的区别? 单引号和双引号是等效的,如果要换行,需要符号(\),三引号则可以直接换行,并且可以包含注释 如果要表示Let’s go 这个字符串 单引号:s4 = ‘Let\’s go’ 双引号:s5 = “Let’s go” s6 = ‘I realy like“python”!’ 这就是单引号和双引号都可以表示字符串的原因了。 16. 当退出 Python 时是否释放所有内存分配? 答案是否定的。那些具有对象循环引用或者全局命名空间引用的变量,在 Python 退出是往往不会被释放 另外不会释放 C 库保留的部分内容。 17. Python里面search()和match()的区别? match()函数只检测RE是不是在string的开始位置匹配,search()会扫描整个string查找匹配, 也就是说match()只有在0位置匹配成功的话才有返回,如果不是开始位置匹配成功的话,match()就返回none 。 18. 如何在Python中随机化列表中的项目? 考虑下面显示的示例: from random import shuffle x = ['Keep', 'The', 'Blue', 'Flag','Flying', 'High'] shuffle(x) print(x) 以下代码的输出如下。 ['Flying', 'Keep', 'Blue', 'High', 'The','Flag'] 19. 在python中编译和链接的过程是什么? 编译和链接允许正确编译新扩展而不会出现任何错误,并且只有在通过编译过程时才能进行链接。如果使用动态加载,则它取决于系统提供的样式。 python解释器可用于提供配置设置文件的动态加载,并将重建解释器。 这需要的步骤如下: a. 使用任何名称以及系统编译器支持的任何语言创建文件。例如file.c或file.cpp b. 将此文件放在正在使用的发行版的Modules /目录中。 c. 在Modules /目录中存在的Setup.local文件中添加一行。 d. 使用spam file.o运行该文件 e. 成功运行此重建解释程序后,在top-level目录中使用make命令。 f. 如果文件已更改,则使用命令“make Makefile”运行rebuildMakefile。 20. Python解释“re”模块的split(), sub(), subn()方法。 要修改字符串,Python的“re”模块提供了3种方法。他们是: split() - 使用正则表达式将“split”给定字符串放入列表中。 sub() - 查找正则表达式模式匹配的所有子字符串,然后用不同的字符串替换它们 subn() - 它类似于 sub(),并且还返回新字符串和替换的序号。 21. range和xrange之间有什么区别? 在大多数情况下,xrange和range在功能方面完全相同,它们都提供了一种生成整数列表供您使用的方法。唯一的区别是range返回一个Python列表对象,xrange返回一个xrange对象。 这意味着xrange实际上并不像run-time那样生成静态列表。它使用称为yielding的特殊技术根据需要创建值。该技术与一种称为生成器的对象一起使用。这意味着,如果你有一个非常巨大的范围,你想生成一个列表,比如10亿,xrange就是要使用的功能。 如果你有一个真正的内存敏感系统,例如你正在使用的手机,尤其如此,因为range将使用尽可能多的内存来创建整数数组,这可能导致内存错误并导致崩溃程序。 22. Django,Pyramid和Flask之间的差异。 Flask是“microframework”,主要用于具有更简单要求的小型应用程序。在Flask中,您必须使用外部库。 Pyramid适用于大型应用程序。它提供了灵活性,并允许开发人员为他们的项目使用正确的工具。开发人员可以选择数据库,URL结构,模板样式等。 Django也可以像Pyramid一样用于更大的应用程序。 23. 列出Django中的继承样式。 在Django中,有三种可能的继承样式: 抽象基类:当您只希望父类包含您不想为每个子模型键入的信息时,使用此样式。 Multi-table继承:使用此样式如果您是sub-classing现有模型并且需要每个模型都有自己的数据库表。 代理模型:您可以使用此模型,如果您只想修改模型的Python级别行为,而无需更改模型的字段。 24. 什么是Python monkey补丁? 在Python中,术语monkey补丁仅指run-time上的类或模块的动态修改。 考虑以下示例: # m.py class MyClass: def f(self): print "f()" 然后我们可以像这样运行monkey-patch测试: import m def monkey_f(self): print "monkey_f()" m.MyClass.f = monkey_f obj = m.MyClass() obj.f() 输出如下: monkey_f() 我们可以看到,在模块之外,我们确实对函数f()的行为做了一些改变,实际执行的是函数monkey_f(),。 25. 有两个序列a,b,大小都为n,序列元素的值任意整形数,无序? 要求:通过交换a,b中的元素,使[序列a元素的和]与[序列b元素的和]之间的差最小。 1. 将两序列合并为一个序列,并排序,为序列Source 2. 拿出最大元素Big,次大的元素Small 3. 在余下的序列S[:-2]进行平分,得到序列max,min 4. 将Small加到max序列,将Big加大min序列,重新计算新序列和,和大的为max,小的为min。 26. 如何用Python来发送邮件? 可以使用smtplib标准库。 以下代码可以在支持SMTP监听器的服务器上执行。 import sys, smtplib fromaddr =raw_input(“From: “) toaddrs = raw_input(“To: “).split(‘,’) print “Enter message, end with ^D:” msg = ” while 1: line = sys.stdin.readline() if not line: break msg = msg + line # 发送邮件部分 server = smtplib.SMTP(‘localhost’) server.sendmail(fromaddr, toaddrs, msg) server.quit() 27. 请写一个Python逻辑,计算一个文件中的大写字母数量. >>> import os >>>os.chdir('C:\\Users\\lifei\\Desktop') >>> with open('Today.txt') astoday: count=0 for i in today.read(): if i.isupper(): count+=1 print(count) 运行结果: 26 28. Python中的标识符长度能有多长? 在Python中,标识符可以是任意长度。此外,我们在命名标识符时还必须遵守以下规则: a. 只能以下划线或者 A-Z/a-z 中的字母开头 b. 其余部分可以使用 A-Z/a-z/0-9 c. 区分大小写 d. 关键字不能作为标识符,Python中共有如下关键字: 29. 解释一下Python中的//,%和 ** 运算符 //运算符执行地板除法(向下取整除),它会返回整除结果的整数部分。 >>> 7//2 3 这里整除后会返回3.5。 同样地,执行取幂运算。ab会返回a的b次方。 >>> 2**10 1024 最后,%执行取模运算,返回除法的余数。 >>> 13%7 6 >>> 3.5%1.5 0.5 30. 在Python中如何使用多进制数字? 我们在Python中,除十进制外还可以使用二进制、八进制和十六进制。 a. 二进制数字由0和1组成,我们使用 0b 或 0B 前缀表示二进制数。 >>> int(0b1010) 10 b. 使用bin()函数将一个数字转换为它的二进制形式。 >>> bin(0xf) ‘0b1111’ c. 八进制数由数字 0-7 组成,用前缀 0o 或 0O 表示 8 进制数。 >>> oct(8) ‘0o10’ d. 十六进数由数字 0-15 组成,用前缀 0x 或者 0X 表示 16 进制数。 >>> hex(16) ‘0x10’ >>> hex(15) ‘0xf’ 31. 怎样获取字典中所有键的列表? 使用 keys() 获取字典中的所有键 >>>mydict={'a':1,'b':2,'c':3,'e':5} >>> mydict.keys() dict_keys(['a', 'b', 'c', 'e']) 32. 怎样声明多个变量并赋值? 一共有两种方式: >>> a,b,c=3,4,5 #This assigns 3,4, and 5 to a, b, and c respectively >>> a=b=c=3 #This assigns 3 to a,b, and c 33. 元组的解封装是什么? 首先我们来看解封装: >>> mytuple=3,4,5 >>> mytuple (3, 4, 5) 这将 3,4,5 封装到元组 mytuple 中。 现在我们将这些值解封装到变量 x,y,z 中: >>> x,y,z=mytuple >>> x+y+z 得到结果12. 34. 解释如何在Django中设置数据库。 可以使用命令edit mysite /setting.py,它是一个普通的python模块,模块级别代表Django设置。 Django默认使用SQLite;对于Django用户来说这很容易,因此不需要任何其他类型的安装。如果您的数据库选择不同,则必须使用DATABASE'default'项中的以下键来匹配您的数据库连接设置。 引擎:您可以使用'django.db.backends.sqlite3','django.db.backeneds.mysql','django.db.backends.postgresql_psycopg2','django.db.backends.oracle'等来更改数据库 名称:数据库的名称。如果您使用SQLite作为数据库,那么数据库将是您计算机上的文件,Name应该是完整的绝对路径,包括该文件的文件名。 如果您没有选择SQLite作为数据库,则必须添加密码,主机,用户等设置。Django使用SQLite作为默认数据库,它将数据作为单个文件存储在文件系统中。如果你有数据库服务器-PostgreSQL,MySQL,Oracle,MSSQL-并且想要使用它而不是SQLite,那么使用数据库的管理工具为你的Django项目创建一个新的数据库。无论哪种方式,在您的(空)数据库到位的情况下,剩下的就是告诉Django如何使用它。这是项目的settings.py文件的来源。 我们将添加以下代码行文件: DATABASES = { 'default': { 'ENGINE' : 'django.db.backends.sqlite3', 'NAME' : os.path.join(BASE_DIR, 'db.sqlite3'), } } 35. 如何获取任何网址或网页的Google缓存时限? 使用以下URL格式: http://webcache.googleusercontent.com/search?q=cache:URLGOESHERE 请务必将“URLGOESHERE”替换为要检索其缓存的页面或站点的正确Web地址,并查看时间。例如,要查看edureka.co的Google Webcache年龄,您需要使用以下网址: http://webcache.googleusercontent.com/search?q=cache:edureka.co 36. 什么是Python中的map函数? Map函数执行作为第一个参数给出的函数,该函数遍历第二个参数给出的迭代的所有元素的。如果给定的函数包含多于1个参数,则给出了许多迭代。 37. 如何在NumPy数组中获得N个最大值的索引? 我们可以使用以下代码获取NumPy数组中N个最大值的索引: import numpy as np arr = np.array([1, 3, 2, 4, 5]) print(arr.argsort()[-3:][::-1]) 输出 [ 4 3 1 ] 38. 你如何用Python /NumPy计算百分位数? 我们可以使用以下代码计算百分位数 import numpy as np a = np.array([1,2,3,4,5]) p = np.percentile(a, 50) #Returns 50th percentile, e.g. median print(p) 输出 3 39. NumPy阵列(arrays)相对(嵌套)Python列表(lists)有哪些优势? a. Python的列表是高效的general-purpose容器。它们支持(相当)有效的插入,删除,追加和连接,Python的list comprehension使它们易于构造和操作。 b. Python列表的一些限制:它们不支持向量化“vectorized”操作,如元素加法和乘法,并且它们可以包含不同类型的对象这一事实意味着Python必须存储每个元素的类型信息,并且必须在每个元素上操作时执行类型调度代码。 c. NumPy不仅效率更高;它也更方便。你可以免费获得大量的向量和矩阵运算,这有时可以避免不必要的工作。 d. NumPy数组更快,你可以使用NumPy,FFT,卷积,快速搜索,基本统计,线性代数,直方图等内置方法。 40. NumPy和SciPy有什么区别? a. 在理想的世界中,NumPy只包含数组数据类型和最基本的操作:索引,排序,重塑,基本元素函数等。 b. 所有数字代码都将驻留在SciPy中。但是,NumPy的一个重要目标是兼容性,因此NumPy试图保留其前任任何一个支持的所有功能。 c. 因此,NumPy包含一些线性代数函数,即使它们更恰当地属于SciPy。无论如何,SciPy包含更多功能更全版本的线性代数模块,以及许多其他数值算法。 d. 如果你使用python进行科学计算,你应该安装NumPy和SciPy。大多数新功能属于SciPy而非NumPy。 41. python程序中文输出问题怎么解决? 用encode和decode,如: import os.path import xlrd,sys Filename=’/home/tom/Desktop/1234.xls’ if not os.path.isfile(Filename): raise NameError,”%s is not a valid filename”%Filename bk=xlrd.open_workbook(Filename) shxrange=range(bk.nsheets) print shxrange for x in shxrange: p=bk.sheets()[x].name.encode(‘utf-8′) print p.decode(‘utf-8′) 方法二: 在文件开头加上 reload(sys) sys.setdefaultencoding(‘utf8′) 42. 阅读下面的代码,它的输出结果是什么? class A(object): def go(self): print "go A go!" def stop(self): print "stop A stop!" def pause(self): raise Exception("Not Implemented") class B(A): def go(self): super(B, self).go() print "go B go!" class C(A): def go(self): super(C, self).go() print "go C go!" def stop(self): super(C, self).stop() print "stop C stop!" class D(B,C): def go(self): super(D, self).go() print "go D go!" def stop(self): super(D, self).stop() print "stop D stop!" def pause(self): print "wait D wait!" class E(B,C): pass a = A() b = B() c = C() d = D() e = E() # 说明下列代码的输出结果 a.go() b.go() c.go() d.go() e.go() a.stop() b.stop() c.stop() d.stop() e.stop() a.pause() b.pause() c.pause() d.pause() e.pause() 答案,输出结果以注释的形式表示: a.go() # go A go! b.go() # go A go! # go B go! c.go() # go A go! # go C go! d.go() # go A go! # go C go! # go B go! # go D go! e.go() # go A go! # go C go! # go B go! a.stop() # stop A stop! b.stop() # stop A stop! c.stop() # stop A stop! # stop C stop! d.stop() # stop A stop! # stop C stop! # stop D stop! e.stop() # stop A stop! a.pause() # ... Exception: Not Implemented b.pause() # ... Exception: Not Implemented c.pause() # ... Exception: Not Implemented d.pause() # wait D wait! e.pause() # ...Exception: Not Implemented 43. 介绍一下Python中webbrowser的用法? webbrowser模块提供了一个高级接口来显示基于Web的文档,大部分情况下只需要简单的调用open()方法。 webbrowser定义了如下的异常: exception webbrowser.Error, 当浏览器控件发生错误是会抛出这个异常 webbrowser有以下方法: webbrowser.open(url[, new=0[,autoraise=1]]) 这个方法是在默认的浏览器中显示url, 如果new = 0, 那么url会在同一个浏览器窗口下打开,如果new = 1, 会打开一个新的窗口,如果new = 2, 会打开一个新的tab, 如果autoraise =true, 窗口会自动增长。 webbrowser.open_new(url) 在默认浏览器中打开一个新的窗口来显示url, 否则,在仅有的浏览器窗口中打开url webbrowser.open_new_tab(url) 在默认浏览器中当开一个新的tab来显示url,否则跟open_new()一样 webbrowser.get([name]) 根据name返回一个浏览器对象,如果name为空,则返回默认的浏览器 webbrowser.register(name, construtor[,instance]) 注册一个名字为name的浏览器,如果这个浏览器类型被注册就可以用get()方法来获取。 44. Python中, list, tuple, dict, set有什么区别, 主要应用在什么样的场景? 定义: list:链表, 有序的项目, 通过索引进行查找, 使用方括号"[]"; tuple:元组, 元组将多样的对象集合到一起, 不能修改, 通过索引进行查找, 使用括号"()"; dict:字典, 字典是一组键(key)和值(value)的组合, 通过键(key)进行查找, 没有顺序, 使用大括号"{}"; set: 集合,无序, 元素只出现一次, 自动去重, 使用"set([])"; 应用场景: list, 简单的数据集合, 可以使用索引; tuple, 把一些数据当做一个整体去使用, 不能修改; dict, 使用键值和值进行关联的数据; set, 数据只出现一次, 只关心数据是否出现, 不关心其位置; 代码: mylist = [1, 2, 3, 4, 'Oh'] mytuple = (1, 2, 'Hello', (4, 5)) mydict = {'Wang' : 1, 'Hu' : 2, 'Liu' :4} myset = set(['Wang', 'Hu', 'Liu', 4,'Wang']) 45. 写一个函数, 输入一个字符串, 返回倒序排列的结果: 如:string_reverse(‘abcdef’), 返回: ‘fedcba’ (请采用多种方法实现, 并对实现方法进行比较)。 解答: 5种方法的比较. 1. 简单的步长为-1, 即字符串的翻转; 2. 交换前后字母的位置; 3. 递归的方式, 每次输出一个字符; 4. 双端队列, 使用extendleft()函数; 5. 使用for循环, 从左至右输出; 代码: string = 'abcdef' def string_reverse1(string): return string[::-1] def string_reverse2(string): t= list(string) l= len(t) for i,j in zip(range(l-1, 0, -1), range(l//2)): t[i], t[j] = t[j], t[i] return "".join(t) def string_reverse3(string): if len(string) <= 1: return string return string_reverse3(string[1:]) + string[0] from collections import deque def string_reverse4(string): d= deque() d.extendleft(string) return ''.join(d) def string_reverse5(string): #return ''.join(string[len(string) - i] for i in range(1,len(string)+1)) return ''.join(string[i] for i in range(len(string)-1, -1, -1)) print(string_reverse1(string)) print(string_reverse2(string)) print(string_reverse3(string)) print(string_reverse4(string)) print(string_reverse5(string)) 46. 以下哪个语句创建字典? (多个正确的答案可能) a)d = {} b)d = {“john”:40,“peter”:45} c)d = {40:“john”,45:“peter”} d)d =(40:“john”,45:“50”) 回答:b,c, d。通过指定键和值来创建字典。 47. 其中哪一个是floor division? a) / b)// C) % d)没有提到的 回答:b)//;例如,5.0/2 = 2.5,5.0//2 = 2 48. 标识符的最大可能长度是多少? a)31个字符 b)63个字符 c)79个字符 d)以上都不是 回答:d)以上都不是;标识符可以是任意长度。 49. 为什么不鼓励以下划线开头的局部变量名? a)它们用于表示类的私有变量 b)他们混淆了口译员 c)它们用于表示全局变量 d)他们放慢执行速度 回答:a)它们用于表示类的私有变量;由于Python没有私有变量的概念,因此前导下划线用于表示不能从类外部访问的变量。 50. 以下哪项是无效声明? a)abc = 1,000,000 b)a b c = 1000 2000 3000 c)a,b,c = 1000,2000,3000 d)a_b_c = 1,000,000 回答:b)a b c = 1000 2000 3000;变量名称中不允许使用空格。 51. 以下哪项是无效声明? a)abc = 1,000,000 b)a b c = 1000 2000 3000 c)a,b,c = 1000,2000,3000 d)a_b_c = 1,000,000 回答:b)a b c = 1000 2000 3000;变量名称中不允许使用空格。 52. 以下是什么输出? try: if '1' != 1: raise "someError" else: print("someError has not occured") except "someError": print ("someError has occured") a)发生了someError b)没有发生someError c)无效代码 d)以上都不是 回答:c)无效代码;新的异常类必须从BaseException继承。这里没有这样的继承。 53. 假设list1是[2,33,222,14,25],什么是list1 [-1]? a)错误 b)没有 c)25 d)2 回答:c)25;索引-1对应于列表中的最后一个索引。 54. 要打开文件c:\ scores.txt进行编写,我们使用: a)outfile = open(“c:\scores.txt”,“r”) b)outfile = open(“c:\\scores.txt”,“w”) c)outfile = open(file = “c:\scores.txt”,“r”) d)outfile = open(file = “c:\\scores.txt”,“o”) 回答:b)该位置包含双斜杠(\$$,w用于指示正在写入文件。 55. 以下是什么输出? f = None for i in range (5): with open("data.txt", "w") as f: if i > 2: break print f.closed a)True b)False c)None d)Error 回答:a)True;与open文件一起使用时,WITH语句可确保在with块退出时关闭文件对象。 56. 何时执行try-except-else的else部分? a)总是 b)发生异常时 c)没有异常发生时 d)当发生异常时至除了块 回答:c)没有异常发生时;当没有异常发生时,执行else部分。 57. a=1, b=2, 不用中间变量交换a和b的值. 两种形式: 加法或异或;代码: a = 1 b = 2 a = a + b b = a - b a = a - b print ('a = {0}, b = {1}'.format(a,b)) a = a ^ b b = a ^ b a = a ^ b print ('a = {0}, b = {1}'.format(a, b)) 58. 请写出打印结果 x = [0, 1] i = 0 i, x[i] = 1, 2 print(x) 打印结果: [0, 2], python可以使用连续赋值, 从左至右. g = lambda x, y=2, z : x + y**z g(1, z=10) = ? 打印结果: 异常, 形参表末尾才可以有默认参数, z需要提供默认参数。 59. A、B两人分别在两座岛上。B生病了,A有B所需要的药。C有一艘小船和一个可以上锁的箱子。C愿意在A和B之间运东西,但东西只能放在箱子里。只要箱子没被上锁,C都会偷走箱子里的东西,不管箱子里有什么。如果A和B各自有一把锁和只能开自己那把锁的钥匙,A应该如何把东西安全递交给B? 答案:A把药放进箱子,用自己的锁把箱子锁上。B拿到箱子后,再在箱子上加一把自己的锁。箱子运回A后,A取下自己的锁。箱子再运到B手中时,B取下自己的锁,获得药物。 60. 有25匹马,速度都不同,但每匹马的速度都是定值。现在只有5条赛道,无法计时,即每赛一场最多只能知道5匹马的相对快慢。问最少赛几场可以找出25匹马中速度最快的前3名? 答案:每匹马都至少要有一次参赛的机会,所以25匹马分成5组,一开始的这5场比赛是免不了的。接下来要找冠军也很容易,每一组的冠军在一起赛一场就行了(第6场)。最后就是要找第2和第3名。我们按照第6场比赛中得到的名次依次把它们在前5场比赛中所在的组命名为A、B、C、D、E。即:A组的冠军是第6场的第1名,B组的冠军是第6场的第2名……每一组的5匹马按照他们已经赛出的成绩从快到慢编号: A组:1,2,3,4,5 B组:1,2,3,4,5 C组:1,2,3,4,5 D组:1,2,3,4,5 E组:1,2,3,4,5 从现在所得到的信息,我们可以知道哪些马已经被排除在3名以外。只要已经能确定有3匹或3匹以上的马比这匹马快,那么它就已经被淘汰了。可以看到,只有上表中粗体蓝色的那5匹马才有可能为2、3名的。即:A组的2、3名;B组的1、2名,C组的第1名。取这5匹马进行第7场比赛,第7场比赛的前两名就是25匹马中的2、3名。故一共最少要赛7场。