鱼C论坛

 找回密码
 立即注册
查看: 75|回复: 3

[已解决]关于字典课程中例题代码运行出错的问题

[复制链接]
发表于 2024-11-29 23:00:38 | 显示全部楼层 |阅读模式

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

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

x
我在学习小甲鱼老师字典的课程时,尝试运行了课程中的代码范例,但在运行后均出错了,麻烦大神帮忙看下问题出在哪里,谢谢啦!

课程中的代码范例如下:

例子1
# 摩斯密文表
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]
print(result)


例子2
# 摩斯密码对比表
c_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 = [c_table[c_table.index(each) + 1] for each in split_code]
print(result)

例子3
# 摩斯密码对比表
c_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 = [c_table[each] for each in split_code]
print(result)

上述代码在实际运行中出错的信息烦请见附件.
最佳答案
7 天前
本帖最后由 jackz007 于 2024-11-30 10:49 编辑
# 摩斯密文表
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"]

e = dict(zip(d_table , c_table))
while True :
    s = input('请输入字符串 :')
    try :
        print(' ' . join(map(lambda x : e[x . upper()] , s)))
        break
    except :
        print('输入中含有无效字符\n')

d = dict(zip(c_table , d_table))
while True :
    s = input('请输入摩尔斯码 :')
    try :
        print('' . join(map(lambda x : d[x] , s . split(' '))))
        break
    except :
        print('输入中含有无效字符\n') 
        运行实况:
D:\[exercise]\Python>python x.py
请输入字符串 :abCdE
.- -... -.-. -.. .
请输入摩尔斯码 :.- -... -.-. -.. .
ABCDE

D:\[exercise]\Python>
例子1报错截屏.png
例子2报错截屏.png
例子3报错截屏.png
想知道小甲鱼最近在做啥?请访问 -> ilovefishc.com
回复

使用道具 举报

发表于 2024-11-29 23:00:56 | 显示全部楼层
你好!看起来你的代码示例中有一些问题,主要是由于字典未正确定义和使用。让我们逐一检查并修正每个例子:

**例子1**
# 摩斯密文表(假设要定义)
c_table = {"A": ".-", "B": "-...", "C": "-.-."}  # 示例内容
# 摩斯明文表(假设要定义)
d_table = {".-": "A", "-...": "B", "-.-.": "C"}  # 示例内容

code = input("请输入摩斯密码:")
split_code = code.split(" ")
result = [d_table[each] for each in split_code if each in d_table]  # 需要从d_table中查找每个字符
print(result)

**例子2**
# 摩斯密码对比表
c_table = {".-": "A", "-...": "B", "-.-.": "C"}  # 示例内容

code = input("请输入摩斯密码:")
split_code = code.split(" ")
result = [c_table[each] for each in split_code if each in c_table]  # 需要从c_table中查找每个字符
print(result)

**例子3**
你的第三个例子已经接近正确,只是需要确保在列表解析中从字典中查找,而不是直接引用字典:
# 摩斯密码对比表
c_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 = [c_table[each] for each in split_code if each in c_table]
print(result)

如果你的字典元素不完整或者你尝试使用未经定义的字典,你的代码就会出错。另外,假设摩斯密码输入是用空格分隔的字符。在`result`列表中,确保每一个`each`都存在于字典中,这样可以避免KeyError。

如果有其他问题,请随时告诉我!

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

使用道具 举报

发表于 7 天前 | 显示全部楼层
课程中的代码范例是将摩斯密码转换为字母,而不是将字母转换为摩斯密码。
尝试输入
.... . .-.. .-.. ---
代码将会输出HELLO
想知道小甲鱼最近在做啥?请访问 -> ilovefishc.com
回复 支持 反对

使用道具 举报

发表于 7 天前 | 显示全部楼层    本楼为最佳答案   
本帖最后由 jackz007 于 2024-11-30 10:49 编辑
# 摩斯密文表
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"]

e = dict(zip(d_table , c_table))
while True :
    s = input('请输入字符串 :')
    try :
        print(' ' . join(map(lambda x : e[x . upper()] , s)))
        break
    except :
        print('输入中含有无效字符\n')

d = dict(zip(c_table , d_table))
while True :
    s = input('请输入摩尔斯码 :')
    try :
        print('' . join(map(lambda x : d[x] , s . split(' '))))
        break
    except :
        print('输入中含有无效字符\n') 
        运行实况:
D:\[exercise]\Python>python x.py
请输入字符串 :abCdE
.- -... -.-. -.. .
请输入摩尔斯码 :.- -... -.-. -.. .
ABCDE

D:\[exercise]\Python>
想知道小甲鱼最近在做啥?请访问 -> ilovefishc.com
回复 支持 反对

使用道具 举报

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

本版积分规则

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

GMT+8, 2024-12-7 03:40

Powered by Discuz! X3.4

© 2001-2023 Discuz! Team.

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