python⾯试题库——1Python基础篇
第⼀部分 Python基础篇(80题)
为什么学习Python?
tcp ip应用层协议有哪些语⾔本⾝简洁,优美,功能超级强⼤,跨平台,从桌⾯应⽤,web开发,⾃动化测试运维,爬⾍,⼈⼯智能,⼤数据处理都能做
Python和Java、PHP、C、C#、C++等其他语⾔的对⽐?
C语⾔由于其底层操作特性和历史的积累,在嵌⼊式领域是当之⽆愧的王者
.              PHP跨平台,性能优越,跟Linux/Unix结合⽐跟Windows结合性能强45%,开发成本低,PHP 5已经有成熟的⾯向对象体系,适合开发⼤型项⽬淘宝⽹、Yahoo、163、Sina等等⼤型门户,很多选⽤PHP来作为他们的开发语⾔
JAVA的优点:1.简单性2.⾯向对象性(⾯向对象的程度可以达到95%)3.健壮性4.跨平台性5.⾼性能(⾃动垃圾回收机制)6.多线程7.动态性8.安全性
C++的优点:1.可扩展性强3.可移植性4.⾯向对象的特性5.强⼤⽽灵活的表达能⼒和不输于C的效率6.⽀持硬件开发
简述解释型和编译型编程语⾔
1.在程序执⾏之前,有⼀个单独的编译过程,将程序翻译成,以后执⾏这个程序的时候,就不⽤再进⾏翻译了。
2.,是在运⾏的时候将程序翻译成,所以运⾏速度相对于要慢。
3. 等都是,⽽Java,等都是。
5.⼀般都有相应的脚本引擎来。他们⼀般需要解释器才能运⾏。JAVASCRIPT,ASP,PHP,PERL,Nuva都是。编译、链接后,可形成独⽴执⾏的exe⽂件。Python解释器种类以及特点?
CPython:这个解释器是⽤C语⾔开发的,所以叫CPython,在命名⾏下运⾏python,就是启动CPython解释器,CPython是使⽤最⼴的Python解释器。
Jython:Jython是运⾏在Java平台上的Python解释器,可以直接把Python代码编译成Java字节码执⾏。
IPython:IPython是基于CPython之上的⼀个交互式解释器,也就是说,IPython只是在交互⽅式上有所增强,但是执⾏Python代码的功能和CPython是完全⼀样的,好⽐很多国产浏览器虽然外观不同,但内核其实是调⽤了IE。
位和字节的关系?
1    计算机存储信息的最⼩单位,称之为位(bit),⾳译⽐特,⼆进制的⼀个“0”或⼀个“1”叫⼀位。
2、计算机存储容量基本单位是字节(Byte),⾳译为拜特,8个⼆进制位组成1个字节,⼀个标准英⽂字母占⼀个字节位置,⼀个标准汉字占⼆个字节位置。
1. b、B、KB、MB、GB 的关系?
1024B=1K(千)B
1024KB=1M(兆)B
1024MB=1G(吉)B
1024GB=1T(太)B
什么是PEP8?
PEP8是⼀个编程规范,内容是⼀些关于如何让你的程序更具可读性的建议。
其主要内容包括代码编排、⽂档编排、空格的使⽤、注释、⽂档描述、命名规范、编码建议等。
请⾄少列举5个 PEP8 规范(越多越好)。
1. 缩进。4个空格的缩进(编辑器都可以完成此功能),不使⽤Tap,更不能混合使⽤Tap和空格。
2. 每⾏最⼤长度79,换⾏可以使⽤反斜杠,最好使⽤圆括号。换⾏点要在操作符的后边敲回车。
3. 类和top-level函数定义之间空两⾏;类中的⽅法定义之间空⼀⾏;函数内逻辑⽆关段落之间空⼀⾏;其他地⽅尽量不要再空⾏。
4. 块注释,在⼀段代码前增加的注释。在‘#’后加⼀空格。段落之间以只有‘#’的⾏间隔
各种右括号前不要加空格。
逗号、冒号、分号前不要加空格。
函数的左括号前不要加空格。如Func(1)。
序列的左括号前不要加空格。如list[2]。
操作符左右各加⼀个空格,不要为了对齐增加空格。
函数默认参数使⽤的赋值符左右省略空格。
不要将多句语句写在同⼀⾏,尽管使⽤‘;’允许。
if/for/while语句中,即使执⾏语句只有⼀句,也必须另起⼀⾏。
类的⽅法第⼀个参数必须是self,⽽静态⽅法第⼀个参数必须是cls。
.什么是pickling和unpickling?
python基础代码写字Pickle模块读⼊任何Python对象,将它们转换成字符串,然后使⽤dump函数将其转储到⼀个⽂件中——这个过程叫做pickling。
反之从存储的字符串⽂件中提取原始Python对象的过程,叫做unpickling。
1. 通过代码实现如下转换:
⼆进制转换成⼗进制:v = “0b1111011”
⼗进制转换成⼆进制:v = 18
⼋进制转换成⼗进制:v = “011”
⼗进制转换成⼋进制:v = 30
⼗六进制转换成⼗进制:v = “0x12”
⼗进制转换成⼗六进制:v = 87
(1)⼆进制转换成⼗进制:v = “0b1111011”
#先将其转换为字符串,再使⽤int函数,指定进制转换为⼗进制。
print(int("0b1111011",2))
值为123
(2)⼗进制转换成⼆进制:v = 18
print("转换为⼆进制为:", bin(18))
#转换为⼆进制为: 0b10010
(3)⼋进制转换成⼗进制:v = “011”
print(int("011",8))
#9
(4)⼗进制转换成⼋进制:v = 30
print("转换为⼋进制为:", oct(30))
#转换为⼋进制为: 0o36
(5)⼗六进制转换成⼗进制:v = “0x12”
print(int("0x12",16))
#18
(6)⼗进制转换成⼗六进制:v = 87
print("转换为⼗六进制为:", hex(87))
转换为⼗六进制为: 0x57
a=['1','2','3']
b=[int(i) for i in a]
print(b)
输出为:[1, 2, 3]
请编写⼀个函数实现将IP地址转换成⼀个整数。
如 10.3.9.12 转换规则为:
10            00001010
3            00000011
9            00001001
话字开头的组词>燕窝溯源码是什么
12            00001100
再将以上⼆进制拼接起来计算⼗进制结果:00001010 00000011 00001001 00001100 = ?
python递归的最⼤层数?
def fab(n):
if n == 1:
return 1
else:
return fab(n-1)+ n
print (fab(998))
#得到的最⼤数为998,以后就是报错了,998这个数值莫名想起⼴告词····
import sys
sys.setrecursionlimit(100000)
def foo(n):
print(n)
n += 1
foo(n)
if __name__ == '__main__':
foo(1)
#得到的最⼤数字在3922-3929之间浮动,这个是和计算机有关系的,将数字调到⾜够⼤了,已经⼤于系统堆栈,python已经⽆法⽀撑到太⼤的递归崩了。
计算题
1、求结果
v=dict.fromkeys(['k1','k2'],[])
v['k1'].append(666)
print(v)
v['k1'] = 777
print(v)
v=dict.fromkeys(['k1','k2'],[])
v['k1'].append(666)
print(v)  #{'k2': [666], 'k1': [666]}
v['k1'] = 777
print(v)  #{'k2': [666], 'k1': 777}
2、求结果
def num():
return [lambda x:i*x for i in range(4)]
print(m(2) for m in num())
def num():
return [lambda x:i*x for i in range(4)]
print(m(2) for m in num())# <generator object <genexpr> at 0x0000000000B2FA40> 为元祖
print(list(m(2) for m in num())) # [6, 6, 6, 6]
3、求结果 
  a、[i%2 for i in range(10)]
  b、( i % 2 for i in range(10) )
a=[i%2 for i in range(10) ]
print(a)  # 因为 [] 为列表所以会有结果为[0, 1, 0, 1, 0, 1, 0, 1, 0, 1]
b=(i%2 for i in range(10))
print(b) # 因为()为元祖所以会有结果为 <generator object <genexpr> at 0x0000000000645D00>
c=list(b) # 将元祖转换格式为列表
print(c)  # 打印c,结果为 [0, 1, 0, 1, 0, 1, 0, 1, 0, 1]
4、求结果:
  a. 1 or 2
  b. 1 and 2
  c. 1 < (2==2)
  d. 1 < 2 == 2
print(1 or 2) # 1
print(1 and 2) # 2
print(1<(2==2)) # False 因为2==2为True,⽽True表⽰为1,False表⽰为0,所以1<1,结果为False
print(1<2==2) # True  python是允许连续⽐较1<2==2意思是1<2且2==2
9;求结果:
v1 = 1 or 3
v2 = 1 and 3
v3 = 0 and 2 and 1
v4 = 0 and 2 or 1
v5 = 0 and 2 or 1 or 4
v6 = 0 or Flase and 1
v2 = 1 and 3  #3
v3 = 0 and 2 and 1  #0
v4 = 0 and 2 or 1  #1
v5 = 0 and 2 or 1 or 4  #1
v6 = 0 or False and 1  #False
ascii、unicode、utf-8、gbk 区别?
ASCII码使⽤⼀个字节编码,所以它的范围基本是只有英⽂字母、数字和⼀些特殊符号,只有256个字符。
在表⽰⼀个Unicode的字符时,通常会⽤“U+”然后紧接着⼀组⼗六进制的数字来表⽰这⼀个字符。在基本多⽂种平⾯(英⽂为 Basic Multilingual Plane,简写 BMP。它⼜简称为“零号平⾯”, plane 0)⾥的所有字符,要⽤四位⼗六进制数(例如U+4AE0,共⽀持六万多个字符);在零号平⾯以外的字符则需要使⽤五位或六位⼗六进制数了。旧版的Unicode标准使⽤相近的标记⽅法,但却有些微的差异:在Unicode 3.0⾥使⽤“U-”然后紧接着⼋位数,⽽“U+”则必须随后紧接着四位数。
Unicode能够表⽰全世界所有的字节
  GBK是只⽤来编码汉字的,GBK全称《汉字内码扩展规范》,使⽤双字节编码。
  UTF-8(8-bit Unicode Transformation Format)是⼀种针对Unicode的可变长度字符编码,⼜称万国码。由Ken Thompson于1992年创建。现在已经标准化为RFC 3629。UTF-8⽤1到6个字节编码UNICODE字符。⽤在⽹页上可以同⼀页⾯显⽰中⽂简体繁体及其它语⾔(如英⽂,⽇⽂,韩⽂)。
字节码和机器码的区别?
字节码
字节码是⼀种中间码
字节码通常指的是已经经过编译,但与特定机器码⽆关,需要直译器转译后才能成为机器码的中间代码。字节码通常不像源码⼀样可以让⼈阅读,⽽是编码后的数值常量、引⽤、指令等构成的序列。
字节码主要为了实现特定软件运⾏和软件环境、硬件环境⽆关。字节码的实现⽅式是通过编译器和虚拟机器。编译器将源码编译成字节码,特定平台上的虚拟机器将字节码转译为可以直接执⾏的指令。字节码的典型应⽤为Java语⾔。
总结:字节码是⼀种中间状态(中间码)的⼆进制代码(⽂件)。需要直译器转译后才能成为机器码。
机器码
机器码就是计算机可以直接执⾏,并且执⾏速度最快的代码。
⽤机器语⾔编写程序,编程⼈员要⾸先熟记所⽤计算机的全部指令代码和代码的涵义。⼿编程序时,程序员得⾃⼰处理每条指令和每⼀数据的存储分配和输⼊输出,还得记住编程过程中每步所使⽤的⼯作单元处在何种状态。这是⼀件⼗分繁琐的⼯作,编写程序花费的时间往往是实际运⾏时间的⼏⼗倍或⼏百倍。⽽且,编出的程序全是些0和1的指令代码。
机器语⾔是微处理器理解和使⽤的,⽤于控制它的操作⼆进制代码。
  8086到Pentium的机器语⾔指令长度可以从1字节到13字节。
  尽管机器语⾔好像是很复杂的,然⽽它是有规律的。
  存在着多⾄100000种机器语⾔的指令。这意味着不能把这些种类全部列出来。
总结:机器码是电脑CPU直接读取运⾏的机器指令,运⾏速度最快
三元运算规则以及应⽤场景?
三元运算符的功能与“if...else”流程语句⼀致,它在⼀⾏中书写,代码⾮常精练、执⾏效率更⾼。在PHP程序中恰当地使⽤三元运算符能够令脚本更为简洁、⾼效。代码格式如下:
(expr1) ? (expr2) : (expr3);
解释:如果条件“expr1”成⽴,则执⾏语句“expr2”,否则执⾏“expr3”。
实现同样的功能,若使⽤条件流程语句,就需要书写多⾏代码:
if(expr1) {
字符串和字符常量的区别expr2;
} else {
expr3;
}
可见,前⾯所说的三元运算符之好并⾮夸张。可是,多数情况下我们只在代码较为简单的时候使⽤三元运算符,即执⾏语句只为单句的时候。如:
$a>$b ? print "a⼤于b" : print "a⼩于b";
事实上,三元运算符可以扩展使⽤,当设置的条件成⽴或不成⽴,执⾏语句都可以不⽌⼀句,试看以下格式:
(expr1) ? (expr2).(expr3) : (expr4).(expr5);
我们⾮常明显地看到,多个执⾏语句可以使⽤⽤字符串运算符号(“.”)连接起来,各执⾏语句⽤⼩⾓括号包围起来以表明它是⼀个独⽴⽽完整的执⾏语句。这样扩展后它的功能更为逼近“if...else”流程语句。
同时三元运算符还可以嵌套使⽤。例如,a⼤于b成⽴时:如果a⼩于c,那么x=c-a否则x=a-c;否则a⼩于b成⽴时:如果b⼩于c,那么x=c-b否则x=b-c:
$a>$b ? $x=($a<$c ? $c-$a : $a-$c) : $x=($b<$c ? $c-$b : $b-$c);
嵌套使⽤的三元运算符可读性不太好,⽇后对代码的维护极可能存在问题,但⽐起“if...else”之类的流程语句,在上述情形之下,它的确太简练了,这是它的诱⼈之处。
对于喜欢偷懒和追求代码简洁的⼈来说,⽤三元运算符取代if流程语句应该是绝佳的选择。即使不⽤考虑“三元”中条件句以外的任意某⼀“元”,使⽤三元运算符仍然⽐if语句简练。以下语句的语法是正确的,它们以⼩解引号的⽅式忽略了第⼆或第三“元”:
$a>$b ? print "Yes" : "";
$a>$b ? '': print 'No';
应该注意的是:在使⽤三元运算符时,建议使⽤print语句替代echo语句。
Python⾃省
这个也是python彪悍的特性.
⾃省就是⾯向对象的语⾔所写的程序在运⾏时,所能知道对象的类型.简单⼀句就是运⾏时能够获得对象的类型.⽐如type(),dir(),getattr(),hasattr(),isinstance().
列举 Python2和Python3的区别?
(1)Print
在 Python 2 中, print 被视为⼀个语句⽽不是⼀个函数,这是⼀个典型的容易弄混的地⽅,因为在 Python 中的许多操作都需要括号内的参数来执⾏。如果在 Python 2 中你想要你的控制台输出 ”Sammy the Shark is my favorite sea creature”,你应该写下这样的 print 语句:
print "Sammy the Shark is my favorite sea creature"
在使⽤ Python 3 时,print()会被显式地视为⼀个函数,因此要输出上⾯相同的字符串,你可以使⽤这种⾮常简单且易于使⽤的函数语法:
print("Sammy the Shark is my favorite sea creature")
这种改变使得 Python 的语法更加⼀致,并且在不同的 print 函数之间进⾏切换更加容易。就⽅便性⽽⾔,print()语法也与 Python 2.7 向后兼容,因此您的 Python 3 print()函数可以在任⼀版本中运⾏。
(2)整数的除法
在 Python 2 中,您键⼊的任何不带⼩数的数字,将被视为整数的编程类型。虽然乍看起来这似乎是⼀个简单的处理编程类型的⽅法,但有时候当你试图除以整数以期望获得⼀个带⼩数位的答案(称为浮点数),如:
5 / 2 = 2.5
然⽽,在 Python 2 中,整数是强类型的,并且不会变成带⼩数位的浮点数,即使这样做具有直观上的意义。
当除法/符号的任⼀侧的两个数字是整数时,Python 2进⾏底除法,使得对于商x,返回的数字是⼩于或等于x的最⼤整数。这意味着当你写下 5 / 2 来对这两个数字相除
时,Python 2.7 将返回最⼤的⼩于或等于 2.5 的整数,在这种情形下:
a = 5 / 2
print a
#a=2
为解决这个问题,你可以在 5.0 / 2.0 中添加⼩数位,以得到预期的答案 2.5。
assessing computational thinking在 Python 3 中,整数除法变得更直观,如
a = 5 / 2
print(a)
#a=2.5
你也可以使⽤ 5.0 / 2.0 返回 2.5,但是如果你想做底层划分,你应该使⽤ “//” 这样的 Python 3 语法,像这样:
b = 5 // 2
print(b)
#b=2
在 Python 3 中的这种修改使得整数除法更为直观,并且它的特点是不能向后兼容 Python 2.7。
(3)⽀持 Unicode
当编程语⾔处理字符串类型时,也就是⼀个字符序列,它们可以⽤⼏种不同的⽅式来做,以便计算机将数字转换为字母和其他符号。
Python 2 默认使⽤ ASCII 字母表,因此当您输⼊“Hello,Sammy!”时, Python 2 将以 ASCII 格式处理字符串。被限定为在多种扩展形式上的数百个字符,⽤ASCII 进⾏字符编码并不是⼀种⾮常灵活的⽅法,特别是使⽤⾮英语字符时。
要使⽤更通⽤和更强⼤的Unicode字符编码,这种编码⽀持超过128,000个跨越现今和历史的脚本和符号集的字符,你必须输⼊
u“Hello,Sammy!”
,前缀 u 代表 Unicode。
Python 3 默认使⽤ Unicode,这节省了程序员多余的开发时间,并且您可以轻松地在程序中直接键⼊和显⽰更多的字符。因为 Unicode ⽀持更强⼤的语⾔字符多样性以及 emoji 的显⽰,所以将它作为默认字符编码来使⽤,能确保全球的移动设备在您的开发项⽬中都能得到⽀持。
如果你希望你的 Python 3 代码向后兼容 Python 2,你可以通过在你的字符串的前⾯保留 “u” 来实现。
(4)后续发展
Python 3 和 Python 2 之间的最⼤区别不是语法上的,⽽是事实上 Python 2.7 将在 2020 年失去后续的⽀持,Python 3 将继续开发更多的功能和修复更多的错误。
最近的发展包括格式化的字符串,类创建的简单定制,和⽤⼀种更⼲净的句法⽅式来处理矩阵乘法。
Python 3 的后续开发意味着,开发⼈员可以对问题被及时解决抱有信⼼,并且随着时间的推移更多的功能将被添加进来,程序也会变得更加有效。
⽤⼀⾏代码实现数值交换:
a = 1
b = 2
a,b=b,a
print(a,b)  #a=2,b=1
Python3和Python2中 int 和 long的区别?
long整数类型被Python3废弃,统⼀使⽤int
python2和python3区别?列举5个
1、Python3 使⽤ print 必须要以⼩括号包裹打印内容,⽐如 print('hi')
Python2 既可以使⽤带⼩括号的⽅式,也可以使⽤⼀个空格来分隔打印内容,⽐如 print 'hi'
2、python2 range(1,10)返回列表,python3中返回迭代器,节约内存
3、python2中使⽤ascii编码,python中使⽤utf-8编码
4、python2中unicode表⽰字符串序列,str表⽰字节序列
python3中str表⽰字符串序列,byte表⽰字节序列
5、python2中为正常显⽰中⽂,引⼊coding声明,python3中不需要
6、python2中是raw_input()函数,python3中是input()函数
xrange和range的区别?
range 函数说明:range([start,] stop[, step]),根据start与stop指定的范围以及step设定的步长,⽣成⼀个序列。
range⽰例:
>>> range(5)
[0, 1, 2, 3, 4]
>>> range(1,5)
[1, 2, 3, 4]
>>> range(0,6,2)
[0, 2, 4]
xrange 函数说明:⽤法与range完全相同,所不同的是⽣成的不是⼀个数组,⽽是⼀个⽣成器。

版权声明:本站内容均来自互联网,仅供演示用,请勿用于商业和其他非法用途。如果侵犯了您的权益请与我们联系QQ:729038198,我们将在24小时内删除。