python解决摩尔斯电码

本文介绍了如何利用Python的str.maketrans()和二进制格式化输出来将时间字符串转换为摩尔斯电码。通过示例代码和详细分析,展示了将时间转化为二进制并转为摩尔斯码的过程,帮助读者理解这一巧妙的编程技巧。

摘要生成于 C知道 ,由 DeepSeek-R1 满血版支持, 前往体验 >


前言

前一段时间逛checkio,又发现一个有意思的题,是关于摩尔斯电码的。其实题本身素质一般,只是看到一个大佬的解法,真是让我大开眼界,学了很多。

一、题目说明

题目要求很简单,将一段时间格式的字符串转换为摩尔斯密码,转换规则见下图:

每一位都由不同长度的小球表示,灰色小球表示1,也就是True,白色球表示0,也就是False。不同的长度对应的数字分别是2的n次方:1, 2, 4, 8。
最后,1用-替换,0用.替换,连接起来就是一段摩尔斯密码了。
例如,“10 : 37 : 49”,可以用"01 0000 :011 0111 : 100 1001"表示,再转换一下,就是".- … : .-- .— : -… -…-"。
如果某一位只有一位数字,用0补齐,例如" 11 : 1 : 12"要转换为"11 : 01 : 12"。
好了,有关题目的介绍就到这里了,大家要不要试着编写一下函数,实现任意时间字符串的转换!

二、代码展示

下面直接展示一个我认为比较厉害的代码,也是网站获赞比较高的:

TO_MORSE = str.maketrans('01', '.-')

def to_morse(number, bits):
    """Return number in binary-Morse as a string with the given number of bits."""
    return "{0:0{1}b}".format(number, bits).translate(TO_MORSE)

def to_code(field):
    """Return a space-delimited string of binary-Morse digits."""
    tens, ones = divmod(int(field), 10)
    return "{} {}".format(to_morse(tens, 3), to_morse(ones, 4))

def checkio(data):
    """Return a string representing the time in a Morse code-like form."""
    return ' : '.join(map(to_code, data.split(':')))[1:] # Strip leading .

if __name__ == '__main__':    
    assert checkio("10:37:49") == ".- .... : .-- .--- : -.. -..-", "First Test"
    assert checkio("21:34:56") == "-. ...- : .-- .-.. : -.- .--.", "Second Test"
    assert checkio("11:10:12") == ".- ...- : ..- .... : ..- ..-.", "Third Test"
    assert checkio("23:59:59") == "-. ..-- : -.- -..- : -.- -..-", "Fourth Test"

三、代码分析

1. str.maketrans()

此函数实现字符串之间的相互转换,类似replace,区别是可以一次转换多个字符,需要借助translate()方法。用法如下:

>>> intab = "aeiou"
>>> outtab = "12345"
>>> test = "this is a test string"
>>> trans = str.maketrans(intab, outtab)
>>> result = test.translate(trans)
>>> print(result)
th3s 3s 1 t2st str3ng

2. 以二进制位基数格式化输出

另一个巧妙的方法是,通过"{0:0{1}b}".format(number, bits)"直接快速的以二进制形式输出了0,1格式的字符串。


四、总结

这个题自认为不是很难,怎奈自己没有想到最重要的二进制格式化输出,导致走了弯路。因此在此记录,与大家一同分享一下。

摩尔斯电码是一种通过短暂的电信号或灯光表达字母和数字的编码方式。在Python中可以用简单的方式实现摩尔斯电码的转换。 首先,我们可以定义一个摩尔斯电码的字典,将每个字母和数字对应的摩尔斯电码表示存储在字典中。然后,用户输入需要转换的字符串,我们可以将输入的字符串转换成大写并遍历每一个字符,根据字典的映射将每个字符转换成摩尔斯电码的形式。 接着,我们可以用点(.)表示短暂的信号,用横线(-)表示长时间的信号,用空格表示字母之间的间隔,用两个空格表示单词之间的间隔。然后,将转换好的摩尔斯电码打印输出或者以灯光的形式展现出来。 下面是一个简单的Python代码示例: ```python morse_code_dict = { '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': '--..', '0': '-----', '1': '.----', '2': '..---', '3': '...--', '4': '....-', '5': '.....', '6': '-....', '7': '--...', '8': '---..', '9': '----.' } def to_morse_code(message): morse_code = "" for char in message.upper(): if char != " ": if char in morse_code_dict: morse_code += morse_code_dict[char] + " " else: morse_code += " " return morse_code input_message = input("请输入需要转换的消息: ") morse_code = to_morse_code(input_message) print(f"摩尔斯电码: {morse_code}") ``` 通过这段简单的Python代码,我们可以输入需要转换的消息,然后得到对应的摩尔斯电码结果。这样就实现了一个简单的Python摩尔斯电码的功能。
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值