如何用Python函数反向输出指定范围内的正整数?
修复
reverse_positive_range函数实现反向输出正整数 原代码的问题在于两点:
- 当
start > end时,默认步长为1的range(start, end+1)不会生成任何迭代元素,循环直接跳过,根本不会执行内部逻辑。 - 循环内修改
num -=1对for循环的迭代没有任何影响——因为每次迭代的num都是从range生成的序列里重新取值,修改局部变量不会改变循环的迭代顺序。
正确实现方式一:直接通过range反向遍历有效范围
这种方式无需额外收集数据,效率更高:
def reverse_positive_range(start, end): # 确定输入范围的上下边界 upper_bound = max(start, end) lower_bound = min(start, end) # 调整到正整数的有效边界:上限不能小于0,下限最小为0 actual_upper = upper_bound if upper_bound >= 0 else -1 actual_lower = lower_bound if lower_bound >= 0 else 0 # 如果没有符合条件的正整数,直接返回 if actual_upper < actual_lower: return # 步长设为-1,实现从大到小遍历 for num in range(actual_upper, actual_lower - 1, -1): print(num) # 测试调用 reverse_positive_range(9, -8) # 输出:9 8 7 ... 0
正确实现方式二:先收集正整数再反转输出
如果更看重可读性,也可以先把范围内的正整数收集到列表,再反转输出:
def reverse_positive_range(start, end): positives = [] # 先遍历输入范围内的所有数,筛选正整数 if start <= end: for num in range(start, end + 1): if num >= 0: positives.append(num) else: # 当start大于end时,反向遍历原范围 for num in range(start, end - 1, -1): if num >= 0: positives.append(num) # 反转列表后逐个输出 for num in reversed(positives): print(num) # 测试调用 reverse_positive_range(9, -8) # 输出:9 8 7 ... 0
内容的提问来源于stack exchange,提问作者Hamza Khatib
相关产品推荐
相关产品推荐

