1.在python3中-10%3的结果是
- 1
- -1
- 2
- -2
原答:-1 int(-3.33) 是向下取整
#-10%3 余数必须为自然数 -10 -(-10//3)3 -> -10 - (-4)3 -> 2
改:2
2.以下为可变数据类型的是
- 字典
- 字符串
- 元组
- 以上都是
不可变:int,float,str,tuple 可变:list,dic,set
答:字典
3.以下关于python3中语法说法不正确的是
- 在循环体中,continue语句意味着跳出当前循环,进入下次循环
- 在循环体中,break语句意味着直接退出当前循环
- 在Python中没有switch – case语句
- 在if-elif-else语法中,elif与else都可有多个 #elif 可以有多个,else只能有一个
答:在if-elif-else语法中,elif与else都可有多个
4.看下面代码回答输出的结果是什么?
result = [lambda x: x + i for i in range(10)]
print(result0)
- 10
- 动态0至9
- 19
- 9
‘’’
浅安老师:
在列表生成式内定义的lambda函数是一个闭包,而变量i属于这个闭包引用的外部列表生成式中的变量。因此,在lambda函数内的i并不会被立即求值,而是会被保留为引用,直到调用这个lambda函数时,才去获取i的值。在列表生成式结束后,因为range(10)的关系i的当前值为9,也就是说生成的列表中每个lambda函数都是lambda x: x + 9,而不是一般所想象的lambda x: x+0, lambda x: x+1, …, lambda x: x+9。因此,将10作为参数传递进无论哪个lambda函数,得到的结果都是10+9=19。
遇到函数定义,直接将函数加载到内存而不会执行函数代码。你可以简单认为就是把代码原封原样的放到内存中(实际上此时函数会生成一个内存中的对象)
你的索引是1,2,3,4,5啥的,结果都会是19的
这里只是生成了匿名函数的列表而不会实际执行函数代码,也就是说暂时并没有生成结果。函数内部的 i 依然是只是变量,并没有变成具体的值,因为此时函数并没有执行。
只有当函数被调用时才会实际执行函数代码,result[0] 提取列表中的第一个匿名函数,在后面加上括号并传入参数 result0 才会实际调用函数,此时才开始执行函数,才会去找对应的变量值。
‘’’
result = [lambda x: x + i for i in range(10)]
print(result[0](10)) # 19
result = [lambda x: x, lambda x: x + 1, lambda x: x + 2, lambda x: x + 3, lambda x: x + 4, lambda x: x + 5,
lambda x: x + 6,
lambda x: x + 7, lambda x: x + 8, lambda x: x + 9]
print(result[0](10)) #10
答:19
5.lis = [4,-2,3,1]
lis.sort(key=abs)执行结果是
- [1, 2, 3, 4]
- [4, 3, 2, 1]
- [1, -2, 3, 4]
- [-2, 1, 3, 4]
原答:[1, 2, 3, 4] #误以为是先求绝对值再排序,实际上是根据绝对值大小升序
改:[1, -2, 3, 4]
6.class Parent(object):
x = 1
class Child1(Parent):
pass
class Child2(Parent):
pass
print(Parent.x, Child1.x, Child2.x) #1 1 1
Child1.x = 2
print(Parent.x, Child1.x, Child2.x) #1 2 1
Parent.x = 3
print(Parent.x, Child1.x, Child2.x) #3 2 3
- 1 1 1 1 2 1 3 2 3
- 1 2 1 1 1 1 3 2 3
- 3 2 3 1 2 1 1 1 1
- 1 1 1 3 2 3 1 2 1
答:1 1 1 1 2 1 3 2 3
7.class Demo(object):
def init(self):
print(“init“)
def new(cls, *args, kwargs): #重写了new方法,结果传给了init,此时并没有实例化 所以没有自动加载init方法
print(“new“)
d = Demo()**
- None
- “init“
- “new“
- “init“,”new“
答:”new“
8.以下关于模块说法错误的是
- 模块就是一个普通的Python程序文件
- 任何一个普通的Python程序文件可以作为模块导入
- 模块文件的扩展名可以是.txt #模块文件的扩展名一定是.py
- Python运行时只会从指定的目录搜素导入的模块
答:模块文件的扩展名可以是.txt
9.关于下面代码中的变量x,以下选项中描述正确的是 ( )
fo = open(fname, “r”)
for x in fo:
print(x)
fo.close()
- 变量x表示文件中的一组字符
- 变量x表示文件中的全体字符
- 变量x表示文件中的一个字符
- 变量x表示文件中的一行字符
原答:变量x表示文件中的全体字符
改:变量x表示文件中的一行字符
'''
文件text1内容为
123
你好
zxc
'''
with open('text01', 'r', encoding='utf-8') as fo:
print(list(fo)) #['123\n', '你好\n', 'zxc']
fo.seek(0)
for x in fo:
print(x, end='')
#123
#你好
#zxc
10.以下关于异常说法错误的是
- 在try-except结构中,抛出异常则执行except内部代码
- 在try-except-else结构中,如果没有任何异常,则执行else内部代码
- 在try-except-else-finally结构中,不论有无异常,都执行内部代码
- 在try-except结构中,except只能使用一次 #except能用多次 else和finally只能用一次
答:在try-except结构中,except只能使用一次
11.请用列表推导式,得出如下结果 [0, 1, 4, 9, 16, 25, 36, 49, 64, 81]
li = [i**2 for i in range(10)]
print(li)
12.请使用循环实现打印输出99乘法表
for i in range(1,10):
for j in range(1,i+1):
print(f'{j}*{i}={i*j}',end=' ')
print()
13.请使用递归实现阶乘。比如5的阶乘为:5!=54321
def func(n):
if n > 1:
return n*func(n-1)
else:
return n
print(func(5))
14.请使用函数式编程,分别定义函数1以及函数2,用函数1实现接收参数求和功能。函数2接收函数1求和的结果求平均值。
原答:
while True:
try:
def num_sum(li):
sum1 = 0
for i in li:
sum1 += int(i)
return sum1
def num_avg(n_sum, li_len):
return n_sum / n_len #手滑 应该是li_len
lis = list(input('请输入几个数字并用英文逗号隔开').split(','))
print(num_avg(num_sum(lis), len(lis)))
break
except:
print("输入错误,请重新输入")
**
优化:
def num_sum(li):
sum1 = 0
for i in li:
sum1 += i
return sum1
def num_avg(n_sum, li_len):
return n_sum / li_len
while True:
try:
lis = list(map(int, input('请输入几个数字并用英文逗号隔开').split(',')))
numbers_sum = num_sum(lis)
numbers_cout = len(lis)
numbers_avg = num_avg(numbers_sum,numbers_cout)
print(f'你一共输入了{numbers_cout}个数\n分别是:{lis}\n和:{numbers_sum}\n平均数:{numbers_avg}')
break
except:
print("输入错误,请重新输入")
15.简述你对面向对象的了解。主要从self参数,面向对象三大特性,面向对象常用魔法方法介绍。其中,请说明init与new魔法方法的作用与区别。
测试1有写不整述,
self是实例参数,代表对象本身
封装和继承是为了代码复用,多态是为了接口复用
封装是把方法或者属性隐藏起来,有权限才能调用,没有权限不能调用,用私有方法或者私有属性实现继承是减少代码冗余子承父业从下至上先己后父先左后右同根最后
多态是不同对象的相同方法调用时结果不一样
__**init**__创建对象,对象实例化后自动调用方法,第一个参数是self
__**new**创建对象并将对象传给_init,准备实例化,第一个参数是cls常用的魔法方法还有
__**str**__将对象用指定的字符串返回
__**doc**__看说明文档
__**dict**__获取属性字典
__**del程序全部执行完或者对象被删完自动调用
cal__**转为可调用