Python初学者编写摩尔斯电码转换器遇TypeError,要求不使用字典集合
问题原因&解决方法
核心错误说明
- 你定义
morse列表时使用了==比较运算符,该符号的作用是判断左右两侧的值是否相等,执行后你的列表内所有元素都是布尔值False,完全没有存储字符与摩尔斯电码的对应关系 - Python的列表仅支持使用整数作为下标访问元素,你直接用输入的字符作为索引取
morse[i],不符合列表的使用规则,因此触发TypeError
符合要求的修改方案
因为你要求不能使用字典,我们可以用两个并行的列表存储对应关系,一个列表存原字符,另一个列表对应位置存摩尔斯码,匹配时找到字符的下标,再取对应位置的摩尔斯码即可,完整可运行代码如下:
# 两个列表位置一一对应,chars[n]的摩尔斯码就是morse_codes[n] chars = [',', '?', '.', ' ', '0', '1', '2', '3', '4', '5', '6', '7', '8', '9', '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'] morse_codes = ['--..--', '..--..', '.-.-.-', ' ', '-----', '.----', '..---', '...--', '....-', '.....', '-....', '--...', '---..', '----.', '.-', '-...', '-.-.', '-..', '.', '..-.', '--.', '....', '..', '.---', '-.-', '.-..', '--', '-.', '---', '.--.', '--.-', '.-.', '...', '-', '..-', '...-', '.--', '-..-', '-.--', '--..'] userInput = input('Enter your sentence to be converted to morse code.: ') morseOutput = '' for char in userInput: # 把输入字符转大写,匹配我们存的大写字母规则 upper_char = char.upper() # 找到字符在chars列表里的下标,取对应位置的摩尔斯码 idx = chars.index(upper_char) morseOutput += morse_codes[idx] + ' ' # 加空格分隔每个字符的摩尔斯码,更易读 print(morseOutput)
注:如果输入的字符不在chars列表范围内,会触发ValueError,你可以根据需要增加异常判断逻辑,这里先实现基础转换功能。
内容的提问来源于stack exchange,提问作者plongplong
相关产品推荐
相关产品推荐

