我似乎对循环感到困惑,无法修复,我期望生成一个数据集,该数据集在我的 Excel 工作表中向右和向下移动,但由于某种原因,每个新行都会在第一行末尾被截断,因此我的回溯错误,尝试读取上面的空单元格。我希望能有一些新的视角来看待它,因为我后来的代码依赖于这个正确的输出,希望它能够解决全局经济衰退,或者不会,但会让我成为一个快乐的人。 :)
import datetime
import random
import numpy as np
import math
import sys
from openpyxl import Workbook
from openpyxl.cell import get_column_letter
from openpyxl import load_workbook
from tempfile import TemporaryFile
from random import normalvariate, expovariate, seed, gammavariate
from math import sqrt
from itertools import groupby
for week in CurrentWeek:
Global_counter = week
i = Global_counter
j = 52 + i
if Global_counter == 1:
for index in range(i,j,1):
PlanWeek = index
EC_D = 500.0
if EC_D <= 0:
EC_D = EC_D *(-1)
EC_PlanData.append(EC_D)
d = sheet1.cell(row = Global_counter, column = PlanWeek)
d2 = sheet2.cell(row = Global_counter, column = PlanWeek)
d.value = EC_D
d2.value = EC_D
else:
for index in range(i,j,1):
PlanWeek = index
DiffWeek = PlanWeek - Global_counter
Sigma = 1
mu = 0
FC_VZ = random.normalvariate(mu, Sigma)
if FC_VZ > 0:
FC_VZ = 1
FC_Error = FC_Error+RemainingFCError
fcerr = sheet5.cell(row = Global_counter, column = PlanWeek)
fcerr.value = FC_Error
Prev_Week = Global_counter - 1
ECDD1 = sheet1.cell(row=Prev_Week, column=PlanWeek).value
ECDD2 = sheet1.cell(row=Prev_Week, column=PlanWeek).value
EC_D = ECDD1 - (ECDD2*FC_Error)
FC_Error = 0
ECPD = sheet1.cell(row = Global_counter, column=PlanWeek)
ECPD.value = EC_D
FCAD = sheet6.cell(row = Global_counter, column=PlanWeek)
FCAD.value = FC_Error
IEFD = sheet2.cell(row = Global_counter, column=PlanWeek)
IEFD.value = EC_D
EC_D = 0
wb.save('RHF_Loop_test4py.xlsx')
我的回溯是:
Traceback (most recent call last):
File "C:\Python27\Darren Learning Samples\codetesting2.py", line 85, in <module>
EC_D = ECDD1 - (ECDD2*FC_Error)
TypeError: unsupported operand type(s) for *: 'NoneType' and 'float'
最佳答案
我完全不明白你想计算什么,但这是上述异常的原因。
首先,在第一个 for
循环中,在 Excel 文件中获取一行(第 #1 行),并填充该行中从第 #1 列到第 #52 列的列(索引从0开始):
稍后,在第二个 for
循环中,当您读取这些值时,您会增加全局计数器,因此当引发异常时,您将尝试读取第 53 周的值。
解决方案:代替
ECDD1 = sheet1.cell(row=Prev_Week, column=PlanWeek).value
ECDD2 = sheet1.cell(row=Prev_Week, column=PlanWeek).value
EC_demand = ECDD1 - (ECDD2*FC_Error)
你可以
ECDD1 = sheet1.cell(row=Prev_Week, column=DiffWeek).value
ECDD2 = sheet1.cell(row=Prev_Week, column=DiffWeek).value
EC_demand = ECDD1 - (ECDD2*FC_Error)
您实际上创建了 DiffWeek
变量,但忘记使用它。
关于Python 循环困惑,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/12105516/