鱼C论坛

 找回密码
 立即注册
查看: 986|回复: 11

[已解决]python课后习题问题

[复制链接]
发表于 2022-2-9 14:52:37 | 显示全部楼层 |阅读模式

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

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

x
  1. plain = input("请输入需要加密的明文:")
  2. x = input("请输入需要替换的字符:")
  3. y = input("请输入将要替换的字符:")


  4. if len(x) != len(y):
  5.     print("需要替换的字符数量必须跟将要替换的字符数量一致!")
  6. else:
  7.     cipher = plain.translate(str.maketrans(x, y))
  8.     print("加密后的密文是:" + cipher)

  9. for each in x:
  10.     if x.count(each) > 1:
  11.         print("由于替换字符出现冲突,该密文无法解密!")
  12.         break
  13.     else:
  14.         continue

  15. for each in y:
  16.     if y.count(each) > 1:
  17.         print("由于替换字符出现冲突,该密文无法解密!")
  18.         break
  19.     else:
  20.         continue
复制代码











  1. plain = input("请输入需要加密的明文:")
  2. x = input("请输入需要替换的字符:")
  3. y = input("请输入将要替换的字符:")
  4.    
  5. # 加密的代码
  6. if len(x) != len(y):
  7.     print("需要替换的字符数量必须跟将要替换的字符数量一致!")
  8. else:
  9.     cipher = plain.translate(str.maketrans(x, y))
  10.     print("加密后的密文是:" + cipher)
  11.    
  12. # 检测冲突的代码
  13. # flag 变量标志是否退出检测(只要找到一个冲突,就可以直接退出)
  14. flag = 0
  15.    
  16. # 如果 x 中存在相同的字符,那么 y 对应下标的字符也应该是相同的
  17. for each in x:
  18.     if x.count(each) > 1 and flag == 0:
  19.         i = x.find(each)
  20.         last = y[i]
  21.         while i != -1:
  22.             if last != y[i]:
  23.                 print("由于替换字符出现冲突,该密文无法解密!")
  24.                 flag = -1
  25.                 break
  26.    
  27.             i = x.find(each, i+1)
  28.    
  29. # 如果 y 中存在相同的字符,那么 x 对应下标的字符也应该是相同的
  30. for each in y:
  31.     if y.count(each) > 1 and flag == 0:
  32.         i = y.find(each)
  33.         last = x[i]
  34.         while i != -1:
  35.             if last != x[i]:
  36.                 print("由于替换字符出现冲突,该密文无法解密!")
  37.                 flag = -1
  38.                 break
  39.    
  40.             i = y.find(each, i+1)
复制代码







想问下大佬们 , 这两个代码有什么区别吗,第一个比较简单,但这俩最后输出的结果是一样的...
我实在看不出来这俩的区别,感觉第二个不需要那个循环也可以正常运行







最佳答案
2022-2-9 15:26:52
1370607278 发表于 2022-2-9 15:22
这一段是干嘛的 我实在是没看懂
这个语句不是一直是False吗 因为 赋值了他俩相等啊

小甲鱼最新课程 -> https://ilovefishc.com
回复

使用道具 举报

发表于 2022-2-9 15:04:08 | 显示全部楼层
第一个程序不会自己判断返回的密文是否可以解密,以及一些错误处理,
而第二个程序就会返回一些关于密文是否可解密之类的消息,以及可以对一些错误进行免报错优化处理!
小甲鱼最新课程 -> https://ilovefishc.com
回复 支持 反对

使用道具 举报

 楼主| 发表于 2022-2-9 15:06:01 | 显示全部楼层
python爱好者. 发表于 2022-2-9 15:04
第一个程序不会自己判断返回的密文是否可以解密,以及一些错误处理,
而第二个程序就会返回一些关于密文是 ...

第一个也可以判断呀
  1. x.count(each) > 1
复制代码


这个代码不就可以判断是否能解密了吗
小甲鱼最新课程 -> https://ilovefishc.com
回复 支持 反对

使用道具 举报

发表于 2022-2-9 15:07:09 | 显示全部楼层
python爱好者. 发表于 2022-2-9 15:04
第一个程序不会自己判断返回的密文是否可以解密,以及一些错误处理,
而第二个程序就会返回一些关于密文是 ...

懂了吗?不懂可以再问!懂了就给个好评呗!!!

打字不易,请给个好评!!!
兄弟!给个好评!求求了!!!
小甲鱼最新课程 -> https://ilovefishc.com
回复 支持 反对

使用道具 举报

发表于 2022-2-9 15:08:43 | 显示全部楼层
第一个:
  1. 请输入需要加密的明文:abcdefg
  2. 请输入需要替换的字符:aaaaa
  3. 请输入将要替换的字符:aa
  4. 需要替换的字符数量必须跟将要替换的字符数量一致!
  5. 由于替换字符出现冲突,该密文无法解密!
  6. 由于替换字符出现冲突,该密文无法解密!
复制代码


第二个:
  1. 请输入需要加密的明文:abcdefg
  2. 请输入需要替换的字符:aaaaa
  3. 请输入将要替换的字符:aa
  4. 需要替换的字符数量必须跟将要替换的字符数量一致!
  5. Traceback (most recent call last):
  6.   File "g:\Python Projects\Temp\b.py", line 22, in <module>
  7.     if last != y[i]:
  8. IndexError: string index out of range
复制代码
小甲鱼最新课程 -> https://ilovefishc.com
回复 支持 反对

使用道具 举报

发表于 2022-2-9 15:14:44 | 显示全部楼层
python爱好者. 发表于 2022-2-9 15:07
懂了吗?不懂可以再问!懂了就给个好评呗!!!

打字不易, ...

所以这两段代码似乎都有问题
小甲鱼最新课程 -> https://ilovefishc.com
回复 支持 反对

使用道具 举报

 楼主| 发表于 2022-2-9 15:22:15 | 显示全部楼层
python爱好者. 发表于 2022-2-9 15:14
所以这两段代码似乎都有问题

  1. for each in x:
  2.     if x.count(each) > 1 and flag == 0:
  3.         i = x.find(each)
  4.         last = y[i]
  5.         while i != -1:
  6.             if last != y[i]:
  7.                 print("由于替换字符出现冲突,该密文无法解密!")
  8.                 flag = -1
  9.                 break

  10.             i = x.find(each, i + 1)
复制代码




这一段是干嘛的 我实在是没看懂
  1. if last != y[i]
复制代码
这个语句不是一直是False吗 因为
  1. last = y[i]
复制代码
赋值了他俩相等啊
小甲鱼最新课程 -> https://ilovefishc.com
回复 支持 反对

使用道具 举报

发表于 2022-2-9 15:24:37 | 显示全部楼层
1370607278 发表于 2022-2-9 15:22
这一段是干嘛的 我实在是没看懂
这个语句不是一直是False吗 因为 赋值了他俩相等啊

应该是因为
  1. i = x.find(each, i + 1)
复制代码
小甲鱼最新课程 -> https://ilovefishc.com
回复 支持 反对

使用道具 举报

发表于 2022-2-9 15:26:22 | 显示全部楼层
但是请注意第 11 行代码:
  1. i = x.find(each, i + 1)
复制代码

再看第 6 行:
  1. if last != y[i]
复制代码

这里的 i 变量可是会一直变的!
小甲鱼最新课程 -> https://ilovefishc.com
回复 支持 反对

使用道具 举报

发表于 2022-2-9 15:26:52 | 显示全部楼层    本楼为最佳答案   
1370607278 发表于 2022-2-9 15:22
这一段是干嘛的 我实在是没看懂
这个语句不是一直是False吗 因为 赋值了他俩相等啊

小甲鱼最新课程 -> https://ilovefishc.com
回复 支持 反对

使用道具 举报

 楼主| 发表于 2022-2-9 15:53:58 | 显示全部楼层

好的 谢谢
小甲鱼最新课程 -> https://ilovefishc.com
回复 支持 反对

使用道具 举报

发表于 2022-2-9 16:06:22 | 显示全部楼层

谢谢兄弟好评!
小甲鱼最新课程 -> https://ilovefishc.com
回复 支持 反对

使用道具 举报

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

本版积分规则

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

GMT+8, 2025-4-30 10:44

Powered by Discuz! X3.4

© 2001-2023 Discuz! Team.

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