鱼C论坛

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

python第28讲课后习题

[复制链接]
发表于 2025-4-23 18:47:50 | 显示全部楼层 |阅读模式

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

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

x
for each in x:
    if x.count(each) > 1 and flag == 0:
        i = x.find(each)
        last = y[i]
        while i != -1:
            if last != y[i]:
                print("由于替换字符出现冲突,该密文无法解密!")
                flag = -1
                break
   
            i = x.find(each, i+1)
这里面i=x.find(each),而each又是x里面的元素,所以i不可能=-1吧,而 last != y[i]怎么成立的哦
这里的flag的作用在哪里?if x.count(each) > 1 and flag == 0:直接写成 if x.count(each)>1:可以不?
"如果 x 中存在相同的字符,那么 y 对应下标的字符也应该是相同的"这句话什么意思呢?
小甲鱼最新课程 -> https://ilovefishc.com
回复

使用道具 举报

发表于 2025-4-23 18:48:49 | 显示全部楼层
问题解答

  • 关于 i = x.find(each) 的判断
    i = x.find(each) 首次查找时,因为 eachx 中的字符,所以 i 不可能为 -1。但后续的 i = x.find(each, i+1) 可能会返回 -1(当后续没有重复字符时)。此时循环会终止。
  • last != y 的成立条件
    原代码存在逻辑漏洞。从上下文看,last 应记录前一次 y 对应位置的字符,但代码中 last = y(可能应为 last = y[i])。若未正确处理,当同一字符在 x 多次出现但对应 y 的字符不同时,会触发错误。
  • flag 的作用
    flag == 0 用于控制“仅首次出现冲突时处理”。如果删除 flag 的判断,会导致重复检查相同字符多次。例如:

    1. if x.count(each) > 1:  # 可能多次进入判断
    2.     while...          # 导致重复输出错误信息
    复制代码

  • “相同字符对应 y 应相同”的含义
    假设 x = "abb",对应的 y = "xyz"。此时 x[1]x[2] 都是 'b',那么 y[1]y[2] 必须相同(比如 y = "xzz")。否则解密时无法确定 'b' 到底对应哪个字符。


改进建议代码

  1. flag = 0
  2. for each in x:
  3.     if x.count(each) > 1:
  4.         indices = [i for i, char in enumerate(x) if char == each]
  5.         # 检查所有相同字符对应的 y 值是否一致
  6.         reference = y[indices[0]]
  7.         for idx in indices[1:]:
  8.             if y[idx] != reference:
  9.                 print("由于替换冲突,无法解密!")
  10.                 flag = -1
  11.                 break
  12.         if flag == -1:
  13.             break
复制代码


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

使用道具 举报

发表于 2025-4-24 00:14:25 | 显示全部楼层
小甲鱼最新课程 -> https://ilovefishc.com
回复 支持 反对

使用道具 举报

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

本版积分规则

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

GMT+8, 2025-5-10 02:01

Powered by Discuz! X3.4

© 2001-2023 Discuz! Team.

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