You need to enable JavaScript to run this app.
优惠活动
大模型
产品
解决方案
定价
更多

如何用循环替代多if语句优化树莓派Python3摩尔斯电码程序?

用循环+字典替代多if语句,优化树莓派摩尔斯电码程序

兄弟,我太懂你现在的烦恼了——写一堆if语句不仅累得慌,还只能处理几个固定字符,完全没法支持任意输入!其实解决思路超简单,用字典映射加循环就能彻底干掉那些繁琐的if判断,让你的程序能播放任意单词甚至句子的摩尔斯码。

核心思路

说白了就是把每个字母和对应的摩尔斯码(点/划序列)提前存到字典里,然后通过循环遍历用户输入的每个字符,再遍历该字符对应的摩尔斯码符号,逐个控制LED亮灭。这样不管用户输入啥,只要在字典里有对应关系,程序就能自动处理,再也不用写N多if了。

优化后的完整代码

import RPi.GPIO as GPIO
from time import sleep

LED_GPIO = 4
print("Getting ready...")

GPIO.setmode(GPIO.BCM)
GPIO.setup(LED_GPIO, GPIO.OUT)

def lighton(timeon):
    print("Light On - ", timeon)
    GPIO.output(LED_GPIO, True)
    sleep(timeon)
    GPIO.output(LED_GPIO, False)
    sleep(timeoff)  # 符号之间的短间隔

# 摩尔斯码映射字典,覆盖所有英文字母和空格(空格用来区分单词)
morse_code = {
    'a': '.-', 'b': '-...', 'c': '-.-.', 'd': '-..', 'e': '.',
    'f': '..-.', 'g': '--.', 'h': '....', 'i': '..', 'j': '.---',
    'k': '-.-', 'l': '.-..', 'm': '--', 'n': '-.', 'o': '---',
    'p': '.--.', 'q': '--.-', 'r': '.-.', 's': '...', 't': '-',
    'u': '..-', 'v': '...-', 'w': '.--', 'x': '-..-', 'y': '-.--',
    'z': '--..', ' ': '/'
}

dashtime = 0.5    # 划的时长
dottime = 0.25    # 点的时长
timeoff = 0.1     # 符号之间的间隔时长

while True:
    user_input = input("Enter text or * to quit: ").lower()  # 统一转小写,兼容大小写输入
    if user_input == "*":
        break
    
    # 循环处理输入的每个字符
    for char in user_input:
        if char in morse_code:
            code_sequence = morse_code[char]
            # 循环处理当前字符的每个摩尔斯码符号
            for symbol in code_sequence:
                if symbol == '.':
                    lighton(dottime)
                elif symbol == '-':
                    lighton(dashtime)
                elif symbol == '/':
                    # 单词之间的长间隔,这里设为3倍点时长(减去已有的timeoff)
                    sleep(dashtime * 2)
        else:
            print(f"Character '{char}' not recognized - skipping it")

GPIO.cleanup()
print("Bye Bye")

关键改进点解析

  • 字典替代if判断:把每个字符和摩尔斯码绑定,想扩展支持新字符(比如数字),直接在字典里加键值对就行,不用改逻辑代码。
  • 双层循环处理输入:外层循环遍历用户输入的每个字符,内层循环处理该字符的摩尔斯码符号,自动完成所有亮灭操作。
  • 兼容大小写输入:用.lower()把用户输入转成小写,不管用户输入大写还是小写字母都能正常识别。
  • 友好的错误处理:遇到不支持的字符,会提示并跳过,不会直接崩溃程序。

内容的提问来源于stack exchange,提问作者spicycowpie

相关产品推荐
方舟 Agent Plan

超全模态模型 × Harness 升级,最新支持 Deepseek-V4.1-Flash、GLM-5.3 系列、Doubao-Seedream-5.0-pro、Kimi-K3 (部分), 限时 9.9 元起

最近更新时间:2026.05.28 07:10:13