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