2014-10-30 5 views
-1

Я пытаюсь создать код, который откроет файл со списком чисел в нем, а затем возьмет эти числа и сгладит их столько раз, сколько захочет пользователь. У меня есть открытие и чтение файла, но он не будет транспонировать числа. В этом формате он дает эту ошибку: TypeError: неподдерживаемый тип операндов для /: 'str' и 'float'. Мне также нужно выяснить, как сделать его транспонированием чисел, сколько раз пользователь запрашивает его. Список номеров, которые я использовал в моем .txt-файле, - [3, 8, 5, 7, 1].Как сгладить числа из файла столько раз, сколько требуется в Python 2.7?

Вот именно то, что я пытаюсь заставить его сделать:

Попросите пользователя для файла

Читать все данные с плавающей точкой из файла в список

Попросите пользователя, сколько сглаживание проходит, чтобы сделать

Показать сглаженный результат с двумя знаками после запятой

Используйте функции в соответствующих случаях

Алгоритм: Никогда не меняйте первое или последнее значения Compute новых значений для всех других значений путем усреднения значения с двумя своих соседями

Вот то, что я до сих пор:

filename = raw_input('What is the filename?: ') 
inFile = open(filename) 
data = inFile.read() 
print data 
data2 = data[:] 
print data2 
data2[1]=(data[0]+data[1]+data[2])/3.0 
print data2 
data2[2]=(data[1]+data[2]+data[3])/3.0 
print data2 
data2[3]=(data[2]+data[3]+data[4])/3.0 
print data2 

ответ

0

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

data2 = data[:] 
for i in range(1, len(data)-1): 
    data2[i] = sum(data[i-1:i+2])/3.0 
data = data2 

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

smooth_steps = int(raw_input("How many times do you want to smooth the data?")) 
for _ in range(smooth_steps): 
    # code from above goes here 

Обратите внимание, что мой код выше, предполагает, что вы прочитали числовые значения в data список. Однако код, который вы показали, не делает этого. Вы просто используете data = inFile.read(), что означает, что data - это строка. Вам нужно фактически проанализировать ваш файл, чтобы получить список чисел.

В вашем непосредственном примере, где файл содержит литеральный список форматированных списков на языке Python, вы можете использовать eval (или ast.literal_eval, если хотите немного поработать). Но если эти данные будут использоваться любой другой программой, вам, вероятно, понадобится более широко поддерживаемый формат, такой как CSV, JSON или YAML (все из которых имеют парсеры, доступные на Python).

+0

Цикл действительно помог, я просто не уверен, что вы имеете в виду, анализируя мой файл и как это сделать. И где бы я поставил eval или ast.literal_eval? (Не нравится, что в этом нет определения для аста). Я новичок в этом. – user45

+0

Я также получаю эту ошибку при запуске: data2 [i] = sum (data [i-1: i + 2])/3.0 ТипError: неподдерживаемый тип операндов для +: 'int' и 'str' – user45

+0

Эта ошибка возникает из-за отсутствия синтаксического анализа. Если ваш файл содержит текст '[3, 8, 5, 7, 1]', замените 'data = inFile.read()' на 'data = eval (inFile.read())'. Или импортируйте модуль 'ast' и используйте' ast.literal_eval' вместо встроенной функции 'eval' (что может привести к ошибкам, если ваш файл содержит вредоносные данные). – Blckknght