零基础人工智能第五周作业

零基础人工智能第五周作业 Day1Day2任务 1. 复杂排序lambda 多属性 题目 有一个元组列表每个元组为 (name, age, height)。 请按 年龄升序年龄相同则按 身高降序 排序。 people [(Alice, 25, 165), (Bob, 20, 175), (Charlie, 25, 170), (David, 20, 180)] people [(Alice, 25, 165), (Bob, 20, 175), (Charlie, 25, 170), (David, 20, 180)] sorted_people sorted(people, keylambda x: (x[1],-x[2])) print(sorted_people) 2. 综合运用三合一 题目 有一个整数列表请完成以下操作 一 过滤掉所有小于 0 的数字。 二 对过滤后的每个数字计算其立方。 三 对结果按从大到小排序。 四 最终输出排序后的立方列表。 nums [-5, 3, -1, 7, 0, 2, -8, 6] # if x0 # i **3 # resverse False # sorted # 法一 result1 sorted([x ** 3 for x in nums if x 0], reverseTrue) print(result1) # 法二 map、filter result2 sorted(map(lambda x: x**3,filter(lambda x:x0,nums)), reverseTrue) print(result2) 3. 给定一个列表包含多个字符串请筛选出所有长度大于等于5且包含字母 a 的字符串 (提示:多个条件可以做逻辑与运算)。 words [apple, banana, cherry, date, elderberry, fig] words [apple, banana, cherry, date, elderberry, fig] result [x for x in words if len(x) 5 and a in x] print(result) 4. 有如下商品列表每个商品是字典包含 name、price、rating。 请按 价格升序价格相同则按 评分降序 排序。 products [ {name: Laptop, price: 1200, rating: 4.5}, {name: Phone, price: 800, rating: 4.7}, {name: Tablet, price: 800, rating: 4.3}, {name: Monitor, price: 1200, rating: 4.8} ] products [ {name: Laptop, price: 1200, rating: 4.5}, {name: Phone, price: 800, rating: 4.7}, {name: Tablet, price: 800, rating: 4.3}, {name: Monitor, price: 1200, rating: 4.8} ] result sorted(products, keylambda x:( x[price],-x[rating])) def print_table(data, headers, col_width12): # 打印表头 header_row .join(f{h:{col_width}} for h in headers) print(header_row) print(- * len(header_row)) # 打印每行数据 for item in data: row .join(f{str(item.get(h, )):{col_width}} for h in headers) print(row) # 使用 print_table(result, [name, price, rating]) # print(result) 5. 给定一个整数列表请先筛选出所有 能被 3 整除 的数然后将这些数 乘以 2最后输出列表。 nums [1, 2, 3, 4, 5, 6, 7, 8, 9, 10, 12, 15] # 法一map、filter result list(map(lambda x: x * 2, filter(lambda x: x % 3 0, nums))) print(result) # 法二 result [x * 2 for x in nums if x % 3 0] print(result) 6. 有三个列表分别代表学生姓名、数学成绩、英语成绩。 请生成一个新列表每个元素为 姓名: 总分 的字符串。 # 生成 姓名总分 的列表无空格 names [Alice, Bob, Charlie] math [85, 90, 78] english [88, 92, 80] # 法一 result [] for i in range(len(names)): name names[i] total math[i] english[i] result.append(f{name}: {total}) print(result) # 法二列表生成式 result [f{names[i]}: {math[i] english[i]} for i in range(len(names))] print(result) # 法三lambda result [(lambda i: f{names[i]}: {math[i] english[i]})(i) for i in range(len(names))] print(result) Day3 with open(test.text,w, encodingutf-8) as f: f.write(Hello Python\n) f.write(文件操作练习\n) f.write(学习愉快\n) with open(test.txt,r, encodingutf-8) as f: content f.read() print(content) f open(test.txt,w, encodingutf-8) f.write(Hello Python\n) f.write(文件操作练习\n) f.write(学习愉快\n) f.close() f open(test.txt,r, encodingutf-8) content f.read() print(content) f.close() f open(log.txt,w,encodingutf-8) f.write([2026-07-01 10:00:00] 程序启动\n) f.close() f open(log.txt,a,encodingutf-8) f.write([2026-07-01 10:05:00] 执行任务A\n[2026-07-01 10:10:00] 执行任务B\n) f.close() f open(log.txt,r,encodingutf-8) content f.read() print(content) with open(poem.txt,w,encodingutf-8) as f: f.write(床前明月光\n疑是地上霜\n举头望明月\n低头思故乡) with open(poem.txt,r,encodingutf-8) as f: file_line 0#文件总行数 num_line 0#每行内容的字符数 char_line []#所有行中的月字行号 for line in f: file_line 1 num_line len(line) print(num_line) if 月 in line: char_line.append(file_line) print(f\n文件总行数: {file_line}) print(f包含月字的行号: {char_line}) with open(poem.txt, r, encodingutf-8) as f: file_line 0 char_line [] while True: line f.readline() if not line: # 空字符串表示文件结束 break file_line 1 num_line len(line) print(num_line) if 月 in line: char_line.append(file_line) print(f\n文件总行数: {file_line}) print(f包含月字的行号: {char_line}) with open(source.txt, w, encodingutf-8) as f: f.write(abc123def) count 0 with open(source.txt, r, encodingutf-8) as src, \ open(dest.txt, w, encodingutf-8) as dst: for line in src: # 读源文件 count len(line) # 统计字符数 # 替换数字 replaced for c in line: # 遍历这一行的每个字符 if c.isdigit(): replaced # else: replaced c dst.write(replaced) # 写入目标文件 print(f复制完成共处理 {count} 个字符) with open(grades.txt, w, encodingutf-8) as f: f.write(Alice,85,90,78\nBob,60,75,80\nCarol,92,88,95\nDavid,55,60,58\nEve,70,65,72) with open(grades.txt, r, encodingutf-8) as f: for line in f: if not line: continue parts line.split(,) name parts[0] for i in range(1,len(parts)): scores [int(parts[i])] avg sum(scores)/len(scores) print(f{name}:{scores},平均分:{avg:.1f}) Day4一、1、类 2、实例对象cat Cat(布偶,给陌生人开门,蓝眼睛白色毛发) 3、self 4、__init__ 5、类变量 6、实例属性self.属性 二、3、4行未绑定实例 5行传入对象def introduce(self): 6行访问的是局部变量不是实例属性 三、 小黑 出生了 小白 出生了 小黑 汪汪叫有4条腿 小白 汪汪叫有4条腿 小黑 汪汪叫有3条腿 小黑 汪汪叫有5条腿 小白 汪汪叫有3条腿 四、 account.owner owner account.balance balance 五、 T、F、T、T、F | 题号 | 答案 | 核心考点 | | :-- | :------ | :------------------------------------ | | (a) | **✅ 对** | 类属性共享 | | (b) | **❌ 错** | obj.attr val 给实例新建属性不影响类和其他实例 | | (c) | **✅ 对** | Class.attr val 修改类属性影响所有无实例属性的对象 | | (d) | **✅ 对** | 实例属性独立 | | (e) | **❌ 错** | 实例属性不能通过类访问 | 六、class Book: material 纸 def __init__(self, title, author): self.title title self.author author def book(self): print(f《{self.title}》的作者是 {self.author}材质{Book.material}) book1 Book(梦的解析, 弗洛伊德) book2 Book(微积分, 莱布尼兹) book1.book() book2.book()Day5一、单选题共10题每题2分共20分1. 关于Python中的变量与数据类型下列说法错误的是 C 。A. 列表List是可变数据类型元组Tuple是不可变数据类型B. 字典Dict的键Key必须是不可变数据类型C. 字符串String支持通过下标索引修改其中的某个字符如 s[0] aD. 集合Set中的元素必须是不可变数据类型2. 下列代码的输出结果是 B 。a [1, 2, 3]b ab.append(4)c a[:]c.append(5)print(a, b, c)A. [1, 2, 3] [1, 2, 3, 4] [1, 2, 3, 4, 5]B. [1, 2, 3, 4] [1, 2, 3, 4] [1, 2, 3, 4, 5]C. [1, 2, 3, 4] [1, 2, 3, 4] [1, 2, 3, 5]D. [1, 2, 3, 4] [1, 2, 3] [1, 2, 3, 4, 5]3. 以下关于逻辑运算符的短路运算表达式 3 5 and print(Hello) 的执行结果是C 。A. 输出 Hello返回 TrueB. 输出 Hello返回 FalseC. 不输出 Hello返回 FalseD. 语法错误4. 下列哪个选项可以正确地将字符串 2026-07-03 转换为包含三个整数的列表 [2026, 7, 3] A A. list(map(int, 2026-07-03.split(-)))B. 2026-07-03.split(-).map(int)C. int(2026-07-03.split(-))D. list(2026-07-03.split(-)).int()5. 阅读以下函数定义调用 func(10) 返回的结果是 A 。def func(x, lst[]):lst.append(x)return lstA. [10]B. [10, 10] 连续调用两次时C. 无论调用几次永远是 [10]D. 报错因为默认参数 lst[] 是非法语法6.表达式list(enumerate([a, b, c]))的结果是A。A.[(0, a), (1, b), (2, c)]B.[(1, a), (2, b), (3, c)]C.[(a, 1), (b, 2), (c, 3)]D.[(a, 0), (b, 1), (c, 2)]7. 下列表达式中返回值为 True 的是 C 。A. (1, 2) in [1, 2, 3]B. [1, 2] in (1, 2, 3)C. 1 in {1: a, 2: b}D. ab in {a, b, c}8. 以下关于推导式的描述正确的是 B 。A. (x**2 for x in range(5)) 生成的是一个列表B. {x: x**2 for x in range(3)} 生成的是 {0: 0, 1: 1, 2: 4}C. {x**2 for x in [1,2,2,3]} 的结果是 {1, 4, 9, 4}D. 字典推导式中键和值的位置可以互换而不影响结果9.若变量 a 5执行 a 2 后a 的值为 B 。A. 10B. 20C. 7D. 210. 以下代码的运行结果是A 。for i in range(3):if i 1:continueprint(i, end )else:print(Over)A. 0 2 OverB. 0 1 2 OverC. 0 2D. 0 1 2二、判断题共5题每题2分共10分。正确打“√”错误打“×”1. Python 中10 / 3 的结果是 3.333...而 10 // 3 的结果是 310 % 3 的结果是 1。 √ 2. 在函数内部如果要对全局变量进行重新赋值需要使用 global 关键字声明。 √ 3. 异常处理中try 块后面必须紧跟 except 块不能单独使用 finally。 √ 4. 字典的 get(key, default) 方法在键不存在时返回默认值并且会将该键值对自动添加到字典中。 × 5. 表达式 12 or False 的结果是 False。 × 三、问答题共4题每题6分共24分1. 简述Python中“可变对象”与“不可变对象”的区别并分别列举至少三种类型。结合下面代码说明为什么执行后 a 和 b 的值会呈现相应变化a [1, 2, 3]b ab.append(4)a [5, 6]print(a, b)可变对象在内存中一旦创建后可以修改的对象 列表 字典 集合不可变对象在内存中一旦创建 就不可修改的对象 元组 字符串 整型b a a,b共享内存地址因此a,b指向的同一个对象 a,b的任意对象的操作另一个也会跟着变化 a [5,6]变量a指向的地址发生了变化不再和b指向的地址相同因此a,b无关b指向原列表[1,2,3]的地址 a指向新地址2. 对比说明 与 is 运算符的区别并解释为什么以下代码的输出结果会呈现“有时相同、有时不同”的现象 判断的是值是否相等 is 运算符比较两个对象的内存地址是否相同当两个对象是同一对象时 两种运算符结果是相同的 但是当只是值相等而非相同的数据对象在比较时其结果是不同。3. 在函数设计中“位置参数”、“默认参数”、“可变参数*args”和“可变关键字参数**kwargs”各自的作用是什么它们的定义顺序有何要求。位置参数:就是按位置传参的方式传递参数默认参数:函数定义默认设定了参数的初始值可变参数不确定参数的数目时按照位置传参的方式传递的参数可变关键字参数 不确定参数的数目时按照关键字传参的方式传递的参数位置传参 ,/,位置传参或者关键传参*关键字传参 不定长传参或者不定长关键字传参4. 简述 Python 中列表list和元组tuple的核心区别并说明在实际开发中你会根据什么原则来选择使用元组而非列表请至少给出两个选择元组的典型场景并说明理由。列表 是一种可变的数据对象 而元组是一种不可变的数据对象 且在相同的条件下 元组的数据操作,占用内存等更有优势。在整个程序的生命周期中该对象是否会发生改变 如果是不需要改变 则选择元组。需要接收多个元素返回值不定长传参对象四、填空题12分1.在Python中变量本身不存储数据而是存储数据在内存中的地址这种机制被称为“__引用____”。2. 以下代码执行后变量 total 的值是 _15_____。numbers [1, 2, 3, 4, 5]total sum(numbers)3.在函数内部如果要对外层函数非全局的变量进行重新赋值需要使用关键字 _nonlocal_____进行声明。4.字典的键必须是不可变的____数据类型因此列表不能作为字典的键而元组可以作为字典的键前提是元组内所有元素均为不可变类型5. 以下代码执行后变量 squares 的值是 _[1,4,9,16,25]_____。squares [x**2 for x in range(1, 6)]6.执行a, b b, a这样的交换操作Python内部实际上是先构造一个 __元组____对象然后进行解包赋值。五、编程题共3题共34分1. 8分简易数字统计编写一个函数 count_digits(s)接收一个字符串 s统计其中每个数字字符0-9出现的次数忽略字母和其他符号返回一个字典键为数字字符值为次数。示例输入 a1b2c3d1e1f2返回 {1: 3, 2: 2, 3: 1}。2. 12分学生成绩管理系统函数版不使用类仅使用函数和列表/字典完成。要求定义一个全局列表 students []每个元素为一个字典包含 name 和 score。1编写函数 add_student(name, score) 添加学生。2编写函数 get_top_n(n)返回成绩最高的前 n 名学生按成绩降序如果成绩相同按名字字母升序。若学生总数不足 n 个则返回全部。3编写函数 remove_student(name)删除指定姓名的学生只删除第一个匹配项。