大一Python编程题:修复整数阈值过滤自定义函数实现错误
代码问题分析
- 阈值读取逻辑完全错误:题目要求读取完n个待筛选整数后,还要额外读取一个值作为阈值,但你的代码没有做这一步,错误将待筛选列表的最后一个元素直接当作阈值,刚好示例的输出要求和这种错误逻辑的结果一致,才会出现示例通过的情况,换其他阈值立刻出错。
- 筛选条件逻辑错误:
output_ints_less_than_or_equal_to_threshold函数没有使用传入的upper_threshold参数,反而再次用列表最后一个元素作为判断阈值,完全没有用到传入的参数,逻辑冗余且错误。 - 滥用全局变量:将n、user_values定义在全局作用域,函数内部直接调用全局变量,不符合题目要求的函数封装规范,可复用性差。
- 变量赋值逻辑不严谨:
upper_threshold在循环内部反复赋值,只有最后一次赋值生效,逻辑不合理。
修复后代码
def get_user_values(): n = int(input()) user_values = [] for _ in range(n): num = int(input()) user_values.append(num) # 额外读取阈值输入 upper_threshold = int(input()) return user_values, upper_threshold def output_ints_less_than_or_equal_to_threshold(user_values, upper_threshold): # 用传入的阈值做判断 filter_values = [i for i in user_values if i <= upper_threshold] print(*filter_values, sep = "\n") if __name__ == '__main__': user_values, upper_threshold = get_user_values() output_ints_less_than_or_equal_to_threshold(user_values, upper_threshold)
修复说明
- 将n、待筛选列表的定义挪到
get_user_values函数内部,不再依赖全局变量,符合函数封装要求。 - 在
get_user_values读取完n个待筛选整数后,新增一行读取阈值输入,符合题目要求的输入逻辑。 - 筛选逻辑改为使用传入的
upper_threshold参数做判断,不再错误使用列表最后一个元素。 - 修改变量作用域问题后,函数可以独立复用,符合题目给定的函数定义要求。
内容的提问来源于stack exchange,提问作者Jonathanks
相关产品推荐
相关产品推荐

