对dataframe的每行遍历循环后,再用while进行条件判断,总是出错

代码:

import pandas as pd
import numpy as np

df=pd.DataFrame([[2,5,6,10,11,12,15],
                 [3,4,5,7,10,15,16],
                 [7,10,15,16,19,20,21]],index=['0','1','2',],columns=list('abcdefg'))
                 
s=eval(input('请输入一个30以内的整数:'))

for row in df.itertuples():
    if row[1]<s<row[len(row)-1]:
        s=s
        while s not in row:
            s=s+1
    elif s<=row[1]:
        s=row[1]
    elif s>=row[len(row)-1]:
        s=row[len(row)-1]

    print(s)


问题:
输入一个数,要判断该数是否在dataframe的每一行中:如果在就返回输入的数;如果不在,就返回输入数后最近的一个数,且该数在dataframe对应行中。
按照上述代码,如果输入的s=3时,print(s)后,应该返回的是“5,3,7”,但最终返回的是“5,5,7”;
如果输入的s=7时,print(s)后,应该返回的是“10,7,10”,但最终返回的是“10,10,10”。
出现上述问题的原因是什么呢?求解答!谢谢!

因为你s改了之后没改回来,像输入3,第一行没找到就增大到可以找到的5,然后第二行开始就一直是用5在作比较

按照“想上天的狗”的方法,已经解决问题。谢谢!
以下为改正后的代码:

import pandas as pd
import numpy as np
 
df=pd.DataFrame([[2,5,6,10,11,12,15],
                 [3,4,5,7,10,15,16],
                 [7,10,15,16,19,20,21]],index=['0','1','2',],columns=list('abcdefg'))
                 
a=eval(input('请输入一个30以内的整数:'))
 
for row in df.itertuples():
    
    s=a
    if row[1]<s<row[len(row)-1]:
        while s not in row:
            s=s+1
    elif s<=row[1]:
        s=row[1]
    elif date_time()>=row[len(row)-1]:
        s=row[len(row)-1]
 
    print(s)