专栏文章索引:Python
根据语法的难度以及程序的复杂程度分为不同的等级:初级(8个)、中级(4个)、高级(2个)
可自行选择题目难度进行学习
目录
一、初级
1.(单选)下面哪个是Python中不可变的数据结构?
A.set B.list C.tuple D.dict
可变数据类型:列表list、字典dict、集合set(能查询,也可更改)数据发生改变,但内存地址不变
不可变数据类型:数值型(整型(int)、浮点型(float)、长整型(long)、布尔型(bool(True、False))、复数(complex))、字符串str、元组tuple(只能查询,不可更改)当该数据类型的对应变量的值发生了改变,那么它对应的内存地址也会改变
2.(单选)在python3中,下列程序结果为:
dicts = {'one': 1, 'two': 2, 'three': 3}
print(dicts['one'])
print(dicts['four'])
A.1,[] B.1,{} C.1,报错 D.1,None
在python3中,访问字典的元素主要是依靠字典的key,因此 print(dicts['one']) 的结果为 1;但如果用字典里没有的键访问数据,会报出错误信息
3.(单选)在python3中关键字 pass 的使用,则:
for i in range(5):
if i == 2:
pass
print(i)
A.1,2,3,4,5 B.0,1,2,3,4 C.0,1,3,4 D.0,1,2,3,4,5
在Python3中,pass是空语句,是为了保持程序结构的完整性,不做任何事情,一般用做占位语句
因此程序打印的数字为 0,1,2,3,4,注意range(5) 生成的列表是从0开始到4,不包含5
4.(多选)Python中函数是对象,下列描述正确的有?
A.函数可以赋值给一个变量 B.函数可以作为元素添加到集合对象中
C.函数可以作为参数值传递给其它函数 D.函数可以当做函数的返回值
在 Python 中万物皆为对象,函数也不例外,函数作为对象可以赋值给一个变量、可以作为元素添加到集合对象中、可作为参数值传递给其它函数,还可以当做函数的返回值,这些特性就是第一类对象所特有的。
详情请参考:
5.(单选)以下哪一个不是Python支持的数据类型
A.char B.int C.float D.list
在Python中没有char字符类型,Python中的数据类型有
1、数值类型
a、整型(int)
b、浮点型(float)
c、长整型(long)
d、布尔型(bool(True、False))
e、复数(complex)
2、字符串(str)
3、元组(tuple)
4、列表(list)
5、字典(dict)
6、集合(set)
6.(单选)在Python3中,下列程序运行结果为:
tmp = [1, 2, 3, 4, 5, 6]
print(tmp[5::-2])
A.[5, 3, 1] B.[6,4,2,0] C.[6, 4, 2] D.[2,4,6]
start_index是5,从正向第六个数开始。step是-2,负向每隔两步取一个。end_index省略,取到列表端点。
7.(单选)在Python3中,关于字符串的判断正确的是:
str1 = ''
str2 = ' '
if not str1:
print(1)
elif not str2:
print(2)
else:
print(0)
A.0 B.1 C.2 D.None
在Python3中,逻辑运算符 not 表示非,字符串 str1 表示空字符, str2 虽然也表示空格字符,其长度是为1,因此在题目中会判断 str1 为空打印 1
8.(单选)执行以下程序,输出结果为()
a = 0 or 1 and True
print(a)
A.0 B.1 C.False D.True
在Python中,布尔运算符的优先级是not>and>or。所以,根据运算符优先级,表达式会按照以下步骤进行计算:
1 and True:这是一个and运算,and运算符在遇到第一个False值时,返回这个False值;否则,返回最后一个表达式的值。因为1是True,而True也是True,所以整个表达式的结果为True。
0 or True:这是一个or运算,or运算符在遇到第一个True值时,返回这个True值;否则,返回最后一个表达式的值。因为0是False,而上一步计算结果是True,所以整个表达式的结果为True。
所以,a的值是True。
a = 1 and 2
print(a) # 2
a = 0 and 2
print(a) # 0
a = 1 or 2
print(a) # 1
a = 0 or 2
print(a) # 2
二、中级
1.(单选)在Python3中。程序语句结果为:
strs = 'abbacabb'
print(strs.strip('ab'))
A.'ab' B.语法错误 C.'c' D'ca'
strip方法匹配两侧所有的不符合条件的字符(括号内指定字符串中的每个字符)
'ab'表示的是一种集合,这里是指:[ab,ba,aa,bb,aaa,bbb,abb,baa]等;strs两端,只要是包含了上述集合中的任何一个,都删除。
注意:是匹配两端的字符(串),如果大于一个,是字符的组合集合
下面是几个案例:
strs = 'acaba'
print(strs.strip('a'))
# cab
strs = 'acaba'
print(strs.strip('b'))
# acaba
strs = 'acaba'
print(strs.strip('abc'))
#
strs = 'acaba'
print(strs.strip('abb'))
# c
abb跟ab一样,不要用重复的字符
2.(单选)在Python3中,有关字符串的运算结果为:
strs = 'I like python and java'
one = strs.find('n')
print(one)
two = strs.rfind('n')
print(two)
A.12,12 B.15,15 C.12,15 D.None,None
string.find(str, beg=0, end=len(string)),检测 str 是否包含在 string 中,如果 beg 和 end 指定范围,则检查是否包含在指定范围内,如果是返回开始的索引值,否则返回-1,因此第一个返回结果为 12
string.rfind(str, beg=0,end=len(string) ),类似于 find() 函数,返回字符串最后一次出现的位置,如果没有匹配项则返回 -1,第二个返回结果为 15
简单地说:
- find是从前往后找,返回成功匹配的第一个字符的位置索引
- rfind也是从前往后找,但是返回最后一次成功匹配的字符的位置索引
3.(单选)执行下列选项代码,输出[1, {'age': 10}]的是()
A.
a = [1,{'age':10}]
b = a
a[1]['age'] = 12
print(b)
B.
a = [1,{'age':10}]
b = a[:]
a[1]['age'] = 12
print(b)
C.
a = [1,{'age':10}]
b = a.copy()
a[1]['age'] = 12
print(b)
D.
import copy
a = [1,{'age':10}]
b = copy.deepcopy(a)
a[1]['age'] = 12
print(b)
浅拷贝:切片,赋值,调用copy模块的copy方法
深拷贝:用copy模块的deepcopy方法
浅拷贝原数据改变时,拷贝数据也发生改变;深拷贝原数据改变时,拷贝数据不发生改变。
对于可变对象(列表和字典)来说,浅拷贝即开辟了新的内存地址,但是浅拷贝只能拷贝一层,即拷贝到‘age’,而这个‘age’仍然指向被拷贝对象指向的地址;所以被拷贝对象的age的值改变,拷贝对象的值也会改变;
3. copy.copy()指的就是浅拷贝;
4. deepcopy()是深拷贝,即将被拷贝对象的全部内容递归拷贝到新的内存空间中,即自立门户互不影响,所以被拷贝对象怎么改变值也不会影响拷贝对象。
注意:只能用于可变数据类型
4.(单选)What gets printed?()
kvps = { '1' : 1, '2' : 2 }
theCopy = kvps.copy()
kvps['1'] = 5
sum = kvps['1'] + theCopy['1']
print sum
A.1 B.2 C.6 D.10 E.An exception is thrown
同上一题
三、高级
1.(单选)执行以下程序,输出结果为()
def outer(fn):
print('outer')
def inner():
print('inner')
return fn
return inner
@outer
def fun():
print('fun')
A.outer B.inner C.fun D.因为没有调用任何函数,所以没有输出结果
装饰器的一个关键特性是,它在被装饰函数定义后被立即执行,因此运行装饰函数outer,输出结果为outer,内部函数inner没有调用,不会输出任何结果,被装饰函数同样也不会运行。
参考文章:装饰器函数
def outer(fn):
print('outer')
def inner():
print('inner')
return fn
return inner
@outer
def fun():
print('fun')
fun()
"""
outer
inner
"""
2.(单选)对于下面的python3函数,如果输入的参数n非常大,函数的返回值会趋近于以下哪一个值(选项中的值用Python表达式来表示)
import random
def foo(n):
random.seed()
c1 = 0
c2 = 0
for i in range(n):
x = random.random()
y = random.random()
r1 = x * x + y * y
r2 = (1 - x) * (1 - x) + (1 - y) * (1 - y)
if r1 <= 1 and r2 <= 1:
c1 += 1
else:
c2 += 1
return c1 / c2