while循环无法进行传递i = 1

时间:2017-09-18 08:03:25

标签: python python-3.x while-loop

我有一个像这样的小算法。

The flowchart

我用python

编写了它
import pandas as pd
raw = pd.read_csv

i = 0
T = pd.DataFrame(columns = ['Values'])
singleT = raw.mean() + raw.std()
T = T.append(singleT, ignore_index=True)

if i == 0:
    raw = raw.where(raw<T.iloc[i,:])
    i += 1

while True:
    singleT = raw.mean() + raw.std()
    T = T.append(singleT, ignore_index=True)
    if T.iloc[i,:].values == T.iloc[i-1,:].values:
        break
    background = T.iloc[i,:].values
else:
    raw = raw.where(raw<T.iloc[i,:])
    i += 1
    print ('iteration{:02}'.format(i))

然而,循环没有得到传递i = 1并且继续重复,当i = 1时整个T数组都填充了值。我对我的代码进行了几次修改但是它们根本不起作用。 / p>

如何解决此问题的任何建议将不胜感激! 非常感谢你

编辑:我已为最后4行添加了一个标签,因为你们建议确保else属于while,但现在它的语法无效错误

Edit2:这是这个问题的正确代码,它不会进入无限循环。

i = 0
T = pd.DataFrame(columns = ['Pulse counts'])
singleT = raw.mean() + raw.std()
T = T.append(singleT, ignore_index=True)

if i == 0:
    filtered = raw.where(raw<T.iloc[i,:])
    i += 1

while True:
    singleT = filtered.mean() + filtered.std()
    T = T.append(singleT, ignore_index=True)
    if T.iloc[i,:].values == T.iloc[i-1,:].values or T.iloc[i-1,:].values == 0:
        background = T.iloc[i-1,:].values
        break
    else:
        filtered = filtered.where(filtered<T.iloc[i,:])
        print ('iteration{}'.format(i))
    i += 1

2 个答案:

答案 0 :(得分:1)

如果您的缩进正确,else部分:

else:
    raw = raw.where(raw<T.iloc[i,:])
    i += 1
    print ('iteration{:02}'.format(i))

不属于if,而属于while,它具有不同的含义:仅当循环结束时没有break(不太知名的特征,也是与for一起使用,无需在达到break时定义标记

所以i永远不会增加:无限循环。

答案 1 :(得分:1)

尝试这种方式:

gradle