鱼C论坛

 找回密码
 立即注册
查看: 2283|回复: 7

[已解决]请问如何才能使“由于替换字符出现冲突, 该密文无法解密!”只打印一次啊,谢谢

[复制链接]
发表于 2023-8-4 16:49:37 | 显示全部楼层 |阅读模式

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

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

x
  1. """编写一个加密程序"""
  2. #附加要求:实现密文逆向检测

  3. x = input("请输入需要加密的明文:")
  4. y = input("请输入需要替换的字符:")
  5. z = input("请输入将要替换的字符:")
  6. ylength = len(y)
  7. zlength = len(z)

  8. if ylength != zlength:
  9.     print("需要替换的字符数量必须要跟将要替换的字符数量一致!")
  10. else:
  11.     table = str.maketrans(y, z)
  12.     print(x.translate(table))
  13.     for i in y:
  14.         if y.count(i) > 1:
  15.             print("由于替换字符出现冲突, 该密文无法解密!")
  16.             break
  17.         else:
  18.             for j in z:
  19.                 if z.count(j) > 1:
  20.                     print("由于替换字符出现冲突, 该密文无法解密!")
  21.                     break
  22.    
  23.    
复制代码
每次遇到循环和break以及continue时都是糊涂的,有没有大佬可以教教我如何使用break和continue尤其时在循环语句总中还有一个条件分支的时候。感激不尽!!!
最佳答案
2023-8-4 16:49:53
要实现只打印一次 "由于替换字符出现冲突, 该密文无法解密!",您可以在需要打印的地方设置一个标志变量,然后根据标志变量的值来决定是否打印。

以下是修改后的代码示例:

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

  4. ylength = len(y)
  5. zlength = len(z)

  6. if ylength != zlength:
  7.     print("需要替换的字符数量必须要跟将要替换的字符数量一致!")
  8. else:
  9.     table = str.maketrans(y, z)
  10.     print(x.translate(table))

  11.     conflict_flag = False  # 设置标志变量

  12.     for i in y:
  13.         if y.count(i) > 1:
  14.             conflict_flag = True  # 设置标志为True
  15.             break

  16.     if not conflict_flag:  # 只有当标志为False时才打印
  17.         for j in z:
  18.             if z.count(j) > 1:
  19.                 conflict_flag = True  # 设置标志为True
  20.                 break

  21.     if conflict_flag:
  22.         print("由于替换字符出现冲突, 该密文无法解密!")
复制代码


通过引入 conflict_flag 标志变量,我们在循环中设置标志为 True,如果标志在循环结束后仍然为 True,则打印"由于替换字符出现冲突, 该密文无法解密!"。

希望这可以帮到您!如果有任何进一步的问题,请随时提问。
如果问题已经解决,请设置最佳答案
小甲鱼最新课程 -> https://ilovefishc.com
回复

使用道具 举报

发表于 2023-8-4 16:49:53 | 显示全部楼层    本楼为最佳答案   
要实现只打印一次 "由于替换字符出现冲突, 该密文无法解密!",您可以在需要打印的地方设置一个标志变量,然后根据标志变量的值来决定是否打印。

以下是修改后的代码示例:

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

  4. ylength = len(y)
  5. zlength = len(z)

  6. if ylength != zlength:
  7.     print("需要替换的字符数量必须要跟将要替换的字符数量一致!")
  8. else:
  9.     table = str.maketrans(y, z)
  10.     print(x.translate(table))

  11.     conflict_flag = False  # 设置标志变量

  12.     for i in y:
  13.         if y.count(i) > 1:
  14.             conflict_flag = True  # 设置标志为True
  15.             break

  16.     if not conflict_flag:  # 只有当标志为False时才打印
  17.         for j in z:
  18.             if z.count(j) > 1:
  19.                 conflict_flag = True  # 设置标志为True
  20.                 break

  21.     if conflict_flag:
  22.         print("由于替换字符出现冲突, 该密文无法解密!")
复制代码


通过引入 conflict_flag 标志变量,我们在循环中设置标志为 True,如果标志在循环结束后仍然为 True,则打印"由于替换字符出现冲突, 该密文无法解密!"。

希望这可以帮到您!如果有任何进一步的问题,请随时提问。
如果问题已经解决,请设置最佳答案
小甲鱼最新课程 -> https://ilovefishc.com
回复 支持 反对

使用道具 举报

发表于 2023-8-4 16:49:56 | 显示全部楼层
要使"由于替换字符出现冲突, 该密文无法解密!"只打印一次,你可以使用一个标志变量来判断是否已经打印过该信息。如果已经打印过,就将标志变量设置为True,否则打印信息并将标志变量设置为True。

以下是修改后的代码:

  1. x = input("请输入需要加密的明文:")
  2. y = input("请输入需要替换的字符:")
  3. z = input("请输入将要替换的字符:")
  4. ylength = len(y)
  5. zlength = len(z)

  6. if ylength != zlength:
  7.     print("需要替换的字符数量必须要跟将要替换的字符数量一致!")
  8. else:
  9.     table = str.maketrans(y, z)
  10.     print(x.translate(table))
  11.     error_printed = False  # 标志变量,初始值为False
  12.     for i in y:
  13.         if y.count(i) > 1:
  14.             if not error_printed:  # 如果标志变量为False,则打印信息
  15.                 print("由于替换字符出现冲突, 该密文无法解密!")
  16.                 error_printed = True  # 将标志变量设置为True
  17.             break
  18.         else:
  19.             for j in z:
  20.                 if z.count(j) > 1:
  21.                     if not error_printed:  # 如果标志变量为False,则打印信息
  22.                         print("由于替换字符出现冲突, 该密文无法解密!")
  23.                         error_printed = True  # 将标志变量设置为True
  24.                     break
复制代码


这样修改后,"由于替换字符出现冲突, 该密文无法解密!"只会打印一次。
小甲鱼最新课程 -> https://ilovefishc.com
回复 支持 反对

使用道具 举报

发表于 2023-8-4 16:49:56 | 显示全部楼层
关于使用break和continue的解释:

*在循环中使用breakcontinue可以控制循环的执行流程,根据特定的条件跳出循环或者继续下一次循环。下面是对它们的解释:*

- break: 当满足某个条件时,使用break语句可以跳出当前所在的循环,不再执行循环内剩余的代码,而是直接执行循环后面的代码。

- continue: 当满足某个条件时,使用continue语句可以跳过当前这一次循环的剩余代码,直接进入下一次循环的判断条件。

示例解释:

在给出的代码中,使用了break语句来提前退出循环,以及continue语句来跳过当前的循环。

- 在第一个循环中,使用break语句来检测替换字符是否有重复出现,如果有,则输出提示信息并跳出整个循环。
- 在第二个循环中,使用continue语句来跳过检测条件的后续代码,直接进入下一次循环的判断。

这样做是为了在发现替换字符有重复出现时,能够立即结束循环,并输出相应的提示信息。否则,如果没有使用breakcontinue,程序会继续执行后面的代码,其中可能存在对于重复字符的解密操作。

希望以上解释对您有所帮助!如果您还有其他问题,请随时提问。

如果回答对你有帮助,请给我一个最佳答案!
小甲鱼最新课程 -> https://ilovefishc.com
回复 支持 反对

使用道具 举报

发表于 2023-8-4 16:53:08 | 显示全部楼层
本帖最后由 学习编程中的Ben 于 2023-8-4 16:54 编辑

break:退出整个循环,不管接下来还有没有要循环的了
continue:只退出本次循环,接下来的循环还是要循环的
在有一个条件分支时上述规则依然成立的
小甲鱼最新课程 -> https://ilovefishc.com
回复 支持 反对

使用道具 举报

发表于 2023-8-4 16:55:53 | 显示全部楼层
你就想吗
你如果要只输出一次
那么你设定一个变量,再循环外设置一个判断
如果判断通过再输出,这样就只会输出一次了
小甲鱼最新课程 -> https://ilovefishc.com
回复 支持 反对

使用道具 举报

 楼主| 发表于 2023-8-4 17:00:46 | 显示全部楼层
isdkz 发表于 2023-8-4 16:49
要使"由于替换字符出现冲突, 该密文无法解密!"只打印一次,你可以使用一个标志变量来判断是否已经打印过该 ...

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

使用道具 举报

 楼主| 发表于 2023-8-4 17:07:27 | 显示全部楼层
学习编程中的Ben 发表于 2023-8-4 16:49
关于使用break和continue的解释:

*在循环中使用break和continue可以控制循环的执行流程,根据特定的条件 ...

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

使用道具 举报

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

本版积分规则

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

GMT+8, 2025-4-23 06:52

Powered by Discuz! X3.4

© 2001-2023 Discuz! Team.

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