Python编程:期末测试题解析

需积分: 5 0 下载量 62 浏览量 更新于2024-08-05 收藏 5KB MD 举报
"这是一个关于Python编程的期末测试题目集,包含多个编程挑战,涉及列表操作、循环、条件判断、数学计算、字符串处理、递归、逻辑推理等多个知识点。" 1. 列表元素类型检查与合并去重 在这个问题中,你需要创建两个列表`list1`和`list2`,然后分别输出它们的元素类型。Python中,可以使用`type()`函数来检查元素类型。接着,你可以使用`+`操作符将两个列表合并,最后通过`set()`函数去除重复项。例如: ```python list1 = [1, 2, 3, 4, 5] list2 = [1, 2, 3, "王一博", 6.0] # 输出元素类型 for item in list1: print(type(item)) for item in list2: print(type(item)) # 合并并去重 merged_list = list1 + list2 unique_list = list(set(merged_list)) print(unique_list) ``` 2. 求1-100的奇数和 使用循环结构和条件判断,你可以找出1到100之间的所有奇数,并将它们相加。可以使用`range()`函数配合`step`参数来只遍历奇数: ```python odd_sum = 0 for i in range(1, 101, 2): odd_sum += i print(odd_sum) ``` 3. 广告标语合法性判断 你需要编写一个函数,接收一个字符串作为广告标语,然后检查它是否包含特定的敏感词汇。如果包含,返回"广告不合法",否则返回"广告合法": ```python def check_ad_slogan(slogan): sensitive_words = ["最", "第一", "稀缺", "国家级"] for word in sensitive_words: if word in slogan: return "广告不合法" return "广告合法" ``` 4. 张三吹蜡烛的问题 这是一个典型的数学问题,可以通过设定一个方程来解决。设张三从x岁开始吹蜡烛,今年y岁,那么有y * x = 275。可以通过尝试不同的y值来解这个方程,直到找到满足条件的x。 ```python def find_birthday_age(total_candles): for y in range(1, int(total_candles 0.5) + 1): x = total_candles // y if x * y == total_candles: return (x, y) age_started, current_age = find_birthday_age(275) print(f"张三从{age_started}岁开始吹蜡烛,今年{current_age}岁了。") ``` 5. 小明切割矩形材料问题 这是一个递归问题。首先确定最大正方形的边长,然后递归地处理剩余的矩形,直到矩形的面积小于1。可以使用`math.sqrt()`函数来获取一个数的平方根: ```python import math def cut_rectangles(width, height): if width <= 0 or height <= 0: return 0 max_square_side = min(width, height) squares = max_square_side + cut_rectangles(width - max_square_side, height - max_square_side) return squares num_squares = cut_rectangles(2019, 324) print(num_squares) ``` 6. 单词分类 这个任务要求根据每个单词的字母数量对单词进行分组。可以使用`collections.Counter`来统计每个单词的字母数量,然后使用`itertools.groupby`来分组: ```python from collections import Counter from itertools import groupby def classify_words(words): counter_dict = {word: len(word) for word in words} sorted_words = sorted(words, key=lambda x: counter_dict[x]) groups = [len(list(group)) for k, group in groupby(sorted_words, lambda x: counter_dict[x])] return len(groups) # 示例 words = ["live", "live", "roof"] print(classify_words(words)) # 输出: 2 ``` 7. 葡萄采摘问题 这是一个优化问题,可以使用优先队列(Python中的`heapq`模块)来解决。每次从最容易摘到的葡萄开始摘,直到力气耗尽。葡萄按其采摘难度排序,即按力气值排序: ```python import heapq def max_grapes(n, s, a, b, heights, energies): grapes = [(height - a, energy) for height, energy in zip(heights, energies)] heapq.heapify(grapes) count = 0 while s >= 0 and grapes: _, energy = heapq.heappop(grapes) s -= energy if s < 0: break count += 1 return count # 示例 n = 3 s = 10 a = 5 b = 10 heights = [8, 12, 15] energies = [3, 5, 7] print(max_grapes(n, s, a, b, heights, energies)) # 输出: 2 ``` 以上是各个问题的详细解答,涵盖了Python编程中的多个核心概念。