# FinancePredict.py defparseCSV(filename): dataNames, data = [], [] f = open(filename, 'r', encoding='utf-8') for line in f: splitedLine = line.strip().split(',') if'指标'in splitedLine[0]: years = [int(x[:-1]) for x in splitedLine[1:]] else: dataNames.append('{:10}'.format(splitedLine[0])) data.append([float(x) for x in splitedLine[1:]]) f.close() return years, dataNames, data
defmeans(data): returnsum(data) / len(data)
deflinearRegression(xlist, ylist): xmeans, ymeans = means(xlist), means(ylist) bNumerator = - len(xlist) * xmeans * ymeans bDenominator = - len(xlist) * xmeans ** 2 for x, y inzip(xlist, ylist): bNumerator += x * y bDenominator += x ** 2 b = bNumerator / bDenominator a = ymeans - b * xmeans return a, b defcalNewData(newyears, a, b): return [(a + b * x) for x in newyears]
defshowResults(years, dataNames, newDatas): print('{:^60}'.format('国家财政收支线性估计')) header = '指标 ' for year in years: header += '{:10}'.format(year) print(header) for name, lineData inzip(dataNames, newDatas): line = name for data in lineData: line += '{:>10.1f}'.format(data) print(line)
defmain(): newyears = [x+2010for x inrange(7)] newDatas = [] years, dataNames, datas = parseCSV('finance.csv') for data in datas: a, b = linearRegression(years, data) newDatas.append(calNewData(newyears, a, b)) showResults(newyears, dataNames, newDatas)
main()
---------------------------------------------------------------------------
UnicodeDecodeError Traceback (most recent call last)
<ipython-input-39-f45289a2f30c> in <module>()
50 showResults(newyears, dataNames, newDatas)
51
---> 52 main()
<ipython-input-39-f45289a2f30c> in main()
44 newyears = [x+2010 for x in range(7)]
45 newDatas = []
---> 46 years, dataNames, datas = parseCSV('finance.csv')
47 for data in datas:
48 a, b = linearRegression(years, data)
<ipython-input-39-f45289a2f30c> in parseCSV(filename)
3 dataNames, data = [], []
4 f = open(filename, 'r', encoding='utf-8')
----> 5 for line in f:
6 splitedLine = line.strip().split(',')
7 if '指标' in splitedLine[0]:
d:\Anaconda3\lib\codecs.py in decode(self, input, final)
320 # decode input (taking the buffer into account)
321 data = self.buffer + input
--> 322 (result, consumed) = self._buffer_decode(data, self.errors, final)
323 # keep undecoded input until the next call
324 self.buffer = data[consumed:]
UnicodeDecodeError: 'utf-8' codec can't decode byte 0xb1 in position 2: invalid start byte
defparseCSV(filename): """解析CSV文件,返回年份、数据名称和数据""" dataNames, data = [], [] try: withopen(filename, 'r', encoding='utf-8') as f: for line in f: splitedLine = line.strip().split(',') ifnot splitedLine: # 跳过空行 continue
if'指标'in splitedLine[0]: # 提取年份,处理可能的格式问题 years = [] for x in splitedLine[1:]: try: # 移除年份中的非数字字符(如"年"字) year_str = ''.join(filter(str.isdigit, x)) if year_str: years.append(int(year_str)) except (ValueError, IndexError): continue else: dataNames.append(splitedLine[0].strip()) # 保留原始名称 # 转换数据,处理可能的空值或格式错误 row_data = [] for x in splitedLine[1:]: try: row_data.append(float(x.strip())) except (ValueError, IndexError): row_data.append(0.0) # 或根据需求处理 data.append(row_data) except FileNotFoundError: print(f"错误:找不到文件 {filename}") return [], [], [] except Exception as e: print(f"解析文件时出错: {e}") return [], [], []
for data in datas: try: a, b = linearRegression(years, data) newDatas.append(calNewData(newyears, a, b)) except Exception as e: print(f"计算回归时出错: {e}") newDatas.append([0] * len(newyears))
showResults(newyears, dataNames, newDatas)
if __name__ == "__main__": main()
解析文件时出错: 'utf-8' codec can't decode byte 0xb1 in position 2: invalid start byte
数据加载失败,请检查文件路径和格式
defgetInputs(): # 使用 float() 替代 eval() 更安全 a = float(input("请输入选手A的能力值(0-1): ")) b = float(input("请输入选手B的能力值(0-1): ")) n = int(input("模拟比赛的场次: ")) return a, b, n
import time t = time.localtime(now) time.mktime(t) time.ctime(time.mktime(t))
---------------------------------------------------------------------------
NameError Traceback (most recent call last)
<ipython-input-27-218e30bd2a23> in <module>()
1 import time
----> 2 t = time.localtime(now)
3 time.mktime(t)
4 time.ctime(time.mktime(t))
NameError: name 'now' is not defined