1.Python 标记语句块使用------缩进
Python中定义函数时的参数为-----形参
在Python中,类、函数和module都对应着一个独立的名字空间,因此都会对应一个PyCodeObject对象。
如果Python函数中没有return语句,那么函数将返回----None 对象
random.random()生成0和1之间的随机浮点数float
Python 语言是一种计算机编程语言,作用类似于 c/c++/java/等计算机编程语言,据有非常清晰易读的语法特点,并且是一种高级面向对象的语言,用途非常广泛,并且可以进行扩展。Python 可以运行在 Windows,Linux,等几乎所有的电脑中,也可以运行在手机中,支持 Java 和 .Net 技术。
Python 语言使用方便,不需要进行复杂的编译,用途非常广泛,可以进行各种软件的开发,比如: 网站,图形界面(GUI), 网络编程,数据库编程,图形图像处理,科学计算,手机编程等等
1).字符串类型
python中有两种字符类型:字节字符串和文本字符串。
python2:字节字符串 str,文本字符串 Unicode
python3:字节字符串 bytes,文本字符串str
2).默认字符
python2中默认的字符串类型默认是ASCII,
python3中默认的字符串类型是Unicode。
3).print
python2中,print是个特殊语句,python3中print是函数。
python2:print ‘hello word!’
python3:print(‘hello word!’,file=sys.stderr)
4).除法/
python2中/的结果是整型,
python3中是浮点类型。
5).导入
python2中的包导入顺序:标准库—相对倒入(即当前目录)—绝对导入(sys.path)
python3中的包导入顺序:标准库—绝对导入(如果想要相对导入,使用from .moudel)
6).类
python2中默认类是旧式类,需要显式继承新式类(object)来创建新式类。
python3中完全移除旧式类,所有类都是新式类,但仍可显式继承object类。
7).字典
python2中的dict类中的keys、values和items均返回list对象,iterkeys、itervalues和iteritems返回生成器对象。
python3中移除了list、只返回一个生成器的对象,只保留视图(生成器),但方法名为:keys、values和items。
8).模块合并
python2中的StringIO和cStringIO合并为python3中的io
python2中的pickle和cPickle合并为python3中的pickle。
python2中的urllib、urllib2和urlparse合并为python3中的urllib
数据类型:数字(Number)、字符串(String)、列表(List)、
元组(Tuple)、集合(Set)、字典(Dictionary)
详情 https://blog.csdn.net/qq_44525050/article/details/86801217
Python支持的可变数据类型有哪些-------list,dict,set
Python中的不变的数据结构--------Number, String, Tuple
Python数据类型中,不可以通过索引访问的是-------Number、dict、set
序列:
可以进行索引,可以切片,成员检测。
字符串,列表,元组为python中最常见的序列结构。
字符串索引访问:
索引正方向从0开始,索引每次递增1个数量
索引允许反方向从-1(最大的索引)开始计算,向前一个则绝对值加1
dict | 查找和插入的速度极快,不会随着key的增加而变慢; 需要占用大量的内存,内存浪费多。 因此,dict是用空间来换取时间。 |
---|---|
list | 查找和插入的时间随着元素的增加而增加; 占用空间小,浪费内存很少。 |
dict内部实现 |
标识符是由字符(A~Z 和 a~z)、下划线和数字组成,但第一个字符不能是数字。
标识符不能和 Python 中的保留字相同。
Python中的标识符中,不能包含空格、@、% 以及 $ 等特殊字符
python中常用的两种锁:互斥锁和GIL全局解释器锁。
互斥锁使用在多线程中,常用于避免对于全局变量使用时的资源竞争的问题,使用资源时上锁,不使用时解锁供其他线程使用;
GIL全局解释器锁经常出现在C语言编写的python解释器中,对于该条件下运行的多线程,不是真正的多线程(单核下运行),需要更换其他语言的解释器或者利用python胶水语言的特性,关键代码使用其他语言编写
锁引申的其他问题-死锁:对于锁的使用,陷入了嵌套调用造成的死循环导致的死锁,注意银行家算法
进程是系统资源分配的最小单位,可以利用多核资源,多进程适合CPU密集型的操作,在Python中可以使用os.fork和使用multiprocessing分装好的方法来使用
Python的方法解析优先级从高到低为: 1. 实例本身(instance) 2. 类(class) 3. super class, 继承关系越近, 越先定义, 优先级越高.
答:获取输入用input()接收 。
文件打开方式:①file =open(‘文件名’,‘打开方式’)最后读写完需要用file.close()关闭文件,且有可能会有异常抛出 。
②用with: with open(‘文件名’,打开方式)as f:比较方便,不需要再进行关闭文件和担心异常的问题,with都封装好了,建
议使用这种方式打开文件。
输入方式: | name = input() |
---|---|
打开文件: | with open(文件名,打开方式,conding=“编码格式”) as f: |
读取数据建议使用: | |
方法一: | f = open(文件名=filename, 打开方式=“rb”);content = f.read();f.close(content) |
方法二: | with open(文件名,打开方式,conding=“编码格式”) as f: |
写入数据建议使用: | with open(filename, “wb”) as f: f.write(content) |
read:读取整个文件,内容为字符串
readline:返回下一行,内容为字符串;
readlines:返回list,保存有每行的数据。
Python 的解释器 如今有多个语言的实现,包括:
CPython —— 官方版本的 C 语言实现
Jython —— 可以运行在 Java 平台
IronPython —— 可以运行在 .NET 和 Mono 平台
PyPy —— Python 实现的,支持 JIT 即时编译
PyPI—— Python包索引(PyPI)是Python编程语言的软件存储库
[]是基于字符的,
[abc]是匹配a, b, c中的 一个 字符,
[^abc]中的 ^ 是表否定, 表示匹配a, b, c之外的字符.
在Python中,以下哪些写法可以自定义函数
使用任意您熟悉的语言(C/C++、Java、Python或者其他),实现以下功能:
在字符串中找出连续最长的递增英文字母串(26个英文字母,不区分大小写),把这个字母串的长度作为函数值返回。
如字符串“dgefgfg455cd556bcd45”,可以得出最长的连续递增字母是efg、bcd,所以返回3。
str = “dgefgfg455cd556bcd45”
for i in range(len(str1)): if i< len(str1)-1: if ord(str1[i])+1 ==ord(str1[i+1]):
n = n +1 list2.append(i) else:
n=0 list1.append(n)
print(max(list1))
22.python dict按照value进行排序
from operator import itemgetter
list1 = [{“a”:9},{“c”:1},{“b”:2},{“d”:10}]
dict1 = {k:v for x in list1 for k,v in x.items()}
list2 = sorted(dict1.items(),key=itemgetter(1)) print(list2)
23.找到(v2.4 之前版本)Python 的 bisect 模块,阅读其中 bisect_right()接口的实现代码。a) 试以增加注释的形式,说明该接口的输入输出、功能语义、实现策略和算法实现;
25.python中is和==的区别
26.什么是python的生成器?
在python中使用了yield的函数被称为生成器,生成器返回一个迭代器,也可以说生成器就是迭代器。
27.迭代器
28.装饰器
简述Python装饰器、迭代器、生成器原理及应用场景?
Python的装饰器是一个以函数作为参数并返回一个替换函数的可执行函数。它其实是一种闭包的应用
Python的迭代器对象从集合的第一个元素开始访问,直到所有的元素被访问完结束
在python中,使用了yield 的函数被称为生成器(generator)
29.python函数中支持*args和**kwargs。关于二者的区别
def fun (*args,**kwargs):
print(args)
print(kwargs)
fun(1,2,3,a=5,b=6)
30.python socket操作
sk.recv(bufsize[,flag]):接受套接字的数据。数据以字符串形式返回,bufsize指定最多可以接收的数量。flag提供有关消息的其他信息,通常可以忽略。
sk.recvfrom(bufsize[.flag]):与recv()类似,但返回值是(data,address)。其中data是包含接收数据的字符串,address是发送数据的套接字地址。
sk.getsockname():返回套接字自己的地址。通常是一个元组(ipaddr,port)
sk.connect(address):连接到address处的套接字。一般,address的格式为元组(hostname,port),如果连接出错,返回socket.error错误。
sk.listen(backlog):开始监听传入连接。backlog指定在拒绝连接之前,可以挂起的最大连接数量。
31.计算1-200之间有多少个素数,并输出所有素数
32.简述python是如何进行内存管理的
python采用"引用计数"和"垃圾回收"两种机制来管理内存。
引用计数通过记录对象被引用的次数来管理对象。
对对象的引用都会使得引用计数加1,移除对对象的引用,引用计数则会减1,
当引用计数减为0时,对象所占的内存就会被释放掉。
引用计数可以高效的管理对象的分配和释放,但是有一个缺点,就是无法释放引用循环的对象
这个时候就需要垃圾回收机制(garbage collection),来回收循环应用的对象。
垃圾回收机制会根据内存的分配和释放情况的而被调用,
33.请阐述Python与Java编程语言之间的区别
1.Python比Java简单,学习成本低,开发效率高
2.Java运行效率高于Python,尤其是纯Python开发的程序,效率极低
3.Java相关资料多,尤其是中文资料
4.Java版本比较稳定,Python2和3不兼容导致大量类库失效
5.Java开发偏向于软件工程,团队协同,Python更适合小型开发
6.Java偏向于商业开发,Python适合于数据分析
7.Java是一种静态类型语言,Python是一种动态类型语言
8.Java中的所有变量需要先声明(类型)才能使用,Python中的变量不需要声明类型
9.Java编译以后才能运行,Python直接就可以运行;
10.JAVA 里的块用大括号对包括,Python 以冒号 + 四个空格缩进表示。
11.JAVA 的类型要声明,Python 的类型不需要。
12.JAVA 每行语句以分号结束,Python 可以不写分号。
13.实现同一功能时,JAVA 要敲的键盘次数一般要比 Python 多。
34.Python 变量中的如下三类变量“_xxx”(单下划线开头),“ __xxx”(双下划线开头), “xxx”(双下划线)分别代表什么含义?
_xxx表示对属性的私有化,即不能使用from xxx import * 导入到其他模块去使用,但是可以在本类中使用,也可以被继承;
__xxx是为了避免与子类命名冲突,并且无法在外部直接访问.
__xxx__表示的是魔法对象或属性.
简单解释Python中以下划线开头的变量名特点。
_x:保护变量,禁止通过from module import _x导入该对象
_x:私有化变量,避免与子类属性命名冲突,无法在外部直接访问,无法继承
x:用户名的魔法属性,不能自己定义
xx:用于避免和python关键词冲突
35.python3中获取用户输入并默认以字符串存储的函数是----input
36.用于进行python程序调试的是
37.Python自动化测试框架的是
38.叙述使用Python操作MS SQL Server数据库的步骤。
首先选择python连接数据库的库,这里我选择的是用pyodbc库去连接此数据库,当然这个库连接其它一些关系型数据库也是可用的,先建立connect连接,获取游标cursor,执行操作execute,游标获取执行返回结果cursor.fetchall,如果是更改数据库数据需要提交操作commit,对于支持事务功能的数据库可以在出错时事务回滚rollback防止数据更改发生不可预知的事情,数据库用完后关闭游标cursor.close,关闭数据库conn.close
39.叙述使用Python操作MySQL数据库的步骤。
导入pymysql库,使用connect连接,参数IP,用户名,密码,要操作的table。获得cursor,然后使用execute操作该table
40.叙述使用Python操作Access数据库的步骤。
与MySQL差不多
<1.建立数据库连接
<2.打开一个记录集
❤️.对记录集操作
<4.用sql语句来插入或更新数据
<5.遍历记录
41.Python上下文管理语句是—with
42.Python上下文管理语句是— BaseException
python内所有内建异常的基类StandardError;
所有异常的基类BaseException;
常规错误的基类Exception
43.使用pdb模块进行Python程序调试主要有哪几种用法?
主要有三种方式,
1)在交互模式下使用pdb模块提供的功能可以直接调试语句块、表达式、函数等多种脚本。
2)在程序中嵌入断点来实现调试功能
在程序中首先导入pdb模块,然后使用pdb.set_trace()在需要的位置设置断点。如果程序中存在通过该方法调用显式插入的断点,那么在命令提示符环境下执行该程序或双击执行程序时将自动打开pdb调试环境,即使该程序当前不处于调试状态。
3)使用命令行调试程序
在命令行提示符下执行“python–m pdb脚本文件名”,则直接进入调试环境;当调试结束或程序正常结束以后,pdb将重启该程序。
44.Python异常处理结构有哪几种形式?
try-except以及try-finally
45.在Python程序中,局部变量会隐藏同名的全局变量吗?请编写代码进行验证?
会,因为python搜索局部变量和全局变量的规则是:当搜索一个变量时,Python先从局部作用域开始搜索,若搜索不到则从全局作用域搜索,再搜索不到就会抛出异常
def demo():
a=3
print aa=5
demo()
3a
5
46.简单解释Python的字符串驻留机制。
字符串驻留定义:在计算机科学中,字符串驻留一种仅保存一份相同且不可变字符串的方法。不同的值被存放在字符串驻留池中。
字符串驻留限制:仅包含下划线(_)、字母和数字的字符串会启用字符串驻留机制驻留。因为解释器仅对看起来像python标识符的字符串使用intern()方法,而python标识符正是由下划线、字母和数字组成。python只会针对整数范围为[-5, 256]的整数启用字符串驻留
字符串驻留机制的优缺点如下:
优点:能够提高一些字符串处理任务在时间和空间上的性能,
缺点:在创建或驻留字符串时的会花费更多的时间。
举例:string1 = “aabbcc”
string2 = “aabbcc”
使用id(string1)和id(string2)得到的内存地址是一样的。
47.在Python中,字典和集合都是用一对大括号作为定界符,字典的每个元素有两部分组成,即键和值,其中键不允许重复。
48.在Python中导入模块中的对象有哪几种方式?
49.为什么说Python采用的是基于值的内存管理模式?
Python中的变量并不直接存储值,而是存储了值的内存地址或者引用,假如为不同变量赋值为相同值,这个值在内存中只有一份,多个变量指向同一块内存地址。
50.简单说明如何选择正确的Python版本。
python现在有py2和py3两个版本,这两个版本是不兼容的。主要是看你项目的情况,如果是新的项目的话建议是python3,如果是一个已经成型的项目且用的是python2,那就还是选择python2,因为跟换版本是需要很大的成本的
51.在python的类的方法定义中,请描述’self’参数的作用?
self在类中定义时定义,在调用时会自动传入。
self是指调用时的类的实例。
52.简述Python进程、线程和协程的区别及应用场景?
1.进程拥有自己独立的堆和栈,堆和栈都不共享,进程由操作系统调度
2.线程拥有自己独立的栈,但是堆却是共享的,标准的线程是由操作系统调度的
3.协程共享堆却不共享栈,协程是由程序员在协程的代码块里显示调度
53.Python提供了两种基本的循环结构: for循环 和 while循环。
54.range( )函数在Python 2.x中返回一个包含整数的列表,而Python 3.x的range( )函数返回一个 可迭代的range对象。
55.在Python 2.x中,input( )函数接收到的数据类型由界定符 确定,而在Python 3.x中该函数则认为接收到的用户输入数据一律为字符串 。
56.解释Python脚本程序的“name”变量及其作用。
每个Python脚本在运行时都有一个“name”属性。如果脚本作为模块被导入,则其“name”属性的值被自动设置为模块名;如果脚本独立运行,则其“name”属性值被自动设置为“main”。利用“name”属性即可控制Python程序的运行方式。
如果希望这个python文件里面的某一段代码在被其他文件import的时候不运行,则将这段代码放在 if name == ‘main’: # 这里
57.pip是目前比较常用的Python扩展库管理工具
58.解释 Python 中的运算符 “/” 和 “//” 的区别。
59.请分别列出HTML、JavaScript、CSS、Java、php、python的注释代码形式。
HTML:
JavaScript:
单行: //
多行: /* */
CSS: /* */
PHP/Java:
单行: //
多行: /* */
python:
单行: #
多行: “”" “”"
多行: ‘’’ ‘’’’
60.请你说明如何使用Python比较两个json数据是否相等
反序列化,loads成Python的字典
61.编写代码,使用至少3中不同的方法启动Windows自带的计算器程序。
os.exec()
os.system()
os.popen()
os.subprocess()
官方文档推荐第三种
62.简单叙述创建线程的方法。
63.简单叙述Thread对象的方法
64.简单叙述线程对象的daemon属性的作用和影响。
65.解释至少3种线程同步方法
线程同步:当一个线程对内存进行操作时,其他线程都不可以对这个内存地址进行操作,知道发哦线程完成操作,其他线程才能对该内存地址进行操作,而其他线程又处于等待状态。
为什么要实现线程同步:一般情况下,创建一个线程时不能提高程序的执行效率的,所以要创建多个线程,但是多个线程同时运行时候可能调用线程函数,在多个线程同时对同一个内存地址进行写入操作时,由于cpu时间调度上的问题,写入数据会被多次覆盖,所以就要时线程同步。同步就是协同步调,按预定的先后顺序进行运行。
方式一:
threading的Lock类,用该类的acquire函数进行加锁,用realease函数进行解锁
方式二:
信号量也是提供acquire release方法,每当调用acquire方法时候如果内部计数器大于0,则将其减1,如果内部计数器等于0,则会阻塞该线程,直到有线程调用了release方法将内部计数器更新到大于1的位置。
方式三:
条件判断,即这种机制是在满足特定的条件后,线程才可以访问相关的数据。
使用condition类来完成,由于它也可以像锁那样用,所以它有acquire方法和release方法,而且它还有wait, notify, notifyall方法。
方式四:
同步队列put方法和task-done方法,queue有一个未完成任务数量num,put一次num+1 ,task一次num-1 任务都完成时任务结束。
66.手写二分查找
def test(num_list,key):
if len(test) <= 0:
return None
L = 0
R = len(num_list) -1
while L <= R:
mid = L + ((R-L)>>1)
if num_list[mid] > key:
R = mid - 1
elif num_list[mid] < key:
L = mid + 1
else:
return mid
67.Ctrl+C程序挂掉还是抛出异常,如何判断两个dict是否一样,list头上删除元素,字符串拼接?
Ctrl+C:抛出异常 判断两个字典是否一样:is cmp() list删除头元素:del list[0] list.pop(0)list.remove(list[0]) 字符串拼接: +
68.请你思考一下,pytorch中cuda()作用,两个Tensor,一个加了cuda(),一个没加,相加后会发生什么情况?
类型不匹配,gpu版本是torch.cuda.FloatTensor,cpu版本是torch.FloatTensor
69.求 AB最大公因数
def f(a, b):
if b == 0:
print a
else:
f(b, a%b)
a, b = input(“Enter two natural numbers: ”)
print f(a, b)
70.简单解释TCP和UDP协议的区别。
TCP与UDP区别总结:
1、TCP面向连接(如打电话要先拨号建立连接);UDP是无连接的,即发送数据之前不需要建立连接
2、TCP提供可靠的服务。也就是说,通过TCP连接传送的数据,无差错,不丢失,不重复,且按序到达;UDP尽最大努力交付,即不保证可靠交付。
TCP通过校验和,重传控制,序号标识,滑动窗口、确认应答实现可靠传输。如丢包时的重发控制,还可以对次序乱掉的分包进行顺序控制。
3、UDP具有较好的实时性,工作效率比TCP高,适用于对高速传输和实时性有较高的通信或广播通信。
4.每一条TCP连接只能是点到点的;UDP支持一对一,一对多,多对一和多对多的交互通信
5、TCP对系统资源要求较多,UDP对系统资源要求较少。
6、 TCP传输单位称为TCP报文段,UDP传输单位称为用户数据报。
7、TCP注重数据安全性,UDP数据传输快,因为不需要连接等待,少了许多***作,但是其安全性却一般。
TCP对应的协议和UDP对应的协议
TCP对应的协议:
(1)FTP:定义了文件传输协议,数据使用20端口,控制使用21端口。
(2)Telnet:一种用于远程登陆的端口,使用23端口,用户可以以自己的身份远程连接到计算机上,可提供基于DOS模式下的通信服务。
(3)SMTP:邮件传送协议,用于发送邮件。服务器开放的是25号端口。
(4)POP3:它是和SMTP对应,POP3用于接收邮件。POP3协议所用的是110端口。
(5)HTTP:是从Web服务器传输超文本到本地浏览器的传送协议。
UDP对应的协议:
(1)DNS:用于域名解析服务,将域名地址转换为IP地址。DNS用的是53号端口。
(2)SNMP:简单网络管理协议,使用161号端口,是用来管理网络设备的。由于网络设备很多,无连接的服务就体现出其优势。
(3)TFTP(Trival File Transfer Protocal):简单文件传输协议,该协议在熟知端口69上使用UDP服务。
(4)DHCP(Dynamic Host Configuration Protocol):动态主机配置协议是一个局域网的网络协议, 主要有两个用途:给内部网络或网络服务供应商自动分配IP地址,给用户或者内部网络管理员作为对所有计算机作中央管理的手段。
71.断言语句的语法为------assert
72.异常和错误有什么区别?
错误分为语法错误和逻辑错误;即便python的程序的语法是正确的,在运行它的时候,也有可能发生错误,程序运行期检测到的错误被称为异常。
异常是有错误产生的。 程序出现了异常都不会被程序处理,都以错误信息的会展现出来。也可理解为异常是程序在运行过程中受到外部因素影响,比如网络中断,用户输入错误等等,python中try except 异常处理
73.简单解释文本文件与二进制文件的区别。
文本文件:文本文件是一种计算机文件,它是一种典型的顺序文件,其文件的逻辑结构又属于流式文件。
二进制文件:是基于值编码的文件,你可以根据具体应用,指定某个值是什么意思(这样一个过程,可以看作是自定义编码)。
文本文件基本上是定长编码的(也有非定长的编码如UTF-8)。而二进制文件可看成是变长编码的,因为是值编码嘛,多少个比特代表一个值,完全由你决定
文本文件可以直接打开,比如记事本、NotePad++、Vim等;二进制需要转码,如bmp文件需要图像查看器,rmvb需要播放器。
74.使用shutil模块中的move()方法进行文件移动。
import shutil
shutil.move(oldpath, newpath)
75.与运算符“**”对应的特殊方法名为 pow( ) ,与运算符“//”对应的特殊方法名为---- floordiv()
76.面向对象程序设计的三要素分别为封装、继承、多态
77.编写程序,至少使用2种不同的方法计算100以内所有奇数的和。
def main():
sum1 = 0
for i in range(1,100,2):
sum1 += i
print(sum1)
line = list()
for i in range(1,100,2):
line.append(i)
print(sum(line))
line1 = list()
for i in range(100):
line1.append(i)
print(sum(line1[1:100:2]))
if name == “main”:
main()
78.假设有一段英文,其中有单独的字母“I”误写为“i”,请编写程序进行纠正。
import re
content=input(“请输入一段英文:”)
true_str=" " for i in content:
if i == “i”:
true_str=content.replace(i,“I”)
print(true_str)
79.编写程序,用户从键盘输入小于1000的整数,对其进行因式分解。例如,10=2×5,60=2×2×3×5。
def main():
num = int(input())
line = list()
if num > 1000 or num <=2:
print(“输入不符合规则”)
else:
for i in range(2 , num):
while True:
if num%i == 0:
num = num/i
line.append(i)
else:
break
line_str = list()
for i in line:
line_str.append(str(i))
print("*".join(line_str))
if name == “main”:
main()
80.编写程序,生成一个包含20个随机整数的列表,然后对其中偶数下标的元素进行降序排列,奇数下标的元素不变。(提示:使用切片。)
import random
def main():
a[]
for i in rang(20):
a.append(random.randint(0,100))
print(a)
b=a[::2]
b.sort(reverse=True)
a[::2]=b
if__name__=‘main’:
main()
81.编写程序,生成一个包含50个随机整数的列表,然后删除其中所有奇数。(提示:从后向前删。)
import random
如果要在原来的列表中删除,那么就要考虑到删过之后循环会越界,所以需要从后网前删
num_list = [random.randint(0,100) for i in range(50)]
for i in range(len(num_list)-1,-1,-1):
if num_list[i] & 1 == 1:
del num_list[i]
print(num_list)
82.分析逻辑运算符“or”的短路求值特性。
(表达式1)||(表达式2) 如果表达式1为真,则表达式2不会进行运算,即表达式2“被短路”
83.不可以使用del命令来删除元组中的部分元素。因为del 可以删除整个元组,不能删除部分元素】
84.使用列表推导式生成包含10个数字5的列表,语句可以写为 [5 for i in range(10)]
85.假设有一个列表a,现要求从列表a中每3个元素取1个,并且将取到的元素组成新的列表b,可以使用语句b = a[::3]
86.假设有列表a = [‘name’,‘age’,‘sex’]和b = [‘Dong’,38,‘Male’],请使用一个语句将这两个列表的内容转换为字典,并且以列表a中的元素为键,以列表b中的元素为值,这个语句可以写为 c = dict(zip(a,b))
87.设计一个字典,并编写程序,用户输入内容作为键,然后输出字典中对应的值,如果用户输入的键不存在,则输出“您输入的键不存在!”
dict_demo={}
key_input=input()
if key_input in dict_demo:
print dict_demo.get(key_input)
else:
print(“您输入的键不存在!”)
88.编写程序,用户输入一个列表和2个整数作为下标,然后输出列表中介于2个下标之间的元素组成的子列表。例如用户输入[1,2,3,4,5,6]和2,5,程序输出[3,4,5,6]
方法1:直接输入两个数。 代价是需要添加for循环处理,以及split()使用
List = input(“请输入一个列表:”).split( )
num = input(“请输入两个整数:”).split( )
for i in range(len(num)):
num[i] = int(num[i])
num.sort()
print(List[num[0]:num[1]+1])
方法2:省去for循环
List = input(“请输入一个列表:”).split( )
num = input(“请输入两个整数:”).split( )
num.sort()
print(List[int(num[0]):int(num[1])+1])
方法3:一个数一个数输入。更清晰,但是操作复杂。
List = input(“请输入一个列表:”).split( )
num1 = int(input(“第一个数:”))
num2 = int(input(“第二个数:”))
if num1 > num2:
num1,num2 = num2,num1
print(List[num1:num2+1])
引申:① split()方法用来指定分隔符,如input().split(“1”) ,碰到1就分割。
② 对比sort()排序方法和手动排序num1,num2 = num2,num1 。元素多了更适合用sort()
89.为什么应尽量从列表的尾部进行元素的增加与删除操作?
因为从中间插入或删除,元素都需要移动,效率低,尾部插入或删除,不需要移动效率高。
当列表增加或删除元素时,列表对象自动进行内存扩展或收缩,从而保证元素之间没有缝隙,但这涉及到列表元素的移动,效率较低,应尽量从列表尾部进行元素的增加与删除操作以提高处理速度.
编写程序,生成包含1000个0到100之间的随机整数,并统计每个元素的出现次数。(提示:使用集合。)
from collections import Counter
import random
list1 = [random.randint(0,100) for i in range(1000)]
Counter(list1)
import random
list1 = [random.randint(0,100) for i in range(1000)]
list2 = dict([(i,list1.count(i)) for i in set(list1)])
90.使用pip命令安装numpy、scipy模块。
pip install numpy/scipy
91.__new__和__init__的区别
__init__是当实例对象创建完成后被调用的,然后设置对象属性的一些初始值。
__new__是在实例创建之前被调用的,因为它的任务就是创建实例然后返回该实例,是个静态方法。
即,__new__在__init__之前被调用,__new__的返回值(实例)将传递给__init__方法的第一个参数,然后__init__给这个实例设置一些参数。
92.os模块的listdir() 方法用来返回包含指定文件夹中所有文件和子文件夹的列表。
93.os.path模块中的isfile()方法用来测试指定的路径是否为文件。
94.文件对象的flush()方法用来把缓冲区的内容写入文件,但不关闭文件。
95.与运算符“”对应的特殊方法名为 pow() ,与运算符“//”对应的特殊方法名为 floordiv()。
96.包含yield语句的函数可以用来创建生成器。
97.在函数内部可以通过关键字 global 来定义全局变量。local定义局部变量
98.假设有一个列表a,现要求从列表a中每3个元素取1个,并且将取到的元素组成新的列表b,可以使用语句 b = a[::3]
99.使用字典对象的 items() 方法可以返回字典的“键-值对”列表,使用字典对象的keys()方法可以返回字典的“键”列表,使用字典对象的 values() 方法可以返回字典的“值”列表。
100.列表对象的 remove() 方法删除首次出现的指定元素,如果列表中不存在要删除的元素,则抛出异常。
101.列表对象的sort( )方法用来对列表元素进行原地排序,该函数返回值为None**
102.列表(list)和元组(tuple)的区别
列表可变,元组不可变;列表用[]标识,元组用()标识
103.解释型语言的特性有什么
非独立:需要依赖解释器
效率低:
跨平台兼容性好