while for循环组合不能结束while循环
while for loop combination can't end up while loop
我正在开发一个脚本来检查数据框的列的总和是否在一定间隔内超过三。
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 时,这意味着该列的总和超过了三,它应该转到下一个 'for loop' 而不是 '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 循环工作?
我会回答第一个问题,也许你可以提供更多关于它通过 else
后应该做什么的细节。我有一种感觉,您希望代码做一些与现在完全不同的事情。
希望对您有所帮助,尽管文字有点多。
我们来看看执行情况:
- 你定义你的变量
loc_number = 10, k = 2
。
- 代码检查
k < 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
的所有元素的总和。这 returns 每列的值,再次打印。
- 现在,您检查这些值是否小于 3 (
x < 3
),如果是,则将 loc_number
增加 1
(loc_number = 11)
, 打印 'heloo'
并跳出 for
循环。
- 代码打印
'probably'
- 作为
k < 3 == True
,你用range(0, 409, 11)
初始化一个新的for循环(范围从0
到14
,步长为11
),这将在第一次迭代中再次设置 i = 0
。
- 现在
i = 0
,代码打印 11 0
并且您计算数据帧中从行 0
到行 i + loc_number = 0 + 11 = 11
的所有元素的总和。这 returns 每列的值,如果其中任何一个小于 3,将再次检查该值。
- 在这种情况下,
loc_number += 1 = 12
,它会打印 'heloo'
并且您再次跳出 for 循环。代码打印 'probably'
- 重复此操作直到
loc_number = 322
。现在,range(0, 14, 322)
仅 returns 0
,因此 for
循环仅设置 i = 0
,并且您从第 0 行到第 322 行求和,代码打印 322 0
- 现在,没有小于 3 的值,因此
any(x < 3)
的计算结果为 False
并调用 else
。那里,loc_number
保持不变,代码打印 'here'
.
- 由于
for
循环没有在 range()
迭代器中找到另一个元素,因此 for
循环结束并且代码打印 'probably'
.
- 您现在初始化一个
for
循环,range(0, 14, 322)
不变,其执行与之前相同,没有小于 3 的值。
- 这个圆圈永远不会中断,因为
while
语句总是正确的。
也许有一个混淆点是,python 中的 for
在其他语言中的行为类似于 foreach
。
此外,我建议 运行 下面的代码片段可以更好地理解 range(start, stop, step)
函数,因为我认为它的行为也与您假设的不同:
for i in range(0, 5, 2):
print(i)
for k in range(0, 5, 10):
print(k)
我正在开发一个脚本来检查数据框的列的总和是否在一定间隔内超过三。
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 时,这意味着该列的总和超过了三,它应该转到下一个 'for loop' 而不是 '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 循环工作?
我会回答第一个问题,也许你可以提供更多关于它通过 else
后应该做什么的细节。我有一种感觉,您希望代码做一些与现在完全不同的事情。
希望对您有所帮助,尽管文字有点多。
我们来看看执行情况:
- 你定义你的变量
loc_number = 10, k = 2
。 - 代码检查
k < 3
是否为真。 - 你在
loc_number = 10
的步骤中定义了一个从0到int(len(target_df.index)/loc_number) = 450
的范围,这是一个迭代器,它将在第一次迭代 中设置 - 现在
i = 0
,代码打印10 0
并且您计算数据帧中从行0
到行i + loc_number = 0 + 10 = 10
的所有元素的总和。这 returns 每列的值,再次打印。 - 现在,您检查这些值是否小于 3 (
x < 3
),如果是,则将loc_number
增加1
(loc_number = 11)
, 打印'heloo'
并跳出for
循环。 - 代码打印
'probably'
- 作为
k < 3 == True
,你用range(0, 409, 11)
初始化一个新的for循环(范围从0
到14
,步长为11
),这将在第一次迭代中再次设置i = 0
。 - 现在
i = 0
,代码打印11 0
并且您计算数据帧中从行0
到行i + loc_number = 0 + 11 = 11
的所有元素的总和。这 returns 每列的值,如果其中任何一个小于 3,将再次检查该值。 - 在这种情况下,
loc_number += 1 = 12
,它会打印'heloo'
并且您再次跳出 for 循环。代码打印'probably'
- 重复此操作直到
loc_number = 322
。现在,range(0, 14, 322)
仅 returns0
,因此for
循环仅设置i = 0
,并且您从第 0 行到第 322 行求和,代码打印322 0
- 现在,没有小于 3 的值,因此
any(x < 3)
的计算结果为False
并调用else
。那里,loc_number
保持不变,代码打印'here'
. - 由于
for
循环没有在range()
迭代器中找到另一个元素,因此for
循环结束并且代码打印'probably'
. - 您现在初始化一个
for
循环,range(0, 14, 322)
不变,其执行与之前相同,没有小于 3 的值。 - 这个圆圈永远不会中断,因为
while
语句总是正确的。
i = 0
也许有一个混淆点是,python 中的 for
在其他语言中的行为类似于 foreach
。
此外,我建议 运行 下面的代码片段可以更好地理解 range(start, stop, step)
函数,因为我认为它的行为也与您假设的不同:
for i in range(0, 5, 2):
print(i)
for k in range(0, 5, 10):
print(k)