鱼C论坛

 找回密码
 立即注册
查看: 1820|回复: 2

[已解决]求助想找出一组数据的最小值,但是这组数据是不确定个数的

[复制链接]
发表于 2023-4-25 09:23:08 | 显示全部楼层 |阅读模式

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

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

x
for i in range(1,6):
    try:
        in1=driver.find_element(By.XPATH,f'/html/body/mw[2]/con/table/tbody/tr[{i}]/td[2]').get_attribute('textContent')
        in1=in1[0:in1.rfind('/'):]
        match i:
            case 1:
                one=eval(in1)
            case 2:
                two=eval(in1)
            case 3:
                three=eval(in1)
            case 4:
                four=eval(in1)
            case 5:
                five=eval(in1)
        if one==min(one,two,three,four,five):
            print('zhiliao1')
            #a=driver.find_element(By.XPATH, f'/html/body/mw[2]/con/table/tbody/tr[1]').get_attribute('onclick')
            #driver.execute_script(f'{a}')
        elif two==min(one,two,three,four,five):
            print('zhiliao2')
        elif three==min(one,two,three,four,five):
            print('zhiliao3')
        elif four == min(one, two, three, four, five):
            print('zhiliao4')
        elif five == min(one, two, three, four, five):
            print('zhiliao5')
    except:pass


如上代码,one,two,three,four,five 这五个数据有时候肯能是其中四个找最小值,或者其中三个找最小值,
但是我写的这个代码(if one==min(one,two,three,four,five):)的问题所在是,如果不是五个量都有值的话,就不会运行找最小值
最佳答案
2023-4-25 09:55:06
要处理这个问题,你可以在每个循环中创建一个空列表,然后将获取到的值附加到该列表中。这样,你可以在每次循环结束时使用min()函数找到列表中的最小值。以下是代码的修改版本:
from selenium.webdriver.common.by import By
from selenium import webdriver

driver = webdriver.Chrome()

min_values = []
for i in range(1, 6):
    try:
        in1 = driver.find_element(By.XPATH, f'/html/body/mw[2]/con/table/tbody/tr[{i}]/td[2]').get_attribute('textContent')
        in1 = in1[0:in1.rfind('/'):]
        value = eval(in1)
        min_values.append((i, value))
    except:
        pass

if min_values:
    min_item = min(min_values, key=lambda x: x[1])
    min_index = min_item[0]
    print(f'zhiliao{min_index}')
else:
    print('没有找到最小值')

这个代码会在每次循环中尝试查找元素并提取值。如果成功,它将把这个值添加到min_values列表中。在循环结束后,使用min()函数找到列表中的最小值,并输出对应的"zhiliao"文本。如果没有任何值被找到,程序会输出"没有找到最小值"。
想知道小甲鱼最近在做啥?请访问 -> ilovefishc.com
回复

使用道具 举报

发表于 2023-4-25 09:55:06 | 显示全部楼层    本楼为最佳答案   
要处理这个问题,你可以在每个循环中创建一个空列表,然后将获取到的值附加到该列表中。这样,你可以在每次循环结束时使用min()函数找到列表中的最小值。以下是代码的修改版本:
from selenium.webdriver.common.by import By
from selenium import webdriver

driver = webdriver.Chrome()

min_values = []
for i in range(1, 6):
    try:
        in1 = driver.find_element(By.XPATH, f'/html/body/mw[2]/con/table/tbody/tr[{i}]/td[2]').get_attribute('textContent')
        in1 = in1[0:in1.rfind('/'):]
        value = eval(in1)
        min_values.append((i, value))
    except:
        pass

if min_values:
    min_item = min(min_values, key=lambda x: x[1])
    min_index = min_item[0]
    print(f'zhiliao{min_index}')
else:
    print('没有找到最小值')

这个代码会在每次循环中尝试查找元素并提取值。如果成功,它将把这个值添加到min_values列表中。在循环结束后,使用min()函数找到列表中的最小值,并输出对应的"zhiliao"文本。如果没有任何值被找到,程序会输出"没有找到最小值"。
想知道小甲鱼最近在做啥?请访问 -> ilovefishc.com
回复 支持 反对

使用道具 举报

 楼主| 发表于 2023-4-25 10:46:26 | 显示全部楼层
isdkz 发表于 2023-4-25 09:55
要处理这个问题,你可以在每个循环中创建一个空列表,然后将获取到的值附加到该列表中。这样,你可以在每次 ...

谢谢!我刚才用很笨的方法实现了,很臃肿,看完您的解答,我觉得收获很多,并学习新方法去修改原来的代码,感谢!
def minhpcure():
    driver.execute_script('useCut(2);return false;')
    sleep(1.3)
    global one,two,three,four,five
    for i in range(1,6):
        try:
            match i:
                case 1:
                    try:
                        in1 = driver.find_element(By.XPATH,f'/html/body/mw[2]/con/table/tbody/tr[{i}]/td[2]').get_attribute('textContent')
                        in1 = in1[0:in1.rfind('/'):]
                        one=eval(in1)
                    except:one=10000

                case 2:
                    try:
                        in1 = driver.find_element(By.XPATH,f'/html/body/mw[2]/con/table/tbody/tr[{i}]/td[2]').get_attribute('textContent')
                        in1 = in1[0:in1.rfind('/'):]
                        one = eval(in1)
                        two=eval(in1)
                    except:two=10000
                case 3:
                    try:
                        in1 = driver.find_element(By.XPATH,f'/html/body/mw[2]/con/table/tbody/tr[{i}]/td[2]').get_attribute('textContent')
                        in1 = in1[0:in1.rfind('/'):]
                        one = eval(in1)
                        three = eval(in1)
                    except:
                        three = 10000
                case 4:
                    try:
                        in1 = driver.find_element(By.XPATH,f'/html/body/mw[2]/con/table/tbody/tr[{i}]/td[2]').get_attribute('textContent')
                        in1 = in1[0:in1.rfind('/'):]
                        one = eval(in1)
                        four = eval(in1)
                    except:
                        four = 10000
                case 5:
                    try:
                        in1 = driver.find_element(By.XPATH,f'/html/body/mw[2]/con/table/tbody/tr[{i}]/td[2]').get_attribute('textContent')
                        in1 = in1[0:in1.rfind('/'):]
                        one = eval(in1)
                        five=eval(in1)
                    except:five = 10000
        except:pass

def zhiliaomin():
    if one==min(one,two,three,four,five):
        try:
            a=driver.find_element(By.XPATH, f'/html/body/mw[2]/con/table/tbody/tr[1]').get_attribute('onclick')
            driver.execute_script(f'{a}')
            bskill()
        except:pass
    elif two==min(one,two,three,four,five):
        try:
            a=driver.find_element(By.XPATH, f'/html/body/mw[2]/con/table/tbody/tr[2]').get_attribute('onclick')
            driver.execute_script(f'{a}')
            bskill()
        except:pass
    elif three==min(one,two,three,four,five):
        try:
            a = driver.find_element(By.XPATH, f'/html/body/mw[2]/con/table/tbody/tr[3]').get_attribute('onclick')
            driver.execute_script(f'{a}')
            bskill()
        except:pass
    elif four == min(one, two, three, four, five):
        try:
            a = driver.find_element(By.XPATH, f'/html/body/mw[2]/con/table/tbody/tr[4]').get_attribute('onclick')
            driver.execute_script(f'{a}')
            bskill()
        except:pass
    elif five == min(one, two, three, four, five):
        try:
            a = driver.find_element(By.XPATH, f'/html/body/mw[2]/con/table/tbody/tr[5]').get_attribute('onclick')
            driver.execute_script(f'{a}')
            bskill()
        except:pass
想知道小甲鱼最近在做啥?请访问 -> ilovefishc.com
回复 支持 反对

使用道具 举报

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

本版积分规则

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

GMT+8, 2024-9-23 13:22

Powered by Discuz! X3.4

© 2001-2023 Discuz! Team.

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