【问题标题】:Python While loop not iterating variable only print commandsPython While循环不迭代变量只打印命令
【发布时间】:2020-09-21 10:49:51
【问题描述】:

背景 - 我正在制作一个特殊的时钟,它将通过 WS2812B 像素显示时间并在我进行时学习!

我有一个字典,其中包含发送到像素的命令,如下所示

hourvalues = {1: "Hour One",
              2: "Hour Two"}

等等等等最多24个 主文档包含循环:

while True:
    print(hourvalues[hour])
    sleep(1)

现在打印(作为测试)非常有效,我每秒都会收到一个单词。但是,如果我将字典更改为

hourvalues = {1: print("Hour One"),
              2: Print("Hour Two")}

和身体去

while True:
    hourvalues[hour]
    sleep(1)

为了表示将发送命令而不是打印一行的最终内容,我只得到一个单词,仅此而已。

我做错了什么?

这是我的第一篇文章,请温柔!谢谢大家

【问题讨论】:

  • print()hourvalues dict 初始化时被调用两次,结果得到{1: None, 2: None}。它发生了,因为print() 返回None

标签: python loops dictionary while-loop clock


【解决方案1】:

由于你在构建字典时调用了print函数,它会打印出当时的值,然后将返回值(None)存入实际的字典中。

相反,您想创建一个函数字典,在调用时将打印给定的字符串。 lambda 表达式对于您想要构建一个小函数以在一个地方使用的情况很有用:

hour_actions = {
    1: lambda: print("Hour One"),
    2: lambda: print("Hour Two")
}

while True:
    hour_actions[hour]()
    sleep(1)

请注意,您需要使用() 来实际调用从字典中获取的函数!

【讨论】:

  • 即将开始阅读 ton lambda。感谢您的快速回复!
【解决方案2】:

您必须将函数作为 dict 值,而不是它的返回值,就像您在第二段代码中所做的那样。

所以,它可能看起来像:

def hour_one():
    print('Hour one')

def hour_two():
    print('Hour two')

hourvalues = {1: hour_one,  # no (), you don't want to call it
              2: hour_two}  # while creating the dict !

for hour in [1, 2]:
    hourvalues[hour]()  # call it now

【讨论】:

    猜你喜欢
    • 2015-10-27
    • 2020-04-26
    • 2021-10-22
    • 2014-03-24
    • 1970-01-01
    • 2015-03-23
    • 2016-12-21
    • 2019-11-30
    • 1970-01-01
    相关资源
    最近更新 更多