鱼C论坛

 找回密码
 立即注册
查看: 43|回复: 1

[已解决]在循环内部为上层循环变量赋值,在循环结束后娶不到值

[复制链接]
发表于 2025-1-27 10:41:55 | 显示全部楼层 |阅读模式

马上注册,结交更多好友,享用更多功能^_^

您需要 登录 才可以下载或查看,没有账号?立即注册

x
'
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[0]
        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[1] <= '10:30':
                sum_v += float(d[3])
                sum_amo += float(d[4])
                if float(d[2]) > h:
                    h = float(d[2])
                if float(d[2]) < l:
                    l = float(d[2])
            if d[1] == '10:30':
                c, o = d[2], data[0][2]
                temporary = [s[0:8], '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[1] <= '11:30':
                if a == 0:
                    o = d[2]
                    a = 1
                sum_v += float(d[3])
                sum_amo += float(d[4])
                if float(d[2]) > h:
                    h = float(d[2])
                if float(d[2]) < l:
                    l = float(d[2])
            if d[1] == '11:30' or (index + 1 < len(data) and d[1] <= '11:30' and data[index+1][1] > '11:30'):
                c = d[2]
                temporary = [s[0:8], '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[1] <= '14:00':
                if aa == 0:
                    o = d[2]
                    aa = 1
                sum_v += float(d[3])
                sum_amo += float(d[4])
                if float(d[2]) > h:
                    h = float(d[2])
                if float(d[2]) < l:
                    l = float(d[2])
            if d[1] == '14:00' or (index + 1 < len(data) and d[1] <= '14:00' and data[index+1][1] > '14:00'):
                c = d[2]
                temporary = [s[0:8], '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[1] > '14:00':
                if aaa == 0:
                    o = d[2]   # 我在这里为最后一次的o赋值了
                    print(o, aaa) # 这里的打印结果为 6.85 0
                    aaa = 1
                sum_v += float(d[3])
                sum_amo += float(d[4])
                if float(d[2]) > h:
                    h = float(d[2])
                if float(d[2]) < l:
                    l = float(d[2])

        c = data[-1][2]
        # print(o)  #然而在这里取o的值时却是0,而不是6.85,这是怎么回事
        temporary = [s[0:8], '15:00', o, c, h, l, sum_amo, sum_v]
        new_data.append(temporary)
        print(new_data)
        break
    break
'
最佳答案
2025-1-27 10:42:14
根据描述,你的代码中有多个问题导致变量 o 的值在循环结束后不符合预期。以下是一些可能导致这个问题的原因和建议:

1. 变量作用域问题
在Python中,变量在其作用域内有效。若 o 被重新赋值而非在预期的范围内使用,可能会导致你在打印时看到的值与期望不同。

2. 缺乏必要的判断条件
确保逻辑中的判断条件都是正确的,特别是 if 语句中用于比较的条件。你的代码片段中有一些条件可能没有写完整或导致逻辑混乱。

3. 检查关键变量初始化和更新
确保每次循环开始前关键变量(如 o)被正确初始化。此外,检查 o 的更新逻辑,特别是在 if 条件发生变化时。

4. 修改并重构部分代码,提高可读性和调试能力
尝试简化代码的结构,减少嵌套层级,并添加调试信息来帮助确定变量的值以及何时更新。例如:
[code]
# 确保合理分配和清晰的逻辑
for index, d in enumerate(data):
    if d > '14:00':
        if aaa == 0:
            o = d   # 变量 o 在满足条件时被正确赋值
            print(f"Inside loop: {o}, {aaa}") 
            aaa = 1
[/code]

5. 验证数据操作完整性
确认所有文件操作正常,没有数据缺失或读写错误,这可能影响计算和变量更新。

通过仔细排查这些方面的问题,可以更好地理解为什么变量 o 在循环结束后没有获得预期的值。请调整代码,重新运行并检查结果,确保每一步的逻辑都正确执行。

以上回复来自 FishC AI 小助理,如未能正确解答您的问题,请继续追问。
想知道小甲鱼最近在做啥?请访问 -> ilovefishc.com
回复

使用道具 举报

发表于 2025-1-27 10:42:14 | 显示全部楼层    本楼为最佳答案   
根据描述,你的代码中有多个问题导致变量 o 的值在循环结束后不符合预期。以下是一些可能导致这个问题的原因和建议:

1. 变量作用域问题
在Python中,变量在其作用域内有效。若 o 被重新赋值而非在预期的范围内使用,可能会导致你在打印时看到的值与期望不同。

2. 缺乏必要的判断条件
确保逻辑中的判断条件都是正确的,特别是 if 语句中用于比较的条件。你的代码片段中有一些条件可能没有写完整或导致逻辑混乱。

3. 检查关键变量初始化和更新
确保每次循环开始前关键变量(如 o)被正确初始化。此外,检查 o 的更新逻辑,特别是在 if 条件发生变化时。

4. 修改并重构部分代码,提高可读性和调试能力
尝试简化代码的结构,减少嵌套层级,并添加调试信息来帮助确定变量的值以及何时更新。例如:
[code]
# 确保合理分配和清晰的逻辑
for index, d in enumerate(data):
    if d > '14:00':
        if aaa == 0:
            o = d   # 变量 o 在满足条件时被正确赋值
            print(f"Inside loop: {o}, {aaa}") 
            aaa = 1
[/code]

5. 验证数据操作完整性
确认所有文件操作正常,没有数据缺失或读写错误,这可能影响计算和变量更新。

通过仔细排查这些方面的问题,可以更好地理解为什么变量 o 在循环结束后没有获得预期的值。请调整代码,重新运行并检查结果,确保每一步的逻辑都正确执行。

以上回复来自 FishC AI 小助理,如未能正确解答您的问题,请继续追问。
想知道小甲鱼最近在做啥?请访问 -> ilovefishc.com
回复 支持 反对

使用道具 举报

您需要登录后才可以回帖 登录 | 立即注册

本版积分规则

小黑屋|手机版|Archiver|鱼C工作室 ( 粤ICP备18085999号-1 | 粤公网安备 44051102000585号)

GMT+8, 2025-2-6 01:55

Powered by Discuz! X3.4

© 2001-2023 Discuz! Team.

快速回复 返回顶部 返回列表