zrttrz111 发表于 2025-4-23 18:47:50

python第28讲课后习题

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

FishC 发表于 2025-4-23 18:48:49

问题解答


[*]关于 i = x.find(each) 的判断
i = x.find(each) 首次查找时,因为 each 是 x 中的字符,所以 i 不可能为 -1。但后续的 i = x.find(each, i+1) 可能会返回 -1(当后续没有重复字符时)。此时循环会终止。

[*]last != y 的成立条件
原代码存在逻辑漏洞。从上下文看,last 应记录前一次 y 对应位置的字符,但代码中 last = y(可能应为 last = y)。若未正确处理,当同一字符在 x 多次出现但对应 y 的字符不同时,会触发错误。

[*]flag 的作用
flag == 0 用于控制“仅首次出现冲突时处理”。如果删除 flag 的判断,会导致重复检查相同字符多次。例如:

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


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


改进建议代码

flag = 0
for each in x:
    if x.count(each) > 1:
      indices =
      # 检查所有相同字符对应的 y 值是否一致
      reference = y]
      for idx in indices:
            if y != reference:
                print("由于替换冲突,无法解密!")
                flag = -1
                break
      if flag == -1:
            break


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

jackz007 发表于 2025-4-24 00:14:25

https://fishc.com.cn/forum.php?mod=viewthread&tid=248773#pid6627941
页: [1]
查看完整版本: python第28讲课后习题