【问题标题】:Trying to restart iterating a loop from the very beginning once condition the same loop finished first iteration一旦条件相同的循环完成第一次迭代,尝试从一开始就重新开始迭代循环
【发布时间】:2023-04-01 12:40:01
【问题描述】:

我有 2 个嵌套的“for 循环”,我正在尝试重新启动第一个循环以从头开始迭代,一旦它的嵌套循环完成,它就会按照 if 语句成功迭代。 但是,如果嵌套循环满足“else”条件,则外部循环应该定期继续它的迭代。 我试图告诉代码,如果找到的keywords_on_screen 以创建的关键字开始直到该点继续运行,否则在他们停止匹配的最后一个索引处更改后者。

这是我已经尝试过的,但是第一个(外)循环继续遍历字母,而不是从头开始。

import time
from bs4 import BeautifulSoup
from selenium import webdriver
browser = webdriver.Chrome('chromedriver.exe')
keyList = ['a','b','c','d']
mainUrl = "https://www.amazon.com/"
browser.get(mainUrl)
searchInput = browser.find_element_by_xpath('//input[@id="twotabsearchtextbox"]')
searchInput.clear()
keyword = str()

# I WANT THE LOOP TO RESTART FROM HERE ONCE THE NESTED LOOP IS FINISHED

for keyChar in keyList:
    searchInput.send_keys(keyChar)
    time.sleep(2)
    searchSoup = BeautifulSoup(browser.page_source, "html.parser")
    searchResult = searchSoup.find_all('div', attrs={'id':'suggestions-template'})
    results = searchResult[0].find_all('div', attrs={'class':'s-suggestion'})
    keyword = keyword + keyChar
    print("This is the keyword so far:>>>>   ",keyword)
    time.sleep(2)

    for data_result in results:
        data_keywords = BeautifulSoup(str(data_result),"html.parser")
        keywords_on_screen = data_keywords.find("div", class_="s-suggestion")["data-keyword"]
        print(keywords_on_screen)

        if keywords_on_screen.startswith(keyword):
            print('ALL GOOD')
        else:
            print('Condition not met, moving on next letter')
            continue

【问题讨论】:

    标签: python-3.x loops for-loop


    【解决方案1】:

    如果嵌套循环中的else 条件得到满足,我相信您想要的是继续最外层的循环。如果不满足else 条件,则从头开始重新启动最外层循环。

    试试:-

    import time
    from bs4 import BeautifulSoup
    from selenium import webdriver
    browser = webdriver.Chrome('chromedriver.exe')
    keyList = ['a','b','c','d']
    mainUrl = "https://www.amazon.com/"
    browser.get(mainUrl)
    searchInput = browser.find_element_by_xpath('//input[@id="twotabsearchtextbox"]')
    searchInput.clear()
    keyword = str()
    ctr = 0
    x = 0
    
    # I WANT THE LOOP TO RESTART FROM HERE ONCE THE NESTED LOOP IS FINISHED
    
    while x < len(keyList):
        keyChar = keyList[x]
        searchInput.send_keys(keyChar)
        time.sleep(2)
        searchSoup = BeautifulSoup(browser.page_source, "html.parser")
        searchResult = searchSoup.find_all('div', attrs={'id':'suggestions-template'})
        results = searchResult[0].find_all('div', attrs={'class':'s-suggestion'})
        keyword = keyword + keyChar
        print("This is the keyword so far:>>>>   ",keyword)
        time.sleep(2)
    
        for data_result in results:
            data_keywords = BeautifulSoup(str(data_result),"html.parser")
            keywords_on_screen = data_keywords.find("div", class_="s-suggestion")["data-keyword"]
            print(keywords_on_screen)
    
            if keywords_on_screen.startswith(keyword):
                print('ALL GOOD')
                ctr = 1
            else:
                print('Condition not met, moving on next letter')
                ctr = 0
                continue
        if ctr is not 1:
            x += 1
    

    最外层循环将无限执行,直到满足嵌套的if 条件,否则如果条件不满足,则最外层循环将正常执行,并在列表KeyList 的所有元素耗尽时终止。

    【讨论】:

      猜你喜欢
      • 1970-01-01
      • 2018-04-21
      • 2019-03-30
      • 2019-06-18
      • 1970-01-01
      • 1970-01-01
      • 2023-01-15
      • 2010-12-28
      • 1970-01-01
      相关资源
      最近更新 更多