【问题标题】:while for loop combination can't end up while loopwhile for 循环组合不能结束 while 循环
【发布时间】:2020-09-21 12:17:23
【问题描述】:

我正在开发一个脚本来检查数据框的列的总和是否在一定间隔内超过三。

loc_number = 10 # start loc image number with 10
k = 2
while k < 3: 
    for i in range(0, int(len(target_df.index)/loc_number), loc_number):
        print(range(0, int(len(target_df.index)/loc_number), loc_number))
        print(loc_number, i)
        loc_target_df = target_df.loc[i: i+loc_number].sum(skipna=True, axis=0)
        print(loc_target_df)
        if any(x < 3 for x in loc_target_df):
            loc_number += 1
            print('heloo')
            break
        else:
            print('here')
            pass
    print('probably')
    continue

好像一开始,它转到'if'并打印出'heloo'一段时间,这意味着某个列的值的总和不超过3。好的。这就是我想要的。

但是,当它转到else时,这意味着cloumn的总和超过3,它应该转到下一个'for循环'而不是'while'。但它一次又一次地进入while循环,所以打印出来是这样的:

here
probablay
range(0, 14, 322)
322 0
10.000000     272
26.400000     210
31.680000     106
38.016000     113
45.619200     215
54.743040     146
65.691648     224
78.829978     255
94.595973     321
113.515168    308
136.218201    356
163.461842    270
196.154210    190
235.385052     97
282.462062     47
338.954475     32
406.745370      6
488.094443      3
dtype: int64
here
probablay
range(0, 14, 322)
322 0
10.000000     272
26.400000     210
31.680000     106
38.016000     113
45.619200     215
54.743040     146
65.691648     224
78.829978     255
94.595973     321
113.515168    308
136.218201    356
163.461842    270
196.154210    190
235.385052     97
282.462062     47
338.954475     32
406.745370      6
488.094443      3
dtype: int64
here
probablay
range(0, 14, 322)
322 0
10.000000     272
26.400000     210
31.680000     106
38.016000     113
45.619200     215
54.743040     146
65.691648     224
78.829978     255
94.595973     321
113.515168    308
136.218201    356
163.461842    270
196.154210    190
235.385052     97
282.462062     47
338.954475     32
406.745370      6
488.094443      3
dtype: int64
here
probablay
range(0, 14, 322)
322 0

我的 while for 循环有什么问题?以及如何使 for 循环工作?

【问题讨论】:

  • 您不会在 while 循环内的任何地方更改 k
  • 你想做什么
  • @Jasmijn 我想做的是在 else 条件下继续运行'for循环'。
  • 这已经发生了。你甚至不需要那里的pass,因为它实际上什么都不做。

标签: python for-loop while-loop break continue


【解决方案1】:

我将回答第一个问题,也许您可​​以提供更多详细信息,说明一旦通过else 后应该做什么。我感觉你希望代码做一些与现在完全不同的事情。

我希望它有所帮助,虽然它是一些文字。

我们来看看执行:

  • 你定义你的变量loc_number = 10, k = 2
  • 代码检查k &lt; 3 是否为真。
  • 您以loc_number = 10 为步长定义从0 到int(len(target_df.index)/loc_number) = 450 的范围,这是一个迭代器,将在第一次迭代中设置i = 0
  • 现在i = 0,代码打印10 0 并且您计算从行0 到行i + loc_number = 0 + 10 = 10 的数据帧的所有元素的总和。这会为每列返回一个值,然后再次打印。
  • 现在,您检查这些值是否小于 3 (x &lt; 3),如果是,则将loc_number 增加1 (loc_number = 11),打印@987654335 @ 并跳出 @9​​87654336@ 循环。
  • 代码打印'probably'
  • 作为k &lt; 3 == True,您使用range(0, 409, 11) 初始化一个新的for 循环(范围从014,以11 为步长),这将在第一次迭代中再次设置i = 0。李>
  • 现在i = 0,代码打印11 0 并且您计算从行0 到行i + loc_number = 0 + 11 = 11 的数据帧的所有元素的总和。这将为每一列返回一个值,如果其中任何一个小于 3,则会再次检查该值。
  • 在这种情况下,loc_number += 1 = 12,它会打印'heloo',然后您再次跳出 for 循环。代码打印'probably'
  • 重复此操作直到loc_number = 322。现在,range(0, 14, 322) 只返回0,所以for 循环只设置i = 0,并且你从第0 行求和到第322 行,代码打印322 0
  • 现在,没有任何值小于 3,因此 any(x &lt; 3) 的计算结果为 False 并调用 else。在那里,loc_number 保持不变,代码打印为 'here'
  • 由于for 循环在range() 迭代器中没有找到另一个元素,所以for 循环结束并且代码打印'probably'
  • 您现在初始化一个for 循环,range(0, 14, 322) 不变,它的执行方式与之前相同,没有小于 3 的值。
  • 这个圈子永远不会中断,因为while 声明总是正确的。

也许令人困惑的一点是,python 中的 for 的行为类似于其他语言中的 foreach

另外,我建议运行以下代码 sn-p 以更好地理解 range(start, stop, step) 函数,因为我认为它的行为也与您假设的不同:

for i in range(0, 5, 2):
    print(i)

for k in range(0, 5, 10):
    print(k)

【讨论】:

  • 啊,是的,我意识到范围有问题。我设置了比停止值更高的步长值。谢谢!!!
猜你喜欢
  • 2020-09-18
  • 2022-01-19
  • 2012-12-03
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 2019-11-10
  • 1970-01-01
  • 1970-01-01
相关资源
最近更新 更多