Как написать программу , которая выводит все положительные целые числа от 1 до заданного числа, чередуясь между двумя концами диапазона?

#python #while-loop #flip

Вопрос:

Программа должна работать следующим образом:

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

Мой код не делает того же самого. Я думаю, что должен быть 2-й цикл, но я действительно не понимаю, как я могу это сделать. Не могли бы вы дать мне подсказку или совет для решения этой задачи. Спасибо. Мой код выглядит так:

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

Комментарии:

1. я пытаюсь понять этот вопрос, но не могу. Можете ли вы попытаться объяснить логику вывода?

2. Я ввожу число, скажем, 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()  

Комментарии:

1. O(n^2) из-за .reverse()

2. Спасибо! Я новичок в 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  

Комментарии:

1. Мило, но степень почесывания головы, необходимая для этой проблемы, кажется чрезмерной. Это похоже на решение 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())  

Комментарии:

1. так много перемещений списка, почему бы просто не использовать отрицательный индекс?

2. Минимизация количества состояний, за которыми нужно следить. Для решения с линейным временем/постоянным пространством я бы использовал range и zip_longest , но это кажется неуместным для вопроса новичка 😛

Ответ №4:

По-видимому, наиболее эффективным способом использования памяти было бы использование itertools.zip_longest и range :

 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)))