B站37讲摩斯密码报错
在B站学习第37讲,请问为什么会报错?谢谢!代码如下
# 摩斯密码对照表
c_table = [".-", "-...", "-.-", "-..", ".", "..-.", "--.", "....", "..", ".---", "-.-", ".-..", "--", "-", "..-", "...-", ".--", "-..-", "-.--", "--..", ".----", "..---", "...--", "...-", ".....", "-....", "--...", "---..", "----.", "-----"]
# 摩斯明文表
d_table = ["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", "1", "2", "3", "4", "5", "6", "7", "8", "9", "0"]
code = input("请输入摩斯密码: ")
请输入摩斯密码:
split_code = code.split(" ")
result = for each in split_code]
Traceback (most recent call last):
File "<pyshell#7>", line 1, in <module>
result = for each in split_code]
ValueError: '' is not in list 哈哈,看来你在摩斯密码的海洋里遇到了一点小浪涡!让我们来看看你的代码,帮你划回安全水域。
从错误信息来看,问题出在这行代码上:
result =
这里有几个潜在问题:
1. **摩斯明文表 (d_table)** 没有定义:你在代码中提到了 `d_table`,但并没有给出它的实际内容。确保它包含摩斯代码与字母之间的对应关系。例如,它可能是一个字典(dictionary),像这样:
d_table = {'.-': 'A', '-...': 'B', '-.-.': 'C', ... }# 继续添加其他字符
2. **迭代分割的摩斯密码**:在你的代码里,你试图用 `d_table` 直接替换分割后得到的摩斯密码。这其实应该是查找而不是替换。可以改成用 `d_table.get()` 来获取每一段摩斯密码对应的字符。例如:
result =
这里 `d_table.get(each, '')` 是在查找当前摩斯代码对应的字符,如果没找到,就返回空字符串,这样就不会报错了。
最终完整的代码示例可能如下所示:
# 摩斯密码对照表
d_table = {
'.-': 'A',
'-...': 'B',
'-.-.': 'C',
# 继续添加其他摩斯码和字母
}
code = input("请输入摩斯密码: ")
split_code = code.split(" ")
result =
decoded_message = ''.join(result)
print("解码结果:", decoded_message)
这样调整后再试试看,应该能顺利输出解码结果!搞定摩斯密码,成为编程的小超人!如果有其他问题,随时问我哦!
以上回复来自 FishC AI 小助理,如未能正确解答您的问题,请继续追问。 FishC 发表于 2024-7-29 16:14
哈哈,看来你在摩斯密码的海洋里遇到了一点小浪涡!让我们来看看你的代码,帮你划回安全水域。
从错误信 ...
谢谢小助理的回复。我还有一个问题:为什么我输入“code = input("请输入摩斯密码: ")”后,按enter键进行换行时会生成“请输入摩斯密码:”,而你的却没有? William01 发表于 2024-07-29 16:19
谢谢小助理的回复。我还有一个问题:为什么我输入“co ...
哈哈,好问题!其实这个现象是由于输入的方式不同导致的。
在你的代码中,当你运行 `code = input("请输入摩斯密码: ")` 时,程序会在控制台输出“请输入摩斯密码:”这句话,然后等着你输入。按下 Enter 键后,它才会开始处理你输入的内容。
而在我的回答中,我只是给你提供了一个代码示例,并没有实际执行它,所以没有看到这个提示的信息。如果你把整个代码粘贴到你的 Python 环境中运行时,它就会像你输入的那样显示提示信息。
可以想象成我在这里写代码就像是在纸上做笔记,而你在自己的电脑上运行代码就是在实际执行这些笔记。所以如果你在自己的 IDE 或交互式 Python 环境中运行这段代码,就能看到这个提示,然后输入你的摩斯密码。
所以,你在实际输入时看到“请输入摩斯密码:”是正常现象哦!继续加油,有问题再来问我,咱们一起解决!
以上回复来自 FishC AI 小助理,如未能正确解答您的问题,请继续追问。 FishC 发表于 2024-7-29 16:14
哈哈,看来你在摩斯密码的海洋里遇到了一点小浪涡!让我们来看看你的代码,帮你划回安全水域。
从错误信 ...
另一个问题,我对“d_table”是有定义的,# 摩斯明文表不就是对“d_table”的定义吗? William01 发表于 2024-07-29 16:22
另一个问题,我对“d_table”是有定义的,# 摩斯明文 ...
哦,原来如此!你提到的“摩斯明文表”确实是指 `d_table` 的定义部分。不过为了确保没有误解,我们来详细看看你是如何定义 `d_table` 的。可能是某种小疏漏导致了报错。
一般来说,`d_table` 应该是一个包含摩斯码与对应字母的映射表。如果是在代码中,你可以把它写成字典(dictionary)的形式,比如这样:
# 摩斯密码对照表
d_table = {
'.-': 'A',
'-...': 'B',
'-.-.': 'C',
# 继续添加其他字符...
' ': ' ',# 可以加上空格以处理分隔符
}
你的代码尝试使用 `result = `,但是这里有个小错误。应该是尝试用 `d_table.get(each, '')` 来替代,这样才能从 `d_table` 中获取每个摩斯码对应的字母。这样可以避免找不到对应项而导致报错。
完整的代码示例如下:
# 摩斯密码对照表
d_table = {
'.-': 'A',
'-...': 'B',
'-.-.': 'C',
# 继续添加其他字符...
}
code = input("请输入摩斯密码: ")
split_code = code.split(" ")
result = # 用 .get() 来查找
decoded_message = ''.join(result)
print("解码结果:", decoded_message)
请确保你的 `d_table` 定义正确、完整,并且代码逻辑符合预期,这样就能顺利运行了!如有仍然困惑的地方,随时问我哦,我们一起弄清楚!
以上回复来自 FishC AI 小助理,如未能正确解答您的问题,请继续追问。 FishC 发表于 2024-7-29 16:22
哦,原来如此!你提到的“摩斯明文表”确实是指 `d_table` 的定义部分。不过为了确保没有误解,我们来 ...
谢谢小助理的回复。但是,我看到视频里用的就是代码“result = for each in split_code]”,而且没有任何问题。为什么我的会有问题呢?这是我不明白的地方。 William01 发表于 2024-07-29 17:04
谢谢小助理的回复。但是,我看到视频里用的就是代码“ ...
Ah, 明白了!看来这里可能是对列表推导式的用法有点误解。让我们来细致地分析一下!
在你提到的代码行:
result =
这个表达式中的 `d_table` 是一个整体,而你应该是想要从 `d_table` 中使用每个 `each`(即分割后的摩斯码)去查找对应的字母,而不是直接把 `d_table` 加入到结果列表中。
如果原作者的代码是这样写的,可能有问题,因为它没有正确地从 `d_table` 中获取字符。正确的写法应该是:
result =
在这个版本中,`d_table.get(each, '')` 会根据每个 `each`(也就是各个摩斯编码)从 `d_table` 中直接获取对应的字母,如果找不到就返回一个空字符串。
### 这样写的意图:
- **获取对应字母**:你希望将每个摩斯码转换为其相应的字母,这是通过 `get()` 方法实现的。
- **处理找不到的情况**:如果输入的摩斯码不在 `d_table` 中,返回一个空字符串而不会引发错误。
所以,总结一下,可能是由于 `d_table` 的定义和使用方式不同,导致你遇到了问题。确保 `d_table` 是一个字典,并且使用 `.get()` 方法来获取值,这样才能避免 “ValueError” 报错。
希望这能帮你厘清思路!如果还有其他疑问,随时来问哦!
以上回复来自 FishC AI 小助理,如未能正确解答您的问题,请继续追问。 可能是你的输入有些问题
在 IDLE 中输入 code = input("请输入摩斯密码: ") 并按下回车,Python 会提示你 “请输入摩斯密码:”
此时必须输入一串摩斯密码,不同摩斯密码间以一个空格作为间隔,开头和结尾都不能有空格
示例.- .- ...- ...-
从你的报错看,你很有可能没有输入,或者出现了两个相邻的空格,导致code.split(" ")拆分出空字符串,进而引起报错 smallwh 发表于 2024-7-30 15:03
可能是你的输入有些问题
在 IDLE 中输入 code = input("请输入摩斯密码: ") 并按下回车,Python 会提示你...
谢谢您的热心回复,这个问题我已经解决了,直接把code.split(" ")里面的双引号给删了就行了。但是在“run model”的时候遇到了另一个问题,会出现invalid decimal literal的报错,不知道怎么回事。您要是知道的话,还请帮忙解决,谢谢! 问题已经解决了,是我编辑器的模式没用对{:5_96:}
页:
[1]