
我们的目标是编写一个Python程序,该程序首先接收用户输入的一个正整数 N。然后,程序需要打印从 1 到 N 的所有正整数,但打印方式是交替从当前区间的两端取数。
例如,如果用户输入 N = 5,预期的输出序列应为:
Please type in a number: 5 1 5 2 4 3
这个序列的生成逻辑是:首先打印左端点 1,然后打印右端点 5。接着,将左端点加 1 变为 2,右端点减 1 变为 4。再次打印 2 和 4。最后,左端点变为 3,右端点变为 3,打印 3。
以下是用户最初尝试实现此功能的代码:
立即学习“Python免费学习笔记(深入)”;
num = int(input('Please type in a number:'))
index = 1
while index <= num:
print(index)
print(num)
index += 1
num -= 1让我们分析这段代码在 N = 5 时的执行情况:
最终输出为:
1 5 2 4 3 3
可以看到,当 N 为奇数时(如 5),中间的数字 3 被重复打印了两次。这是因为 while index <= num 这个条件在 index 和 num 相等时(都为 3)仍然允许循环执行一次,导致 3 被打印两次。对于偶数 N,例如 N=4,此代码会输出 1, 4, 2, 3, 3,同样存在重复打印。
要解决重复打印的问题,关键在于精确控制循环的终止条件,并对循环结束后可能剩余的中间元素进行单独处理。
核心思路:
我们使用两个指针:index 从 1 开始递增(代表左端),num 从用户输入的 N 开始递减(代表右端)。每次循环打印 index 和 num,然后移动指针。循环应在 index 和 num 即将相遇或交叉之前停止,这样可以避免它们指向同一个数字时发生重复打印。循环结束后,根据 N 的奇偶性,可能还需要打印一个或两个剩余的中间数字。
优化后的代码:
# 获取用户输入的数字
user_input_num = int(input('Please type in a number:'))
# 初始化左指针和右指针
left_ptr = 1
right_ptr = user_input_num
# 主循环:交替打印左右端点
# 循环条件 left_ptr < (right_ptr - 1) 确保在左右指针即将相遇或交叉前停止
# 例如,当N=5时,left_ptr=2, right_ptr=4,条件为 2 < (4-1) -> 2 < 3 (真)
# 下一轮 left_ptr=3, right_ptr=3,条件为 3 < (3-1) -> 3 < 2 (假),循环停止
while left_ptr < (right_ptr - 1):
print(left_ptr) # 打印左端点
print(right_ptr) # 打印右端点
left_ptr += 1 # 左指针向右移动
right_ptr -= 1 # 右指针向左移动
# 处理剩余的中间元素
# 循环结束后,根据 user_input_num 的奇偶性,会剩下不同的情况:
# 1. 如果 user_input_num 是奇数 (例如 N=5):
# 循环结束后 left_ptr 和 right_ptr 会指向同一个中间数 (例如都是3)。
# 此时只需打印 right_ptr (或 left_ptr) 一次即可。
# 2. 如果 user_input_num 是偶数 (例如 N=6):
# 循环结束后 left_ptr 和 right_ptr 会指向两个相邻的中间数 (例如 left_ptr=3, right_ptr=4)。
# 此时需要分别打印 right_ptr 和 left_ptr。
# 打印当前 right_ptr 指向的数
# 对于 N=5,这里打印 3
# 对于 N=6,这里打印 4
print(right_ptr)
# 如果 left_ptr 仍然小于 right_ptr,说明还剩一个 left_ptr 指向的数需要打印
# 对于 N=5,此时 left_ptr=3, right_ptr=3,条件 3 < 3 为假,不执行
# 对于 N=6,此时 left_ptr=3, right_ptr=4,条件 3 < 4 为真,打印 3
if left_ptr < right_ptr:
print(left_ptr)通过这种方式,代码能够正确处理 N 为奇数和偶数的所有情况,确保所有数字被打印且不重复。
通过理解和应用这种双指针与精确循环条件结合的策略,可以高效且准确地解决区间两端交替打印数字的问题。
以上就是Python编程教程:实现区间两端交替打印数字的详细内容,更多请关注php中文网其它相关文章!
Copyright 2014-2025 https://www.php.cn/ All Rights Reserved | php.cn | 湘ICP备2023035733号