首页 > 解决方案 > python for循环只更新3个变量中的2个?

问题描述

我想在一个 for 循环中使用 3 个变量。这是我尝试过的:

def loop_player_listbox():
    global bol_loop, count
    bol_loop = True
    while True:
        
        time.sleep(1)
        str_libo_p = listbox.get(0,tk.END)
        str_libo_r = listboxr.get(0,tk.END)
        str_libo_price = listboxprice.get(0,tk.END)

        for i,r,p in itertools.product(str_libo_p, str_libo_r, str_libo_price):
            text_playername = wait.until(EC.element_to_be_clickable((By.XPATH,('/html/body/main/section/section/div[2]/div/div[2]/div/div[1]/div[1]/div[1]/div/input'))))
            text_playername.click()
            time.sleep(1)
            text_playername.clear()
            time.sleep(1)
            text_playername.click()
            text_playername.send_keys(i)
            user_input_max_price = p
            try:
                choose_player = wait.until(EC.element_to_be_clickable((By.XPATH,("//span[@class='btn-text' and contains(text(),'"+i+"')]")))) and wait.until(EC.element_to_be_clickable((By.XPATH,("//span[@class='btn-subtext' and contains(text(),'"+r+"')]"))))
                choose_player.click()
                
                count = 0
                while count < 5:

                    while True:
                        # some unimportant code

                    # set speed
                    # some unimportant code

                    # set max BIN price
                    while True:
                        #user_input_max_price = input('Enter max buy now price (>250):')
                        user_input_max_price = p
                        if user_input_max_price.isdigit():
                            int_user_input_max_price = int(user_input_max_price)
                            if int_user_input_max_price > 250:
                                break
                            else:
                                print('Max buy now price must be >250')
                                continue
                        else:
                            continue
                            

                    
                    # set max price
                    # some unimportant code


                    # Buy until 100 players were bought
                    while count < 5:            
                        
                        # some unimportant code
                        count +=1

问题是,变量rpcount = 5.

i总是只显示我列表框中的第一项并且不更新。每次我的循环回到for i,r,p ...我在调试中看到的只有变量rp更新的行时。

我不知道为什么。在搜索如何组合多个for循环时,我发现itertools并使用了它。

也许有人看到哪里错了?

标签: pythonloopsfor-looptkinterlistbox

解决方案


从 itertools 更改为 zip 修复了该问题。

for i,r,p in zip(str_libo_p, str_libo_r, str_libo_price):


推荐阅读