2013-10-05 3 views
0
def selectionSort(lst): 
    with lst as f: 
     nums = [int(line) for line in f] 
    for i in range(len(nums) - 1, 0, -1): 
     maxPos = 0 
     for position in range(1, i + 1): 
      if nums[position] > nums[maxPos]: 
       maxPos = position 

     value = nums[i] 
     nums[i] = nums[maxPos] 
     nums[maxPos] = value 

def main(): 
    textFileName = input("Enter the Filename: ") 
    lst = open(textFileName) 
    selectionSort(lst) 
    print(lst) 

main() 

Хорошо, благодаря hcwhsa за то, что он помог мне с файлом чтения и поставил их все в одну строку.Python, сортировка числа error

Когда я запускаю этот код, я получаю эту ошибку:

<_io.TextIOWrapper name='numbers.txt' mode='r' encoding='UTF-8'> 

текстовый файл:

67 
7 
2 
34 
42 

Любая помощь? Благодарю.

ответ

3

Вы должны вернуть список из функции и присвоить ее переменной, а затем распечатать ее.

def selectionSort(lst): 
    with lst as f: 
     nums = [int(line) for line in f] 
    ... 
    ... 
    return nums 

sorted_lst = selectionSort(lst) 
print(sorted_lst) 

Ваш код не работает, потому что вместо передачи списка вы передали объект файла функции. Эта версия кода передает список в функцию, так что возвращаемое значение не требуется, поскольку вы изменяете тот же список объектов:

def selectionSort(nums): 

    for i in range(len(nums) - 1, 0, -1): 
     maxPos = 0 
     for position in range(1, i + 1): 
      if nums[position] > nums[maxPos]: 
       maxPos = position 

     value = nums[i] 
     nums[i] = nums[maxPos] 
     nums[maxPos] = value 


def main(): 
    textFileName = input("Enter the Filename: ") 
    with open(textFileName) as f: 
     lst = [int(line) for line in f] 
    selectionSort(lst) 
    print(lst) 

main() 
+0

я получил сейчас я изменил последний для печати (НУМС) вместо печать (lst). Спасибо, я не понял, что это был объект, поэтому читает это. – user1552400

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