Индекс списка Python не найден в списке загрузки из текстового файла

Назначение состояло в том, чтобы заставить пользователя ввести 4 номера, затем сохранить их в текстовом файле, открыть этот текстовый файл, показать 4 числа в разных строках, затем получить среднее значение этих чисел и отобразить его пользователю. Вот мой код:

__author__ = 'Luca Sorrentino' numbers = open("Numbers", 'r+') numbers.truncate() #OPENS THE FILE AND DELETES THE PREVIOUS CONTENT # Otherwise it prints out all the inputs into the file ever numbers = open("Numbers", 'a') #Opens the file so that it can be added to liist = list() #Creates a list called liist def entry(): #Defines a function called entry, to enable the user to enter numbers try: inputt = float(input("Please enter a number")) #Stores the users input as a float in a variable liist.append(inputt) #Appends the input into liist except ValueError: #Error catching that loops until input is correct print("Please try again. Ensure your input is a valid number in numerical form") entry() #Runs entry function again to enable the user to retry. x = 0 while x < 4: # While loop so that the program collects 4 numbers entry() x = x + 1 for inputt in liist: numbers.write("%s\n" % inputt) #Writes liist into the text file numbers.close() #Closes the file numbers = open("Numbers", 'r+') output = (numbers.readlines()) my_list = list() my_list.append(output) print(my_list) print(my_list[1]) 

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

У вас будут две основные проблемы.

Во-первых, .append() предназначен для добавления отдельного элемента в список, а не для добавления одного списка в другой. Поскольку вы использовали .append() у вас появился список, содержащий один элемент, и этот элемент сам представляет собой список … не то, что вы хотите, и объяснение для сообщения об ошибке. Для объединения одного списка в другой .extend() или += будет работать, но вы должны спросить себя, действительно ли это необходимо в вашем случае.

Во-вторых, ваши элементы списка являются строками, и вы хотите работать с ними как с числами. float() преобразует их для вас.

В общем, вы должны исследовать концепцию «понимания списков». Они делают такие операции очень удобными. В следующем примере создается новый список, членами которого являются соответственно float() версии версии вашего .readlines() :

 my_list = [float(x) for x in output] 

Возможность добавления условных выражений в понимание списка также является реальной сложностью. Например, если вы хотите пропустить любые пробелы / пробелы, которые прокрались в ваш файл:

 my_list = [float(x) for x in output if len(x.strip())] 

В вашем списке (my_list) есть только 1 элемент – список с нужными вами элементами.

Это можно увидеть, если вы попытаетесь распечатать (len (my_list)), поэтому ваша печать (my_list [1]) выходит за пределы диапазона, потому что элемент с индексом = 1 не существует.

Когда вы создаете пустой список и добавляете вывод, вы добавляете в список один элемент, который является значением переменной для значения.

Чтобы получить то, что вы хотите, просто сделайте

 my_list = list(output) 

Вы можете немного изменить конец своей программы, и она будет работать:

 output = numbers.readlines() # this line uses a list comprehension to make # a new list without new lines output = [i.strip() for i in output] for num in output: print(num) 1.0 2.0 3.0 4.0 print sum(float(i) for i in output) 10