2013-10-08 2 views
-1

이 코드를 수정하도록 도와주십시오. 정수 배열을 역순으로 바꾸는 함수입니다 : [1,2,3,4,5] -> [5,4,3,2,1]. 오류 :역 배열 코드 함수 오류

builtins.TypeError: unsupported operand type(s) for /: 'list' and 'int' 

제게 해결책을주십시오.

halfsize = size // 2 

이것은 결과가 정수 보장하기 위해 바닥 부문 (//) 연산자를 사용 : 감사

def reverse(array): 
    ''' 
    [1,2,3,4,5] -> [5,4,3,2,1] 
    This method returns a reversed integer array. 
    ''' 
    size = len(array) 
    halfsize = array/2 
    size -= 1 
    r = array[size] 
    temp = None 
    for s in range(0, halfsize): 
     temp = arrayOne[s] 
     array[s] = r 
     array[size] = temp 
     size -= 1 
     r=arrayOne[size] 
    return arrayOne 


a = reverse ([1, 4, 3, 4, 5]) 
+0

오류의 원인을 알려 주시는 것을 잊었습니까? –

+0

내장 '반전'의 문제점은 무엇입니까? – SethMMorton

+0

'arrayOne'은 무엇이되어야 하는가? –

답변

2

당신은하지 목록, 길이를 분할 할 필요가있다.

다음 문제는 여러 위치에서 arrayOne을 참조하지만 인수를 단지 array으로 명명했습니다. 해당 참조를 수정하면 함수가 작동합니다.

>>> def reverse(array): 
... ''' 
... [1,2,3,4,5] -> [5,4,3,2,1] 
... This method returns a reversed integer array. 
... ''' 
... size = len(array) 
... halfsize = size // 2 
... size -= 1 
... r = array[size] 
... temp = None 
... for s in range(0, halfsize): 
...  temp = array[s] 
...  array[s] = r 
...  array[size] = temp 
...  size -= 1 
...  r=array[size] 
... return array 
... 
>>> a = reverse ([1, 4, 3, 4, 5]) 
>>> a 
[5, 4, 3, 4, 1] 

함수가 다소 단순화 될 수 있습니다. 파이썬은 할 수 있습니다 당신은 당신이 현재 위치 값을 교환 temp 변수를 필요가 없습니다

def reverse(array): 
    '''[1,2,3,4,5] -> [5,4,3,2,1] 

    This method returns a reversed integer array. 

    ''' 
    size = len(array) 
    halfsize = size // 2 
    size -= 1 
    for s in range(halfsize): 
     array[s], array[size] = array[size], array[s] 
     size -= 1 
    return array 

은 또한이 장소의 목록 을 반전되어 있습니다; 여기에 결과 목록 객체를 반환 할 필요가 없습니다.

>>> a = [4, 6, 42, 1, -5] 
>>> reverse(a) 
[-5, 1, 42, 6, 4] 
>>> a 
[-5, 1, 42, 6, 4] 
+0

builtins.TypeError : 'float'객체는 정수로 해석 될 수 없습니다. – user2860356

+0

@ user2860356 : 오른쪽 그렇다면 파이썬 3인가? –

+0

@ user2860356 :'size/2' 대신'size // 2'를 사용하십시오. 파이썬 3과 모든 최신 버전의 파이썬 2에서 작동합니다. – abarnert

0

배열이기 때문에 예외가 발생합니다. 목록입니다. 이 줄에 :

halfsize = array/2 

목록을 int로 나눕니다.

halfsize = size/2 

대신에 사용해야합니다. 하지만 arrayOne의 출처를 모르므로 문제가 무엇인지 말할 수는 없습니다. 재귀를 사용

그러나, 내가 여기에 대체 솔루션을 게시합니다은 :

def reverse(array, answer=None): 
    if len(array) == 0: 
     return answer 
    if not answer: 
     answer = [] 
    answer.append(array.pop()) 
    return reverse(array, answer) 

재귀는 당신의 친구 :) 그것을 사용하려고합니다. 당신이 학습 목적을 위해이 일을하지 않으면

그리고는, 목록

>>>> a = [1,2,3,4,5] 
>>>> a = a.reverse() 

그리고,에 대한 역방향 내장 함수를 사용하는 그랜드 피날레, 그것을 할 수있는 파이썬 방법으로 :

>>>> a = [1,2,3,4] 
>>>> a[::-1] 
    [4,3,2,1] 
1

간단한 방법이 있습니다.

def reverseArray(array): 
    queue = [] 
    for element in array: 
     queue.insert(0, element) 
    return queue 

예를 들어 [2,3,4,5]를 입력하면 [5,4,3,2]가 반환됩니다.

반전을 위해 queue 데이터 구조 (데이터를 삽입하려면 삽입 사용)를 사용하고 큐의 데이터를 읽습니다. 삽입은 배열의 시작 부분에 데이터를 삽입하는 데 사용됩니다.