如何编写程序打印出 1 和给定 number 之间的所有正整数,在范围的两端交替?

Posted

技术标签:

【中文标题】如何编写程序打印出 1 和给定 number 之间的所有正整数,在范围的两端交替?【英文标题】:How to write the program that prints out all positive integers between 1 and given number , alternating between the two ends of the range? 【发布时间】:2021-12-16 11:41:13 【问题描述】:

程序应该如下工作:

Please type in a number: 5
1
5
2
4
3

我的代码没有做同样的事情。我认为应该有第二个循环,但我真的不明白我该怎么做。你能给我一个提示或建议来解决这个任务吗?谢谢。 我的代码如下所示:

num = int(input("Please type in a number:"))
n=0
while num>n:
    a = num%10
    num -= a
    num = num/10
    print(a)
    n = n + 1   
print(n)

【问题讨论】:

我试图理解这个问题,但我无法理解。你能解释一下输出逻辑吗? 我输入一个数字,比如说 6,我希望程序按特定顺序显示从 1 到 6 的所有整数:1 6 2 5 3 4 【参考方案1】:

这应该可行:

num = int(input("Please type in a number:"))
number_list = [i+1 for i in range(num)]

while number_list:
    print(number_list.pop(0))
    number_list.reverse()

【讨论】:

O(n^2) 因为.reverse() 谢谢!我是 python 的初学者并且坚持做这类任务。如何更改此代码以不同顺序显示序列,例如 2 1 4 3 5(垂直)。【参考方案2】:
x = flag = 1
for i in range(n-1, -1, -1):
    print(x)
    flag, x = -flag, x+flag*i

【讨论】:

很可爱,但是对于这个问题来说,挠头的程度似乎过分了。这感觉就像一个 perl 解决方案......【参考方案3】:

不是最节省空间的方式,但如果数量相对较少,一个简单的方法是构建一个列表,然后依次弹出任一端:

nums = list(range(1, int(input("Please type in a number:"))+1))
while nums:
    print(nums.pop(0))
    if nums:
        print(nums.pop())

【讨论】:

这么多列表重定位,为什么不直接使用负索引? 最小化要跟踪的状态量。对于线性时间/恒定空间解决方案,我会使用 rangezip_longest 但这对于初学者问题来说感觉超出了范围:P【参考方案4】:

似乎最节省内存的方法是使用itertools.zip_longestranges:

from itertools import zip_longest

n = int(input("Please type in a number: "))
for lower, upper in zip_longest(range(1, n // 2 + 1), range(n, n // 2, -1)):
    if lower:
        print(lower)
    print(upper)

【讨论】:

【参考方案5】:

这是一个可爱的方法:

l = list(range(1,6))
def index_generator():
    while True:
        yield 0
        yield -1

index = index_generator()
result = []
while l:
    result.append(l.pop(next(index)))

【讨论】:

以上是关于如何编写程序打印出 1 和给定 number 之间的所有正整数,在范围的两端交替?的主要内容,如果未能解决你的问题,请参考以下文章

如何在 MySQL 中的两个值之间编写循环?

如何打印出给定电话号码可能代表的所有可能的字母组合?

编写自定义函数,求水仙花数,并输出

在给定行号的文本文件中打印行

Python Collatz 序列和输入验证

Unix进程之间的连接,如何获取给定用户名的全名和根目录