print(99.9 - 90)
print(99.9-90.9 == 9.0)
print(99.9-90.0 == 9.9)
以上三句代码分别输出结果是什么?python中浮点数间怎么判断是否相等
参考答案:
输出结果为: 9.90000000...
True
False
浮点数在计算机里是二进制表示的,10进制能取整的数,比如5.98 6.35等,用二进制表示都是循环小数,有误差。
所以虽然显示的都是0.37和0.37,它们就出现误差了。
好比三进制的0.1 0.2对应10进制的0.3333333.... 0.6666666......
那么三进制的0.1+0.2和1.0比较,虽然都是1.0,但是用10进制计算,就是0.999999....和1.0,前者<后者
第二行print为True是因为左边等式小数部分一样,所以减出来等于右边;
第三行为False参考第一行答案;
浮点数怎么判断相等:
一般如果需要判断浮点数相等时,我们会采用误差法,比如两个浮点数a-b < 较小的误差值 则认为它们相等。
请输出下面代码的数据结果,并阐明原因
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] # 使用l的默认值[]
[3, 2, 1, 0, 1, 4] # 此时有传参, 不使用默认值
[0, 1, 0, 1, 4] # l为列表,内容在上述第一行情况已被改变
lass 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 # 父类值发生变化后,没有赋值的子类成员发生改变
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)
以上代码输出结果是什么?请说明原因
参考答案:
代码在add_session2函数报错,因为在add_session2中对session_cache有赋值操作(=),此时会发现局部变量没有定义,故报错,add_session函数中的append不是赋值操作,所以不会报错。
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)
以上代码输出结果是什么?请说明原因
参考答案:
会报异常:list index out of range , 因为在遍历列表时删除了列表中的元素,列表元素个数已经发生了变化。
def test():
return [lambda x: i*x for i in range(5)]
for ret in test():
print(ret(2))
以上代码输出结果是什么?请说明原因
参考答案:
8
8
8
8
8
这是因为python的延迟绑定原则,也就是说只有内部函数被调用时才会搜索闭包中变量的值。所以在上述代码中,每次调用return函数时,会在附近作用域中查询变量i的值。
a.py文件
mport 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 a时不会报错,因为python中如果一个模块已经被导入,python会自动识别而不会再导入,a文件中import b时并不会执行b.py文件中g()函数内部的代码,所以不会报循环引用错误;
import b时会报错,因为在b文件中import a时会执行return b.x,而此时b文件x尚未定义;
a = 1
try:
a += 1
except:
a += 1
else:
a += 1
finally:
a += 1
print(a)
以上输出结果是什么?请说明原因
参考答案:
输出结果: 4
因为else执行的条件是没有异常发生,而finally是无论有无异常其代码都会执行。
i = 5
def f2(k=i):
print(k)
i = 6
f2()
以上输出结果是什么?请说明原因
参考答案:
输出结果:5 # 因为python中函数的默认值只会执行一次,k默认值第一次执行时是5
temp = [[]]*3
temp[0].append(10)
temp[1].append(20)
temp[2].append(30)
print(temp)
以上代码输出结果是?请说明原因
参考答案:
输出结果:[[10, 20, 30], [10, 20, 30], [10, 20, 30]]
因为在使用*运算符时,是直接复制被乘数的引用,temp中是列表,所以其实temp[0], temp[1], temp[2]实际指向的都是同一个列表内容。
原文:https://www.cnblogs.com/wshlym/p/11342141.html