如何让 if 语句在执行时记住一个值?

How can I get an if statement to remember a value as it executes?

我在 python 中有一个半工作决策循环正在工作,但需要一个指针才能使其 100% 工作。

我有几个股票代码,我每 'x' 分钟更新一次值,并在 Raspberry Pi LCD 上显示该值。我试图做但失败的是,当一只股票下跌时,让背光变成红色,如果两者都是负值,如果最后一个是负值,但如果第一个是负值,第二个是正值,它就可以正常工作不起作用。我怎样才能完成这项工作?

tickersymbols = ['ticker1', 'ticker2']

i = 0
while (i <  3):
    lcd.clear()
    for tickerSymbol in tickersymbols:

            allInfo = ystockquote.get_all(tickerSymbol)

            price = float(allInfo["price"])

            change = float(allInfo["change"])
            if change >= 0:
                    backlight.rgb(0,255,0)
                    lcd.write(tickerSymbol + "= %+3.2f (%+0.2f)" % (price, change))
            else:
                    backlight.rgb(255,0,0)
                    lcd.write(tickerSymbol + "= %+3.2f (%+0.2f)" % (price, change))

根据您的评论,最简单的做法是在 for 循环之前设置 backlight.rgb(0, 255, 0),如果 change 小于 0:

,只需更改为红色
ticker_symbols = ['ticker1', 'ticker2']
while i < 3:
    lcd.clear()
    backlight.rgb(0, 255, 0) # reset normal background each time
    for ticker_symbol in ticker_symbols:
        all_info = ystockquote.get_all(ticker_symbol)
        price = float(all_symbol["price"])
        change = float(all_symbol["change"])    
        if change < 0: # only change to red when  we find any price drop          
            backlight.rgb(255, 0, 0)
        lcd.write(ticker_symbol + "= %+3.2f (%+0.2f)" % (price, change)) # always change display

始终以 backlight.rgb(0, 255, 0) 开头然后更改为红色以通知降价是有意义的。否则你如何通过查看屏幕知道屏幕是前一滴还是当前的红色。

这是非常基本的,但为什么不在 if(只要您的默认颜色不是红色) 中添加另一个条件语句。这样,您的 for 循环仍将继续到 运行,并且您仍将获得此时所做的所有 lcd.write

tickersymbols = ['ticker1', 'ticker2']

i = 0
while (i <  3):
    lcd.clear()
    backlight.rgb(255,0,0)
    for tickerSymbol in tickersymbols:

            allInfo = ystockquote.get_all(tickerSymbol)

            price = float(allInfo["price"])

            change = float(allInfo["change"])
            if change < 0:
                backlight.rgb(0,255,0)

            lcd.write(tickerSymbol + "= %+3.2f (%+0.2f)" % (price, change))

仔细查看您的问题后,您不想中断 for 循环。这将导致您错过剩余 tickerSymbols 的 lcd.write() 语句。

相反,如果您看到价格下跌,您只想设置一个标志。然后,循环之后,根据flag改变LED的颜色。

tickersymbols = ['ticker1', 'ticker2']

i = 0
while (i <  3):
    lcd.clear()
    stockWentDown=False
    for tickerSymbol in tickersymbols:
        allInfo = ystockquote.get_all(tickerSymbol)
        price = float(allInfo["price"])
        change = float(allInfo["change"])
        lcd.write(tickerSymbol+ "= %+3.2f (%+0.2f)" % (price, change))
        if change < 0:
            stockWentDown=True
    if not stockWentDown: #if the stock went up or stayed the same
        #color it green
        backlight.rgb(0,255,0)
    elif stockWentDown: #if the stock went down
        #color it red
        backlight.rgb(255,0,0)

根据您的代码,如果第一个更改是负数而第二个不是,您最终会覆盖显示。在我看来,只要 Padraic Cunningham 突出显示值发生更改,您所要做的就是 break 退出 while 循环。但是,如果你想通过 while 循环两次维护 运行 的配置,你总是可以设置一个标志

tickersymbols = ['ticker1', 'ticker2']

i = 0
flag=0
while (i <  3):
    lcd.clear()

    for tickerSymbol in tickersymbols:

            allInfo = ystockquote.get_all(tickerSymbol)

            price = float(allInfo["price"])

            change = float(allInfo["change"])
            if (change >= 0 && flag==0):
                    backlight.rgb(0,255,0)
                    lcd.write(tickerSymbol + "= %+3.2f (%+0.2f)" % (price, change))
            else:
                    backlight.rgb(255,0,0)
                    lcd.write(tickerSymbol + "= %+3.2f (%+0.2f)" % (price, change))
                    flag=1