Python - 如果有值,则循环遍历布尔值

我正在尝试编写一个脚本,在其中检查特定页面的名称。在我继续总结问题之前。该页面可以轻弹 - 这意味着一旦您进入该页面,它就会列出您的姓名。你做的下一个刷新页面,它会返回空的名字列表,下一个它会再次列出你的名字。(这是我正在尝试做的进一步想法)但是我创建了一个自己的小脚本,我们作为用户可以更轻松地对其进行测试。


我创建了一个 txt 文件,而不是请求,以便更轻松地运行程序


我正在尝试做的是以下内容:


我想制作脚本,以便它在每个循环中打开 txt,它检查列表中是否有名称,然后我们只打印一次。如果没有名字 - 那么我想做一个计数器来检查名字是否真的是空的,这意味着在这种情况下我想创建一种确认这一点的计数器,并声明没有名字列表。这意味着在 txt 文件打开 5 次之后,并且在行打开的 5 次之后列表中没有任何名称。然后我们可以将它声明为它实际上是空的。


如果计数器确认它是空的,那么我们循环直到找到名称并再次打印它,然后我们像以前一样重新开始。


我尝试过的是,我认为在编码时会出现一些小问题,我可能会混淆自己或使自己过于复杂,而不是实际应该这样做。


count = 0

last_names = []

names_checker = False


while True:


    with open('./test.txt') as f:

        new_product_values = json.load(f)


    # {'name': 'Random names', 'url': 'www.stackoverflow.com', 'names': []}


    if names_checker == False:


        if not new_product_values['sizes']:

            count += 1

            time.sleep(1)


        if count == 5:

            names_checker = True

            count = 0

            logger.success('Declare value as No names')


        else:

            names_checker = True


    elif names_checker == True:


        while True:



            if new_product_values['names'] != last_names:


                print("NEW NAMES!")

                print(new_product_values['names'])

                last_names = new_product_values['names']

                logger.status(last_names)

                names_checker = False

                break


            else:

                logger.warn("Nothing found - sleep 1")

                time.sleep(1)

text file:


{'name': 'Random names', 'url': 'www.stackoverflow.com', 'names': []}

在这种情况下,我的预期结果是:


如果列表中没有名称,我们在计数器中添加一个,如果下一个循环仍然继续给我们空名称,那么我们在计数器中添加另一个名称,直到它到达计数器 5,当它到达计数器 5 时我想要它将其声明为列表为空。每当它为空时,我们想循环直到找到名称。一旦我们找到了我们想要声明列表不为空的名称,并打印一次名称并重新开始计数器。


守候你守候我
浏览 225回答 1
1回答

MMTTMM

你的分析是对的:你把问题想得太多了。首先,将你正在做的事情分成简单的步骤&nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; +--------------------------+&nbsp; +-----------> |Get the data from the page| <-----------------+&nbsp; |&nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp;+-------------+------------+&nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp;|&nbsp; |&nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp;|&nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; |&nbsp; |&nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp;v&nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; |&nbsp; |&nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; |&nbsp; |&nbsp; &nbsp; &nbsp; &nbsp; &nbsp; +-------------------------------------------+&nbsp; &nbsp; &nbsp;|&nbsp; |&nbsp; &nbsp; &nbsp; &nbsp; &nbsp; |Get the data into a nice format (e.g. list)|&nbsp; &nbsp; &nbsp;|&nbsp; |&nbsp; &nbsp; &nbsp; &nbsp; &nbsp; +------------------+------------------------+&nbsp; &nbsp; &nbsp;+------+&nbsp; |&nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp;|&nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; |&nbsp; &nbsp; &nbsp; |&nbsp; |&nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp;|&nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp;+--------+&nbsp; &nbsp; &nbsp; |&nbsp; |&nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; +--+&nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp;|&nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp;|&nbsp; |&nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; |&nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; |&nbsp; &nbsp; &nbsp; &nbsp; &nbsp;+-------------+&nbsp; |&nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; v&nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; |&nbsp; &nbsp; &nbsp; &nbsp; &nbsp;|wait for data|&nbsp; |&nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp;|&nbsp; &nbsp; &nbsp; &nbsp; &nbsp;+-------------+&nbsp; |&nbsp; &nbsp; &nbsp; &nbsp; &nbsp;+--------------------------+&nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; |&nbsp; |&nbsp; &nbsp; &nbsp; &nbsp; &nbsp;|Do we actually have data? |&nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; |&nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp;^&nbsp; |&nbsp; &nbsp; &nbsp; &nbsp; &nbsp;+------+-----+-------------+&nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; |flick&nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; |no data&nbsp; |&nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; |&nbsp; &nbsp; &nbsp;|&nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; |&nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp;|+-+------+&nbsp; &nbsp; &nbsp; &nbsp; &nbsp;|&nbsp; &nbsp; &nbsp;|&nbsp; &nbsp; &nbsp; &nbsp; +-------------------+-----------------+-----+|do stuff|&nbsp; &nbsp; <----+&nbsp; &nbsp; &nbsp;+---->&nbsp; &nbsp;|Is this a flick or is there really no data?|+--------+&nbsp; &nbsp; &nbsp;yes&nbsp; &nbsp; &nbsp; &nbsp; &nbsp;no&nbsp; &nbsp; &nbsp;+-------------------------------------------+您会看到轻弹和没有数据最终返回以获取数据。如果你把上面的步骤放到python代码中,你会得到这样的东西:def get_data():&nbsp; # just an example&nbsp; &nbsp; r = requests.get(...)&nbsp; &nbsp; r.raise_for_status()&nbsp; &nbsp; return rdef parse_data(text, _old=[]):&nbsp; # list is mutable => preserved across calls&nbsp; &nbsp; """convert the text to a list of names. If there are no (new) names, the list is empty"""&nbsp; &nbsp; ...&nbsp; &nbsp; if new_data not in _old:&nbsp; &nbsp; &nbsp; &nbsp; _old.append(new_data)&nbsp; &nbsp; &nbsp; &nbsp; return new_data&nbsp; &nbsp; else:&nbsp; &nbsp; &nbsp; &nbsp; return []def do_stuff(names):&nbsp; &nbsp; ...像这样拆分不仅可以让您的代码更好地被阅读和理解,而且还为您提供了一种更改各个部分的方法:如果您想使用本地文件/数据进行测试,您只需重写get_data而不更改任何其他内容:def get_data():&nbsp; &nbsp; if random.randint(0, 1):&nbsp; # simulate flicks&nbsp; &nbsp; &nbsp; &nbsp; return empty_sample_data&nbsp; &nbsp; else:&nbsp; &nbsp; &nbsp; &nbsp; return random.choice(sample_data_with_names)按照上面的结构图,您现在可以通过counter在一个循环中查看来首先获取数据,检查它并在获取新数据之前执行正确的操作:WAIT_TIME = 10*60counter = 0while True:&nbsp; &nbsp; data = parse_data(get_data())&nbsp; &nbsp; if data:&nbsp; &nbsp; &nbsp; &nbsp; counter = 0&nbsp; &nbsp; &nbsp; &nbsp; do_stuff(data)&nbsp; &nbsp; &nbsp; &nbsp; print("I got the data and did {stuff}. Now I'll wait and repeat with new names")&nbsp; &nbsp; &nbsp; &nbsp; time.sleep(WAIT_TIME)&nbsp; &nbsp; else:&nbsp; &nbsp; &nbsp; &nbsp; counter += 1&nbsp; &nbsp; &nbsp; &nbsp; if counter >= 5:&nbsp; # cosmic rays may increase ``counter`` by 2 instead of 1&nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; counter = 0&nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; print("I think there actually isn't any data. I'll wait and then check again")&nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; time.sleep(WAIT_TIME)如果新数据很快出现并且您决定不需要那么多日志记录,您也可以直接counter取出。
打开App,查看更多内容
随时随地看视频慕课网APP

相关分类

Python