【问题标题】:How to simplify condtitional for list processing如何简化列表处理的条件
【发布时间】:2020-01-15 14:39:07
【问题描述】:

我正在处理来自麦克风的信号。我的输入只是列表中的 12 个值,我必须以某种方式预处理。但我在这里找到的唯一一种解决方案就是使用多个 if 块。

mic.init()

while True:
    mic_map = mic.get_map()
    print(len(mic_map[:]))
    b = mic.get_dir(mic_map)
    if b[0]:
        print("-90 degree")
        pass
    elif b[1]:
        print("-60 degree")
        pass
    elif b[2]:
        print("-30 degree")
        pass
    elif b[3]:
        print("0 degree")
        pass
    elif b[4]:
        print("+30 degree")
        pass
    elif b[5]:
        print("+60 degree")
        pass
    elif b[6]:
        print("+90 degree")
        pass
    elif b[7]:
        print("+120 degree")
        pass
    elif b[8]:
        print("+150 degree")
        pass
    elif b[9]:
        print("+-180 degree")
        pass
    elif b[10]:
        print("-150 degree")
        pass
    elif b[11]:
        print("-120 degree")
        pass

这里有没有可能做出更好的解决方案。谢谢。

UPD。很抱歉没有提供有关某些方法的必要信息。

mic.get_map() 正在返回一个包含 256 个值的列表,例如图像。 mic.get_dir() 返回一个包含 12 个值的列表。

【问题讨论】:

标签: python python-3.x


【解决方案1】:
mic.init()

while True:
    mic_map = mic.get_map()
    b = mic.get_dir(mic_map)

    for x, values in enumerate(b):
        if values:
             answer = -90 + (30*x)
             if abs(answer) >= 180:
                 answer += 360* (-answer/answer)
             print("{} degrees".format(answer))
             break

【讨论】:

  • 我喜欢这个!当然,我是 Python 新手,但这看起来很漂亮。
  • 添加了@ehutchllew 改进
  • @brunodesthuilliers 鉴于 'mic_map' 可能不是一个列表,那么我不确定。但是如果 'b' 是一个列表,那么条件句就没有意义了?
  • @Ahmet 我没有回答,因为我在等待 OP 发布更多详细信息——至少 b 的样子。我没有编辑您的答案,因为 1/ 在我们获得这些详细信息之前,我不知道应该如何编辑它,并且 2/ 它是 您的 答案。此外,我不认为在不知道您正在处理什么的情况下询问您如何得出您的解决方案可以工作的结论有什么粗鲁的。你知道我不知道这个mic 对象是什么吗?如果是,请分享。
  • @ahmet Python 的禅宗有一句话说:“面对歧义,拒绝猜测的诱惑”。一开始可能看起来有点激进,但在过去的 20 多年里,它确实为我节省了很多时间;-)
猜你喜欢
  • 1970-01-01
  • 2010-10-18
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
相关资源
最近更新 更多