鱼C论坛

 找回密码
 立即注册
查看: 50|回复: 2

[已解决]请求帮助!

[复制链接]
发表于 昨天 14:42 | 显示全部楼层 |阅读模式

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

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

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

  3. a = "ABCDEFGHIJKLMNOPQRSTUVWXYZ"
  4. b = [".-", "-...", "-.-.", "-..", ".", "..-.", "--.", "....", "..", ".---",
  5.      "-.-", ".-..", "--", "-.", "---", ".--.", "--.-", ".-.", "...", "-",
  6.      "..-", "...-", ".--", "-..-", "-.--", "--..", ".----", "..---", "...--",
  7.      "....-", ".....", "-....", "--...", "---..", "----.", "-----"]
  8. x_code = list(x)
  9. result = []
  10. c = []
  11. for e in x_code:
  12.     if e in a:
  13.         c_old = a.index(e)
  14.         c_new = (c + int(y)) % len(a)
  15.         new_result = a[c_new]
  16.         result.append(new_result)
  17.     else:
  18.         result.append(e)
  19. print(''.join(result))
复制代码

为什么?
错误:
请输入明文:LLL
请输入的位数:2
Traceback (most recent call last):
  File "C:/Users/10690/Desktop/莫斯密码(进化).py", line 15, in <module>
    c_new = (c + int(y)) % len(a)
TypeError: can only concatenate list (not "int") to list
最佳答案
昨天 17:44
原因非常明确:

  1. TypeError: can only concatenate list (not "int") to list
复制代码

意思是:鱼油试图把一个 list 和一个 int 相加。
问题出在这一行:

  1. c_new = (c + int(y)) % len(a)
复制代码

c 在程序中定义为:

  1. c = []
复制代码

也就是说它是一个 空列表。

但你在循环中其实是想对每个字母的索引(即整数 c_old)进行位移运算,而不是用列表 c。

正确写法:把 c 改成 c_old 就可以了:

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

  3. a = "ABCDEFGHIJKLMNOPQRSTUVWXYZ"
  4. b = [".-", "-...", "-.-.", "-..", ".", "..-.", "--.", "....", "..", ".---",
  5.      "-.-", ".-..", "--", "-.", "---", ".--.", "--.-", ".-.", "...", "-",
  6.      "..-", "...-", ".--", "-..-", "-.--", "--..", ".----", "..---", "...--",
  7.      "....-", ".....", "-....", "--...", "---..", "----.", "-----"]

  8. x_code = list(x)
  9. result = []

  10. for e in x_code:
  11.     if e in a:
  12.         c_old = a.index(e)
  13.         c_new = (c_old + int(y)) % len(a)
  14.         new_result = a[c_new]
  15.         result.append(new_result)
  16.     else:
  17.         result.append(e)

  18. print(''.join(result))
复制代码
小甲鱼最新课程 -> https://ilovefishc.com
回复

使用道具 举报

发表于 昨天 14:43 | 显示全部楼层
您的代码出现了类型错误(TypeError),主要是因为变量 c 没有被正确初始化和使用。在循环中,您试图将列表类型的 c 与整数 int(y) 相加,但Python不允许这种操作。此外,代码中一些变量(如 result)没有初始化,会导致其他错误。

错误的具体原因:
- 在计算新索引时,使用了未定义的变量 c,而不是当前字符的索引 c_old
- 变量 c 可能被错误地赋值为列表,但实际应该是一个整数。
- 变量 result 没有初始化为空列表,会导致 append 方法失败。

修正后的代码应该:
1. 初始化 result 为空列表。
2. 在循环中使用 c_old 而不是 c 来计算新索引。
3. 删除不必要的变量(如 bc)。

以下是修正后的代码,它实现了凯撒密码加密功能(将明文根据指定位数移位):


  1. x = input("请输入明文:")
  2. y = input("请输入的位数:")
  3. a = "ABCDEFGHIJKLMNOPQRSTUVWXYZ"
  4. x_code = list(x)
  5. result = []  # 初始化结果列表
  6. for e in x_code:
  7.     if e in a:
  8.         c_old = a.index(e)  # 获取当前字符在字母表中的索引
  9.         c_new = (c_old + int(y)) % len(a)  # 计算新索引
  10.         new_result = a[c_new]  # 根据新索引获取字符
  11.         result.append(new_result)
  12.     else:
  13.         result.append(e)  # 非字母字符直接添加
  14. print(''.join(result))
复制代码


使用您的输入示例(明文"LLL",位数2),输出将是"NNN",因为L在字母表中索引为11,加2后取模得到13,对应字符N。

如果还有其他问题,请随时追问!

以上回复来自 FishC AI 小助理,如未能正确解答您的问题,请继续追问。
小甲鱼最新课程 -> https://ilovefishc.com
回复 支持 反对

使用道具 举报

发表于 昨天 17:44 | 显示全部楼层    本楼为最佳答案   
原因非常明确:

  1. TypeError: can only concatenate list (not "int") to list
复制代码

意思是:鱼油试图把一个 list 和一个 int 相加。
问题出在这一行:

  1. c_new = (c + int(y)) % len(a)
复制代码

c 在程序中定义为:

  1. c = []
复制代码

也就是说它是一个 空列表。

但你在循环中其实是想对每个字母的索引(即整数 c_old)进行位移运算,而不是用列表 c。

正确写法:把 c 改成 c_old 就可以了:

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

  3. a = "ABCDEFGHIJKLMNOPQRSTUVWXYZ"
  4. b = [".-", "-...", "-.-.", "-..", ".", "..-.", "--.", "....", "..", ".---",
  5.      "-.-", ".-..", "--", "-.", "---", ".--.", "--.-", ".-.", "...", "-",
  6.      "..-", "...-", ".--", "-..-", "-.--", "--..", ".----", "..---", "...--",
  7.      "....-", ".....", "-....", "--...", "---..", "----.", "-----"]

  8. x_code = list(x)
  9. result = []

  10. for e in x_code:
  11.     if e in a:
  12.         c_old = a.index(e)
  13.         c_new = (c_old + int(y)) % len(a)
  14.         new_result = a[c_new]
  15.         result.append(new_result)
  16.     else:
  17.         result.append(e)

  18. print(''.join(result))
复制代码
小甲鱼最新课程 -> https://ilovefishc.com
回复 支持 反对

使用道具 举报

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

本版积分规则

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

GMT+8, 2025-10-23 04:59

Powered by Discuz! X3.4

© 2001-2023 Discuz! Team.

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