鱼C论坛

 找回密码
 立即注册
查看: 175|回复: 10

[已解决]B站37讲摩斯密码报错

[复制链接]
发表于 2024-7-29 16:14:05 | 显示全部楼层 |阅读模式

马上注册,结交更多好友,享用更多功能^_^

您需要 登录 才可以下载或查看,没有账号?立即注册

x
在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 = [d_table[c_table.index(each)] for each in split_code]
Traceback (most recent call last):
  File "<pyshell#7>", line 1, in <module>
    result = [d_table[c_table.index(each)] for each in split_code]
ValueError: '' is not in list
最佳答案
2024-7-30 15:03:00
可能是你的输入有些问题
在 IDLE 中输入 code = input("请输入摩斯密码: ") 并按下回车,Python 会提示你 “请输入摩斯密码:”
此时必须输入一串摩斯密码,不同摩斯密码间以一个空格作为间隔,开头和结尾都不能有空格
示例
.- .- ...- ...-
从你的报错看,你很有可能没有输入,或者出现了两个相邻的空格,导致code.split(" ")拆分出空字符串,进而引起报错
想知道小甲鱼最近在做啥?请访问 -> ilovefishc.com
回复

使用道具 举报

发表于 2024-7-29 16:14:18 | 显示全部楼层
哈哈,看来你在摩斯密码的海洋里遇到了一点小浪涡!让我们来看看你的代码,帮你划回安全水域。

从错误信息来看,问题出在这行代码上:
result = [d_table for each in split_code]

这里有几个潜在问题:

1. **摩斯明文表 (d_table)** 没有定义:你在代码中提到了 `d_table`,但并没有给出它的实际内容。确保它包含摩斯代码与字母之间的对应关系。例如,它可能是一个字典(dictionary),像这样:

d_table = {'.-': 'A', '-...': 'B', '-.-.': 'C', ... }  # 继续添加其他字符

2. **迭代分割的摩斯密码**:在你的代码里,你试图用 `d_table` 直接替换分割后得到的摩斯密码。这其实应该是查找而不是替换。可以改成用 `d_table.get()` 来获取每一段摩斯密码对应的字符。例如:

result = [d_table.get(each, '') for each in split_code]

   这里 `d_table.get(each, '')` 是在查找当前摩斯代码对应的字符,如果没找到,就返回空字符串,这样就不会报错了。

最终完整的代码示例可能如下所示:
# 摩斯密码对照表
d_table = {
    '.-': 'A',
    '-...': 'B',
    '-.-.': 'C',
    # 继续添加其他摩斯码和字母
}

code = input("请输入摩斯密码: ")
split_code = code.split(" ")
result = [d_table.get(each, '') for each in split_code]
decoded_message = ''.join(result)
print("解码结果:", decoded_message)

这样调整后再试试看,应该能顺利输出解码结果!搞定摩斯密码,成为编程的小超人!如果有其他问题,随时问我哦!

以上回复来自 FishC AI 小助理,如未能正确解答您的问题,请继续追问。
想知道小甲鱼最近在做啥?请访问 -> ilovefishc.com
回复 支持 反对

使用道具 举报

 楼主| 发表于 2024-7-29 16:19:19 | 显示全部楼层
FishC 发表于 2024-7-29 16:14
哈哈,看来你在摩斯密码的海洋里遇到了一点小浪涡!让我们来看看你的代码,帮你划回安全水域。

从错误信 ...

谢谢小助理的回复。我还有一个问题:为什么我输入“code = input("请输入摩斯密码: ")”后,按enter键进行换行时会生成“请输入摩斯密码:”,而你的却没有?
想知道小甲鱼最近在做啥?请访问 -> ilovefishc.com
回复 支持 反对

使用道具 举报

发表于 2024-7-29 16:19:29 | 显示全部楼层
William01 发表于 2024-07-29 16:19
谢谢小助理的回复。我还有一个问题:为什么我输入“co ...


哈哈,好问题!其实这个现象是由于输入的方式不同导致的。

在你的代码中,当你运行 `code = input("请输入摩斯密码: ")` 时,程序会在控制台输出“请输入摩斯密码:”这句话,然后等着你输入。按下 Enter 键后,它才会开始处理你输入的内容。

而在我的回答中,我只是给你提供了一个代码示例,并没有实际执行它,所以没有看到这个提示的信息。如果你把整个代码粘贴到你的 Python 环境中运行时,它就会像你输入的那样显示提示信息。

可以想象成我在这里写代码就像是在纸上做笔记,而你在自己的电脑上运行代码就是在实际执行这些笔记。所以如果你在自己的 IDE 或交互式 Python 环境中运行这段代码,就能看到这个提示,然后输入你的摩斯密码。

所以,你在实际输入时看到“请输入摩斯密码:”是正常现象哦!继续加油,有问题再来问我,咱们一起解决!

以上回复来自 FishC AI 小助理,如未能正确解答您的问题,请继续追问。
想知道小甲鱼最近在做啥?请访问 -> ilovefishc.com
回复 支持 反对

使用道具 举报

 楼主| 发表于 2024-7-29 16:22:45 | 显示全部楼层
FishC 发表于 2024-7-29 16:14
哈哈,看来你在摩斯密码的海洋里遇到了一点小浪涡!让我们来看看你的代码,帮你划回安全水域。

从错误信 ...

另一个问题,我对“d_table”是有定义的,# 摩斯明文表不就是对“d_table”的定义吗?
想知道小甲鱼最近在做啥?请访问 -> ilovefishc.com
回复 支持 反对

使用道具 举报

发表于 2024-7-29 16:22:54 | 显示全部楼层
William01 发表于 2024-07-29 16:22
另一个问题,我对“d_table”是有定义的,# 摩斯明文 ...


哦,原来如此!你提到的“摩斯明文表”确实是指 `d_table` 的定义部分。不过为了确保没有误解,我们来详细看看你是如何定义 `d_table` 的。可能是某种小疏漏导致了报错。

一般来说,`d_table` 应该是一个包含摩斯码与对应字母的映射表。如果是在代码中,你可以把它写成字典(dictionary)的形式,比如这样:
# 摩斯密码对照表
d_table = {
    '.-': 'A',
    '-...': 'B',
    '-.-.': 'C',
    # 继续添加其他字符...
    ' ': ' ',  # 可以加上空格以处理分隔符
}

你的代码尝试使用 `result = [d_table for each in split_code]`,但是这里有个小错误。应该是尝试用 `d_table.get(each, '')` 来替代,这样才能从 `d_table` 中获取每个摩斯码对应的字母。这样可以避免找不到对应项而导致报错。

完整的代码示例如下:
# 摩斯密码对照表
d_table = {
    '.-': 'A',
    '-...': 'B',
    '-.-.': 'C',
    # 继续添加其他字符...
}

code = input("请输入摩斯密码: ")
split_code = code.split(" ")
result = [d_table.get(each, '') for each in split_code]  # 用 .get() 来查找
decoded_message = ''.join(result)
print("解码结果:", decoded_message)

请确保你的 `d_table` 定义正确、完整,并且代码逻辑符合预期,这样就能顺利运行了!如有仍然困惑的地方,随时问我哦,我们一起弄清楚!

以上回复来自 FishC AI 小助理,如未能正确解答您的问题,请继续追问。
想知道小甲鱼最近在做啥?请访问 -> ilovefishc.com
回复 支持 反对

使用道具 举报

 楼主| 发表于 2024-7-29 17:04:59 | 显示全部楼层
FishC 发表于 2024-7-29 16:22
哦,原来如此!你提到的“摩斯明文表”确实是指 `d_table` 的定义部分。不过为了确保没有误解,我们来 ...

谢谢小助理的回复。但是,我看到视频里用的就是代码“result = [d_table[c_table.index(each)] for each in split_code]”,而且没有任何问题。为什么我的会有问题呢?这是我不明白的地方。
想知道小甲鱼最近在做啥?请访问 -> ilovefishc.com
回复 支持 反对

使用道具 举报

发表于 2024-7-29 17:05:10 | 显示全部楼层
William01 发表于 2024-07-29 17:04
谢谢小助理的回复。但是,我看到视频里用的就是代码“ ...


Ah, 明白了!看来这里可能是对列表推导式的用法有点误解。让我们来细致地分析一下!

在你提到的代码行:
result = [d_table for each in split_code]

这个表达式中的 `d_table` 是一个整体,而你应该是想要从 `d_table` 中使用每个 `each`(即分割后的摩斯码)去查找对应的字母,而不是直接把 `d_table` 加入到结果列表中。

如果原作者的代码是这样写的,可能有问题,因为它没有正确地从 `d_table` 中获取字符。正确的写法应该是:
result = [d_table.get(each, '') for each in split_code]

在这个版本中,`d_table.get(each, '')` 会根据每个 `each`(也就是各个摩斯编码)从 `d_table` 中直接获取对应的字母,如果找不到就返回一个空字符串。

### 这样写的意图:

- **获取对应字母**:你希望将每个摩斯码转换为其相应的字母,这是通过 `get()` 方法实现的。
- **处理找不到的情况**:如果输入的摩斯码不在 `d_table` 中,返回一个空字符串而不会引发错误。

所以,总结一下,可能是由于 `d_table` 的定义和使用方式不同,导致你遇到了问题。确保 `d_table` 是一个字典,并且使用 `.get()` 方法来获取值,这样才能避免 “ValueError” 报错。

希望这能帮你厘清思路!如果还有其他疑问,随时来问哦!

以上回复来自 FishC AI 小助理,如未能正确解答您的问题,请继续追问。
想知道小甲鱼最近在做啥?请访问 -> ilovefishc.com
回复 支持 反对

使用道具 举报

发表于 2024-7-30 15:03:00 | 显示全部楼层    本楼为最佳答案   
可能是你的输入有些问题
在 IDLE 中输入 code = input("请输入摩斯密码: ") 并按下回车,Python 会提示你 “请输入摩斯密码:”
此时必须输入一串摩斯密码,不同摩斯密码间以一个空格作为间隔,开头和结尾都不能有空格
示例
.- .- ...- ...-
从你的报错看,你很有可能没有输入,或者出现了两个相邻的空格,导致code.split(" ")拆分出空字符串,进而引起报错
想知道小甲鱼最近在做啥?请访问 -> ilovefishc.com
回复 支持 反对

使用道具 举报

 楼主| 发表于 2024-7-30 15:31:10 | 显示全部楼层
smallwh 发表于 2024-7-30 15:03
可能是你的输入有些问题
在 IDLE 中输入 code = input("请输入摩斯密码: ") 并按下回车,Python 会提示你  ...

谢谢您的热心回复,这个问题我已经解决了,直接把code.split(" ")里面的双引号给删了就行了。但是在“run model”的时候遇到了另一个问题,会出现invalid decimal literal的报错,不知道怎么回事。您要是知道的话,还请帮忙解决,谢谢!
想知道小甲鱼最近在做啥?请访问 -> ilovefishc.com
回复 支持 反对

使用道具 举报

 楼主| 发表于 2024-8-1 11:34:08 | 显示全部楼层
问题已经解决了,是我编辑器的模式没用对
想知道小甲鱼最近在做啥?请访问 -> ilovefishc.com
回复 支持 反对

使用道具 举报

您需要登录后才可以回帖 登录 | 立即注册

本版积分规则

小黑屋|手机版|Archiver|鱼C工作室 ( 粤ICP备18085999号-1 | 粤公网安备 44051102000585号)

GMT+8, 2024-11-23 20:18

Powered by Discuz! X3.4

© 2001-2023 Discuz! Team.

快速回复 返回顶部 返回列表