1.(10分) -- 浮点数
print(99.9 - 90)
print(99.9-90.9 == 9.0)
print(99.9-90.0 == 9.9)
print(66.6-60.6 == 6.0)
以上三句代码分别输出结果是什么?python中浮点数间怎么判断是否相等
答案:
9.900000000000006 浮点数在计算机里面的表示
True 浮点数部分一样
False 精度的问题
False ?
浮点数用二进制表示
66.6 = 1000010.100110011001100110011001100110011001100110011
60.6 = 111100.10011001100110011001100110011001100110011001101
部分浮点数会无限循环下去,有效数字,取指定的位数
2.请输出下面代码的数据结果,并阐明原因(10分) --- 对象存储
def f(x, l=[]):
for i in range(x):
l.append(i*i)
print(l)
f(2)
f(3, [3, 2, 1])
f(3)
答案:
[0, 1] # 常识
[3, 2, 1, 0, 1, 4] # 当调用函数时默认参数有传值时,直接用传的值,此时和默认的数值无关
[0, 1, 0, 1, 4] # 函数默认值如果是容器对象,是可能会被修改的
3. 以下函数的输出结果是?为什么 (10分) --- 类继承
class A(object):
x = 1
class B(A):
pass
class C(A):
pass
print(A.x, B.x, C.x)
B.x = 2
print(A.x, B.x, C.x)
A.x = 3
print(A.x, B.x, C.x)
答:
1 1 1 # 子类未定义变量时,默认继承父类的变量
1 2 1 # 子类给变量赋值后,会覆盖父类的同名变量,但是不会影响父类变量的值
3 2 3 # 子类未定义变量时,默认继承父类的变量
4. 以下函数的输出结果是?为什么 (10分)-- 变量作用域
session_cache = [10000, 10001, 10002]
def add_session(session_id):
session_cache.append(session_id)
def add_session2(session_id):
session_cache += [session_id]
add_session(10003)
print(session_cache)
add_session2(10004)
print(session_cache)
答案:
函数内引用全局变量,但未声明时,如果是做赋值操作,则会报错
对列表做.append时不会报错;
5.以下代码输出结果是什么?请说明原因(10分) --- 迭代删除
get_node_index = lambda x: int(x % 10)
temp = [n for n in range(10)]
for i in range(len(temp)):
if get_node_index(temp[i]):
del temp[i]
print(temp)
答案:
在循环里面删除列表的元素时,此时列表的长度会发生变化;
比如原来列表是10个元素,删除1个,变成了9个, temp[9](第10个元素)此时发现不存在,即会报错
6. 以下代码输出结果是什么?请说明原因 (10分) --- 闭包迭代
def test():
return [lambda x: i*x for i in range(5)]
for ret in test():
print(ret(2))
答案:
python延迟绑定,去最后的数字
8
8
8
8
8
(10分) --- 循环引用
a.py文件
import b
def f():
return b.x
print(f())
b.py文件
import a
x=1
def g():
print(a.f())
此时在第三个python文件中import a, 会报错吗?为什么
假使在第四个文件中import b, 又会报错吗?请说明原因
答案:
import机制 : python里import x模块时, 会在系统里面去查找之前是否import过,如果import过,则不会再import, 所以不会产生持续的递归
报错不是因为递归退不出来,而是因为某些变量或者代码执行出错(一般是找不到定义)
8.以下代码输出结果是什么?请说明原因 (10分) --- 异常捕获执行顺序
a = 1
try:
a += 1
except:
a += 1
else:
a += 1
finally:
a += 1
print(a)
考点: try中的else和finally
以下输出结果是什么?请说明原因 (10分) -- 初始化
i = 5
def f2(k=i):
print(k)
i = 6
f2()
答案:5 函数的参数默认值只会执行一次
以下代码输出结果是?请说明原因(10分) --- 数组的内存存储
temp = [[]]*3 # temp=[[], [], []]
temp[0].append(10)
temp[1].append(20)
temp[2].append(30)
print(temp)
答案:
[[10, 20, 30], [10, 20, 30], [10, 20, 30]]
列表(列表的元素也为一个容器对象)时得到的多个元素实际上都是指向的同一个容器对象
容器对象: 列表,字典,集合,...