один и тот же код дает различный вывод при использовании в основной функции и в определенной пользователем функции, даже если ввод одинаковый - PullRequest
1 голос
/ 19 июня 2019

Итак, в вопросе говорится, что мы должны отсортировать массив, используя алгоритм сортировки вставками, и печатать полученный массив после каждой итерации с числами, разделенными пробелом. Пожалуйста, помогите мне понять, в чем проблема. почему выдает ошибку?

input: 1 4 3 5 6 2
def insertionSort2(n, arr):
    for i in range(1,n):
        small=int(arr[i])
        j=i-1
        while j>=0 and int(arr[j])>small:
            arr[j+1]=arr[j]
            j-=1
        arr[j+1]=small
        print(' '.join(arr))
        print('\r')
if __name__ == '__main__':
    n = int(input())

    arr = input().rstrip().split()
    print(' '.join(arr))

    insertionSort2(n, arr)

когда я печатал массив в основной функции, то вывод был: 1 4 3 5 6 2 но, когда я пытался напечатать массив в функции inserttionSort2 Произошла ошибка во время выполнения.

File "Solution.py", line 30, in <module>
    insertionSort2(n, arr)
  File "Solution.py", line 19, in insertionSort2
    print(' '.join(arr))

TypeError: элемент последовательности 1: ожидаемый экземпляр str, int найдено

1 Ответ

1 голос
/ 19 июня 2019

arr - это список строк в начале insertionSort. Затем вы берете элемент и конвертируете его в int в строке 3: small=int(arr[i]).

Таким образом, small теперь является целым числом и затем назначается в список arr[j+1]=small.

Что теперь означает, что arr содержит смесь строк и целых чисел. Метод join ожидает все строки.

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...