我正在尝试创建一个代码,该代码将打开一个包含数字列表的文件,然后根据用户的需要将这些数字和数据平滑。我打开并读取文件,但它不会转换数字。在这种格式中它给出了这个错误:TypeError:/:'str'和'float'的不支持的操作数类型。我还需要弄清楚如何使数字转换用户要求的次数。我在.txt文件中使用的数字列表是[3,8,5,7,1]。
这正是我想要做的事情:
向用户询问文件名
将所有浮点数据从文件读入列表
询问用户要制作多少平滑通道
显示带有两位小数的平滑结果
在适当的地方使用功能
算法: 切勿更改第一个或最后一个值 通过将值与其两个邻居进行平均来计算所有其他值的新值
这是我到目前为止所做的:
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 :(得分:1)
您几乎肯定不希望手动索引列表项。相反,使用循环:
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中提供了解析器)。