2015-09-24 4 views
0

Я новичок в python и пытаюсь запустить функцию, которая будет, учитывая одну переменную, отсчитывать до нуля, а затем до исходной переменной. вывод должен выглядеть примерно так:Подсчитайте, а затем вверх

>>> functionname(5) 
5, 4, 3, 2, 1, 0, 1, 2, 3, 4, 5 

до сих пор я написал следующий код, но это не подсчитывать весь путь к исходной переменной. Думаю, мне нужно каким-то образом сохранить переменную, чтобы позже обратиться к ней, но я понятия не имею, как это сделать, поскольку python автоматически изменяет n, когда функция продолжается.

def functionname(n): 
    n = orginal 
    while n > 0: 
     print n 
     n=n-1 
    print n 
    if n==0: 
     print n 
     n=n+1 

Я был бы очень признателен за некоторые указания, поскольку я, кажется, полностью застрял в данный момент.

ответ

0

Вам нужен второй цикл while, который начинается с 0 и возвращается к «оригиналу». Ты знаешь что-то еще о петлях? Это лучше для подсчета.

0

Ваш второй блок - if n == 0: (который вы знаете, поскольку цикл while завершен, когда n ударил 0); предположительно вы хотите while n <= 5.

Обратите внимание, что в Python есть более приятные способы выполнить одно и то же. Например, с помощью пару range с с itertools.chain для перебора каждого range один за другими позволяют упростить:

import itertools 

def functionname(n): 
    for i in itertools.chain(range(n, 0, -1), range(n+1)): 
     print i 
0

Вашей идея о том, original является правильной, однако вы используете оператор присваивания неправильного путь «раунда , Также линия if n==0 должна быть другой петлей (while или for, как предложено другими ответами), с учетом до original.

Так что я хотел бы начать с копирования значения из n в original, как это:

original = n 

Надежда, что помогает!

0

У вас там плохое форматирование. Не забудьте правильно отступить для функций и while и if инструкций.

Итак, сначала установите n до 5. Затем отсчитывать оттуда, пока не дойдете до 0 с while цикла:

while n != -1: 
    print n 
    n -= 1 

Затем после перерывов цикла, отсчитать назад снова и сброса n до 0:

n = 0 
while n < 6: 
    print n 
    n += 1 
2

Просто посчитайте от отрицательного до положительного и использовать математику:

def fn(n): 
    print ', '.join(str(abs(i)) for i in range(-n, n+1)) 
fn(5) 
# 5, 4, 3, 2, 1, 0, 1, 2, 3, 4, 5 

Указатели:

  • Если вы уже знаете диапазон, который вы хотите перебрать, это гораздо чище и более прямой, чтобы использовать for петлю вместо while.
  • Вы можете использовать функцию range для генерации числовых последовательностей.
  • Вы можете конвертировать простые for контуров в списки, как я делал выше.

"Простой" чистая реализация ваших требований будет выглядеть примерно так:

def fn(n): 
    for i in range(n, 0, -1): 
     print i, 
    for i in range(n + 1): 
     print i, 

Другие ноты:

  • range может рассчитывать назад слишком
  • Конечный аргумент range не входит в сам диапазон, поэтому второй цикл указывает n + 1 как предел (вместо n)
  • Добавление конечной запятой на ваш print позволяет добавить пространство на конце вместо разрыва строки.
1

Лично я хотел бы сделать что-то вроде ...

def count(n): 
    for x in range(n, -n, -1): 
     print(str(abs(x)) + ",") 

По предложению dlewin, вот список понимание того же самого ...

def count(n): 
    print(','.join(str(abs(x)) for x in range(n, -n, -1))) 
+0

Очень элегантный. Я думаю, что это может стоить постижение списка – dlewin

+1

@dlewin Хорошее предложение, спасибо. Я добавил один. – Basic

+0

действительно: еще лучше – dlewin

Смежные вопросы