Python-如何计数和记住循环中的出现次数 [英] Python - How to Count & Remember Number of Occurrences in a Loop

查看:1652
本文介绍了Python-如何计数和记住循环中的出现次数的处理方法,对大家解决问题具有一定的参考价值,需要的朋友们下面随着小编来一起学习吧!

问题描述

希望我能尽我所能解释清楚.

Hopefully i can explain as clear as possible of what i'm trying to do.

我每2秒运行一次while循环,以从2个具有不同值的不同商店中获取更新值:

I'm running a while loop every 2 seconds to get updated values from 2 different stores that have different values:

字典看起来像这样:

#2 seconds
{'lastUpdateId': 202588846, 'store1': [['24.43000000', '0.00606000'], ['24.42000000', '14.76000000'], ['24.39000000', '2.65760000'], ['24.38000000', '29.59867000'], ['24.35000000', '7.71171000']], 'store2': [['24.47000000', '0.22601000'], ['24.52000000', '0.72000000'], ['24.53000000', '3.28839000'], ['24.54000000', '5.63226000'], ['24.55000000', '20.64052000']]}
#2 seconds
{'lastUpdateId': 202588904, 'store1': [['24.45000000', '0.22596000'], ['24.44000000', '12.84000000'], ['24.43000000', '22.43211000'], ['24.42000000', '5.87234000'], ['24.39000000', '2.65760000']], 'store2': [['24.51000000', '0.00003000'], ['24.52000000', '2.80979000'], ['24.53000000', '17.64938000'], ['24.67000000', '3.41000000'], ['24.68000000', '115.07610000']]}

现在我想做的是在一个循环内比较存储1的第二个值与存储2的第二个值,如果要计算10则我最多要计数10次

Now what i want to do is compare inside of a loop the second value from store 1 to the second value of store 2, i want to count up to 10 times if 10 is counted then

我希望它继续到下一行代码,但这是我遇到的问题,我不知道如何执行此操作,对于python,我应该怎么做才能记住循环计数?

i want it to continue to the next line of code, but this is where i'm stuck i don't how to do this, what can i do for python to remember the loop counts?

这是我到目前为止尝试过的:

here is what i have tried so far:

import time
def testing():

    stores = {'lastUpdateId': 202588846, 'store1': [['24.43000000', '0.00606000'], ['24.42000000', '14.76000000'], ['24.39000000', '2.65760000'], ['24.38000000', '29.59867000'], ['24.35000000', '7.71171000']], 'store2': [['24.47000000', '0.22601000'], ['24.52000000', '0.72000000'], ['24.53000000', '3.28839000'], ['24.54000000', '5.63226000'], ['24.55000000', '20.64052000']]}

    firststore = [i[1] for i in stores['store1']]

    secondstore = [e[1] for e in stores['store2']]

    offer1 = float(firststore[0]) + float(firststore[1]) + float(firststore[2])


    offer2 = float(secondstore[0]) + float(secondstore[1]) + float(secondstore[2])


    count = 0

    if offer1 > offer2:

        count+=1

        print("This store has the lesser better deal")

        if count == 10:
            print("go ahead and buy")

    if offer2 > offer1:
        count+=1
        print("this other store has the lesser letter deal")

        if count == 10:
            print("go buy this")

i = 0
while True:
    i+=1
    testing()
    time.sleep(2)

能为我提供一个更好的主意吗?也许有一个for循环并追加?

could provide me with a better idea? maybe with a for loop and append?

推荐答案

您正在寻找的是发电机. 此处是一个很好地解释了发电机及其工作原理.

What you're looking for is a generator. Here is a great explanation of generators and how they work.

我将您的比较代码分解为一个单独的生成器函数,该函数通过调用生成器函数compare_offer分配给生成器对象offer_comparer. next调用开始执行函数,并在第一个yield返回.

I broke out your comparison code into a separate generator function, which is assigned to generator object offer_comparer by calling the generator function compare_offer. The the next call starts function execution and returns at the first yield.

然后,每次对offer_comparer.send(<params>)的调用都会将offer1和offer2发送到生成器函数中的offers变量.

Then, each call to offer_comparer.send(<params>) sends offer1 and offer2 to the offers variable in the generator function.

这应该给您您想要的东西.

This should give you what you're looking for.

import time


def compare_offers():
    count_max = 10
    while True:
        count1 = 0
        count2 = 0
        while count1 < count_max and count2 < count_max:
            offers = yield
            offer1, offer2 = offers[0], offers[1]
            if offer1 > offer2:
                count1 += 1
                print("Store1 has the better deal")
                if count1 == count_max:
                    print("go ahead and buy from store1")
            elif offer2 > offer1:
                count2 += 1
                print("Store2 has the better deal")
                if count2 == count_max:
                    print("go buy this from store2")


offer_comparer = compare_offers()
next(offer_comparer)


def testing():
    stores = {'lastUpdateId': 202588846,
              'store1': [['24.43000000', '0.00606000'],
                         ['24.42000000', '14.76000000'],
                         ['24.39000000', '2.65760000'],
                         ['24.38000000', '29.59867000'],
                         ['24.35000000', '7.71171000']],
              'store2': [['24.47000000', '0.22601000'],
                         ['24.52000000', '0.72000000'],
                         ['24.53000000', '3.28839000'],
                         ['24.54000000', '5.63226000'],
                         ['24.55000000', '20.64052000']]}

    firststore = [float(i[1]) for i in stores['store1']]
    secondstore = [float(e[1]) for e in stores['store2']]

    offer1 = sum(firststore[:3])
    offer2 = sum(secondstore[:3])

    offer_comparer.send((offer1, offer2))


i = 0
while True:
    i += 1
    testing()
    time.sleep(2)

这篇关于Python-如何计数和记住循环中的出现次数的文章就介绍到这了,希望我们推荐的答案对大家有所帮助,也希望大家多多支持IT屋!

查看全文
登录 关闭
扫码关注1秒登录
发送“验证码”获取 | 15天全站免登陆