L先生996 发表于 2025-10-22 12:55:29

请求帮助!

x = input("请输入明文:")
y = input("请输入的位数:")

a = ["A", "B", "C", "D", "E", "F", "G", "H", "I", "J", "K", "L", "M", "N",
   "O", "P", "Q", "R", "S", "T", "U", "W", "X", "Y", "Z"]
b = [".-", "-...", "-.-.", "-..", ".", "..-.", "--.", "....", "..", ".---",
   "-.-", ".-..", "--", "-.", "---", ".--.", "--.-", ".-.", "...", "-",
   "..-", "...-", ".--", "-..-", "-.--", "--..", ".----", "..---", "...--",
   "....-", ".....", "-....", "--...", "---..", "----.", "-----"]

x_code = x.split("")

result = []
for e in x_code:
    c = a.index(e)
    result.append(b)
print(result)
感觉有错怎么改
错误:
请输入明文:LLLLLLLL
请输入的位数:2
Traceback (most recent call last):
File "C:/Users/10690/Desktop/莫斯密码(进化).py", line 11, in <module>
    x_code = x.split("")
ValueError: empty separator

FishC 发表于 2025-10-22 12:57:28

您好!看到您的代码有几个问题,我来帮您逐一分析和修复。

首先,主要错误在 x.split("") 这一行。在 Python 中,split() 方法不能使用空字符串作为分隔符,这会导致 ValueError。您可能是想将字符串分割成单个字符,正确的方法是使用 list(x) 或直接遍历字符串。

其次,其他部分代码不完整或逻辑有误:
- 变量 a 和 b 未定义,需要您提供映射列表(例如莫斯密码的字符和对应编码)。
- result 未初始化,应该先设置为空列表。
- 循环中 result.append(b) 可能应该是追加 b(即根据索引获取对应编码)。
- 输入 y(位数)未使用,如果您想实现移位或其他功能,需要额外代码。

以下是修复后的代码示例,假设 a 是字符列表,b 是对应的莫斯编码列表,并且忽略 y(位数)的用途(如果您需要用到 y,请补充说明):


# 定义莫斯密码映射(示例,仅部分字符)
a = ['A', 'B', 'C', 'L', 'M', 'N']# 字符列表
b = ['.-', '-...', '-.-.', '.-..', '--', '-.']# 对应莫斯编码

x = input("请输入明文:")
y = input("请输入的位数:")# 目前未使用,您可以根据需要修改代码

x_code = list(x)# 将字符串转换为字符列表,修复了 split 错误
result = []# 初始化结果列表

for e in x_code:
    if e in a:# 检查字符是否在映射中
      c = a.index(e)
      result.append(b)# 追加对应的莫斯编码
    else:
      print(f"警告:字符 '{e}' 不在映射列表中,已跳过。")

print("编码结果:", result)


说明:
- 使用 list(x) 替代 x.split("") 来分割字符。
- 添加了检查字符是否在 a 中的逻辑,避免找不到索引的错误。
- 如果您的 y 是用于移位(例如凯撒密码),可以在循环中修改 c 的值,例如 c = (c + int(y)) % len(a)。

如果这不是您想要的,请提供更多细节,我会进一步协助!

以上回复来自 FishC AI 小助理,如未能正确解答您的问题,请继续追问。

jackz007 发表于 2025-10-22 13:16:59

本帖最后由 jackz007 于 2025-10-22 13:18 编辑

x = input("请输入明文:")
y = input("请输入的位数:")

a = ["A", "B", "C", "D", "E", "F", "G", "H", "I", "J", "K", "L", "M", "N",
   "O", "P", "Q", "R", "S", "T", "U", "W", "X", "Y", "Z"]
b = [".-", "-...", "-.-.", "-..", ".", "..-.", "--.", "....", "..", ".---",
   "-.-", ".-..", "--", "-.", "---", ".--.", "--.-", ".-.", "...", "-",
   "..-", "...-", ".--", "-..-", "-.--", "--..", ".----", "..---", "...--",
   "....-", ".....", "-....", "--...", "---..", "----.", "-----"]

result = []
for e in x :
    c = a . index(e)
    result . append(b[(c + int(y)) % len(a)])   # 如果 c + int(y) > 25,b 会下标越界
print(result)

      【运行实况】:
D:\\>python mos.py
请输入明文:LLLLLLLL
请输入的位数:2
['-.', '-.', '-.', '-.', '-.', '-.', '-.', '-.']

D:\\>python mos.py
请输入明文:ZZZZZZZZ
请输入的位数:2
['-...', '-...', '-...', '-...', '-...', '-...', '-...', '-...']

D:\\>
页: [1]
查看完整版本: 请求帮助!