生成器+三元表达式+内置函数 作业

1.什么是生成器?

(yield)生成器是自定义的迭代器,本质就是迭代器

生成器必须在函数体内定义,并且生成器直接调用不会执行函数体内代码

通过__next__()取值才会执行函数体内代码,并且yield会返回一次值,一次一个值(可以返回多次)。

2.请用自己认为通俗易懂的话简述面向过程编程思想,并列举优缺点。

面向过程编程思想类似于工厂流水线,即先做什么后做什么。

优点:复杂的问题流程化,简单化

缺点:可扩展性差

3.列表生成式与生成器表达式(生成器生成式)的区别?

列表生成式可依赖索引取值,方便,但是耗费资源

生成器表达式没有索引取值,取值不方便,但是节省资源

4.写出以下程序的输出结果1

res1 = (i for i in range(10) if i % 2 == 0)
print(res1)  # 此处写答案--> 生成器表达式取余隐藏了0,2,4,6,8;
显示<generator object <genexpr> at 0x000001E75DCC0DB0>

res2 = [i + 2 for i in res1]
print(res2)  # 此处写答案--> 2 4 6 8 10

res3 = sorted(res2, reverse=True)
print(res3)  # 此处写答案--> 10 8 6 4 2 0

5.写出以下程序的输出结果2

a = [2, 5]
b = [a] * 4
print(b)  # 此处写答案-- >[[2, 5],[2, 5],[2, 5],[2, 5]]
b = tuple(b)
b[0][0] = 3
print(b)  # 此处写答案, 请简述答案为何是这个结果-->([3, 5], [3, 5], [3, 5], [3, 5])
因为这里的b是元组套列表,b后面的第一个0代表元组索引,第二个代表列表索引,因为元组是不可变类型,列表是可变类型;所以列表里面索引为0的都修改成3

6.写出一下程序的输出结果3

print([i % 2 for i in range(10)])  # 此处写答案--> [0,1,0,1,0,1,0,1]
print((i % 2 for i in range(10)))  # 此处写答案--> 别看了,生成器不会给你显示的

7.从0-99这100个数中随机取出10个,要求不能重复,使用列表生成式。

print([x * x for x in range(1, 11)])

8.请写出匿名函数 lambda表达式的语法格式以及使用方式?

key = lambda 参数 : 返回值
print(key(参数))
和内置函数一起用

9.请用两种方式获取list1中最大值与最小值。

list1 = [100, 200, 300, 400, 500, 600, 700]
print(min(list1))
print(max(lsit1))
print(max(sorted(list1,reverse=True)))
print(min(sorted(list1,reverse=True)))
print(max(list1,key=lambda x:x))
print(min(list1,key=lambda x:x))

10.请使用两种方式获取user_dic字典中薪资最高的员工。

user_dic = {
    '张全蛋': 20000,
    '赵铁柱': 3000,
    '李小花': 8000,
    '伍六七': 1500
}
print(max(user_dic,key=lambda x:user_dic[x]))

选做题

1.一行代码实现 9*9 乘法表
2.继续编写ATM加购物车

猜你喜欢

转载自www.cnblogs.com/zhulipeng-1998/p/11863522.html