几道python练习题20200831

几道python练习题20200831

github 几道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了.

原文地址:https://www.cnblogs.com/liangping/p/13611131.html