几道python练习题20200831
几道python练习题20200831
1
nope = False
zilch = 0
nada = []
a = (nope, zilch and nada)
print(type(a), a)
if (nope, zilch and nada):
print("Stay positive!")
else:
print("Don't be so negative!")
这个输出的结果是"Stay positive!".因为(nope, zilch and nada)是一个非空元组。
2
a, b = 0, 1
def fibonacci(n):
for _ in range(n):
a, b = b, a + b
return a
print(fibonacci(4))
这个无法正常运行,因为a, b 没有声明,如果想正常运行,可以在fibonacci函数中,使用global 声明a,b为全局变量。
3
values = [1, 2, 3, 4, 5]
is_events = [x % 2 == 0 for x in values]
result = sum(is_events)
print(result)
得出的结果是2。在数组sum时,True会被当作1,False会被当做0
4
def add_to_list(*args, my_list=[]):
my_list += args
return my_list
x = add_to_list(1, 2, 3)
y = add_to_list(4, 5, 6)
print(x)
结果是[1,2,3,4,5,6].list, set, dict都属于可变对象,他们始终指向同一个空间地址。
5
seconds = 10
for i in range(seconds):
--seconds
if seconds:
print("Still waiting...")
else:
print("You're done!")
结果是Still waiting... 。在pyhotn中就不存在--操作
6
multipliers = [lambda x: (i + 1) * x for i in range(5)]
def print_times_table(value):
print([fn(value) for fn in multipliers])
print_times_table(2)
结果是[10, 10, 10, 10, 10].python 惰性求值
7
a = b = [1]
a += [2]
print(b)
a = a + [3]
print(b)
结果是[1, 2], [1, 2]. 对于可变对象+=是在本地对象的基础上操作,而= + 这个是对变量重新进行赋值,而python中赋值就是产生一个新对象。
8
a = b = '1'
a += '2'
print(a, b)
a = a + '3'
print(a, b)
结果:1,2 1 1,23 1 对于不可变对象+= =+ ,都要产生一个新的对象
9
a = ([1, 2, 3], [4])
a[0] += [4]
print(a)
这个第二行会报错,因为a是元组,不可变对象,不可以对对象的值进行修改
10
a = b = 500
print(a is b)
a -= 200
b -= 200
print(a is b)
a = a - 200
b = b - 200
print(a is b)
结果:True False True 。 这个第一个为True很容易明白,但是第二个和第三个,都是不可变对象,按照前面遇到的题,应该都是重新赋值吗,可是为什么就第二个是false,第三个是true呢,这个就是python做了小整数([-5, 256])优化,防止频繁申请释放内存,对于小整数的值,全局只有一个id,因此,第3个是true。如果把第一行500的值换成700,那么应该是true, false,false了.