在循环内部为上层循环变量赋值,在循环结束后娶不到值
'A = 0
for i in os.listdir(f'D:/stock/minute/'):
A += 1
print(i)
if not os.path.exists(f'D:/stock/minute1/{i}'):
# 文件夹不存在,创建文件夹
os.makedirs(f'D:/stock/minute1/{i}')
new_data = []
for s in os.listdir(f'D:/stock/minute/{i}'):
with open(f'D:/stock/minute/{i}/{s}', 'r', encoding=de) as shz:
shz1 = csv.reader(shz)
data = list(shz1)
del data
sum_v, sum_amo, h, l, c, o = 0, 0, 0, 10000, 0, 0
a, aa, aaa = 0, 0, 0
for index, d in enumerate(data):
if d <= '10:30':
sum_v += float(d)
sum_amo += float(d)
if float(d) > h:
h = float(d)
if float(d) < l:
l = float(d)
if d == '10:30':
c, o = d, data
temporary = , '10:30', o, c, h, l, sum_amo, sum_v]
new_data.append(temporary)
sum_v, sum_amo, h, l, c, o = 0, 0, 0, 10000, 0, 0
if '10:30' < d <= '11:30':
if a == 0:
o = d
a = 1
sum_v += float(d)
sum_amo += float(d)
if float(d) > h:
h = float(d)
if float(d) < l:
l = float(d)
if d == '11:30' or (index + 1 < len(data) and d <= '11:30' and data > '11:30'):
c = d
temporary = , '11:30', o, c, h, l, sum_amo, sum_v]
new_data.append(temporary)
sum_v, sum_amo, h, l, c, o = 0, 0, 0, 10000, 0, 0
if '11:30' < d <= '14:00':
if aa == 0:
o = d
aa = 1
sum_v += float(d)
sum_amo += float(d)
if float(d) > h:
h = float(d)
if float(d) < l:
l = float(d)
if d == '14:00' or (index + 1 < len(data) and d <= '14:00' and data > '14:00'):
c = d
temporary = , '14:00', o, c, h, l, sum_amo, sum_v]
new_data.append(temporary)
sum_v, sum_amo, h, l, c, o = 0, 0, 0, 10000, 0, 0
if d > '14:00':
if aaa == 0:
o = d # 我在这里为最后一次的o赋值了
print(o, aaa) # 这里的打印结果为 6.85 0
aaa = 1
sum_v += float(d)
sum_amo += float(d)
if float(d) > h:
h = float(d)
if float(d) < l:
l = float(d)
c = data[-1]
# print(o)#然而在这里取o的值时却是0,而不是6.85,这是怎么回事
temporary = , '15:00', o, c, h, l, sum_amo, sum_v]
new_data.append(temporary)
print(new_data)
break
break
' 根据描述,你的代码中有多个问题导致变量 o 的值在循环结束后不符合预期。以下是一些可能导致这个问题的原因和建议:
1. 变量作用域问题
在Python中,变量在其作用域内有效。若 o 被重新赋值而非在预期的范围内使用,可能会导致你在打印时看到的值与期望不同。
2. 缺乏必要的判断条件
确保逻辑中的判断条件都是正确的,特别是 if 语句中用于比较的条件。你的代码片段中有一些条件可能没有写完整或导致逻辑混乱。
3. 检查关键变量初始化和更新
确保每次循环开始前关键变量(如 o)被正确初始化。此外,检查 o 的更新逻辑,特别是在 if 条件发生变化时。
4. 修改并重构部分代码,提高可读性和调试能力
尝试简化代码的结构,减少嵌套层级,并添加调试信息来帮助确定变量的值以及何时更新。例如:
# 确保合理分配和清晰的逻辑
for index, d in enumerate(data):
if d > '14:00':
if aaa == 0:
o = d # 变量 o 在满足条件时被正确赋值
print(f"Inside loop: {o}, {aaa}")
aaa = 1
5. 验证数据操作完整性
确认所有文件操作正常,没有数据缺失或读写错误,这可能影响计算和变量更新。
通过仔细排查这些方面的问题,可以更好地理解为什么变量 o 在循环结束后没有获得预期的值。请调整代码,重新运行并检查结果,确保每一步的逻辑都正确执行。
以上回复来自 FishC AI 小助理,如未能正确解答您的问题,请继续追问。
页:
[1]