|
马上注册,结交更多好友,享用更多功能^_^
您需要 登录 才可以下载或查看,没有账号?立即注册
x
- 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 = list(x)
- result = []
- c = ("")
- for e in x_code:
- c = (c + int(y)) % len(a)
- result.append(b[c + y])
- print(result)
复制代码
怎么错的
请输入明文:LL
请输入的位数:2
Traceback (most recent call last):
File "C:/Users/10690/Desktop/莫斯密码(进化).py", line 16, in <module>
c = (c + int(y)) % len(a)
TypeError: can only concatenate str (not "int") to str
您的代码有几个错误,主要问题在于变量类型不匹配和逻辑错误。下面我将逐步解释并提供一个修正后的版本。
首先,错误分析:
- 在行 `c = (c + int(y)) % len(a)` 中,`c` 被初始化为空字符串 `""`,而 `int(y)` 是整数。Python 中字符串和整数不能直接相加,因此报错 `TypeError`。
- 其他问题:`a` 和 `b` 未定义,`result` 未初始化,循环中没有使用字符 `e`,导致逻辑错误。
修正思路:
- 定义字母表(例如大写字母)。
- 初始化 `result` 为空列表。
- 遍历每个字符,计算其在字母表中的新位置(加上偏移量后取模),并获取新字符。
- 处理非字母字符(保持不变)。
以下是修正后的代码示例:
- x = input("请输入明文:")
- y = input("请输入的位数:")
- # 定义字母表(假设为大写字母)
- a = "ABCDEFGHIJKLMNOPQRSTUVWXYZ"
- # 初始化结果列表
- result = []
- # 将明文转换为字符列表
- x_code = list(x)
- # 遍历每个字符
- for char in x_code:
- if char in a:
- # 计算字符在字母表中的索引
- index_old = a.index(char)
- # 计算新索引(加上偏移量并取模)
- index_new = (index_old + int(y)) % len(a)
- # 获取新字符并添加到结果
- new_char = a[index_new]
- result.append(new_char)
- else:
- # 如果字符不在字母表中,保持原样
- result.append(char)
- # 将结果列表转换为字符串并打印
- print(''.join(result))
复制代码
使用您的输入示例(明文 LL,位数 2),输出应为 NN(因为 L 在字母表中是第11个,加2后是13,对应 N)。
如果您的意图不同(例如使用自定义字母表),请调整变量 a 的定义。
以上回复来自 FishC AI 小助理,如未能正确解答您的问题,请继续追问。
|
|