2013-03-19 3 views
0

Как написать функцию Python, которая задала массив чисел A, возвращает массив B, который имеет элементы A в обратном порядке? БЕЗ с использованием обратной функции в python и вместо этого использовать цикл for?Завершение одномерного массива - PYTHON

Это то, что у меня есть до сих пор, а затем я вызываю функцию main() в оболочке, и это дает мне некоторые ошибки, а один из них - «B» не определен.

def ReverseArray(A): 
    n = len(A) 
    for i in range(0, n-1): 
     B[n-i-1] = A[i] 
    return (B) 

def main(): 
    A = [13, 21, 15, 38, 49] # Test case for ReverseArray function 
    B = ReverseArray(A) 
    print(B) 

Где я ошибся?

+0

«некоторые ошибки» ... – zch

+0

Это то, что он дал мне Traceback (самый последний вызов последнего) : Файл "", строка 1, в основной() Файл "C: \ .....", строка 12, в главном B = ReverseArray (A) Файл «C: \ ... .. ", строка 7, в ReverseArray B [ni-1] = A [i] NameError: глобальное имя 'B' не определено – cah

ответ

2

Ваша первая проблема, как вы говорите, в том, что вы не определили B.

Очевидным ответом является определение B. Какова стартовая ценность, когда вы накапливаете list? Предположительно любой пустой list, правильно? Итак:

def ReverseArray(A): 
    B = [] 
    n = len(A) 
    for i in range(0, n-1): 
     B[n-i-1] = A[i] 
    return (B) 

Следующая проблема, которую вы будете работать в это IndexError из этого B[n-i-1] = A[i]. Это потому, что вы пытаетесь изменить позиции B на месте, поэтому для начала необходимо иметь n. Другими словами, вы хотите что-то с таким количеством элементов, как A. Как насчет копии A?

B = list(A) 

Или, если вы понимаете, списочные, это могло бы быть лучше:

B = [None for _ in A] 

Наконец, ваш алгоритм не на самом деле правильно. Например, с учетом вашего A, n будет 5, поэтому range(0, n-1) будет [0, 1, 2, 3]. Это означает, что вы никогда не устанавливали B[0] на что угодно.

Вы, возможно, не понял, что функция Python range возвращает диапазон, исключает параметр stop. Просто range(0, n) (или, проще говоря, range(n)) - это то, что вы хотите.

+1

Вы прочитали b eyond первый пример кода, в ту часть, где говорится «Следующая проблема, с которой вы столкнетесь»? Потому что он также говорит вам, как решить эту проблему. – abarnert

+0

да, простите, я этого не видел, но теперь я получил это благодаря! – cah

2

Вы можете перебрать список назад, как это, затем добавить каждый элемент в список B.

def ReverseArray(A): 
    B = list() 
    for i in xrange(len(A)-1,-1,-1): 
     B.append(A[i]) 
    return B 
+1

На боковой ноте вы можете отменить список с помощью myList [:: - 1]. –

+1

Я думаю, что это лучшее решение, чем OP, а также то, что, вероятно, примет профессор. Но на самом деле он не отвечает на его вопрос: «Почему мой код не работает».(Как говорится, SO на самом деле не предназначено для вопросов «почему мой код не работает», так что это может не быть проблемой.) – abarnert

+0

Я вижу это. Его код не работает, потому что он не объявил B в функции. И даже если он создал экземпляр пустого списка, он пытается получить доступ к элементам B с помощью 'B [ni-1]', что невозможно, потому что ничего нет в B :) –

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