鱼C论坛

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

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

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

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

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

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

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

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

以下是修改后的代码示例:
x = input("请输入需要加密的明文:")
y = input("请输入需要替换的字符:")
z = input("请输入将要替换的字符:")

ylength = len(y)
zlength = len(z)

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

    conflict_flag = False  # 设置标志变量

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

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

    if conflict_flag:
        print("由于替换字符出现冲突, 该密文无法解密!")

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

希望这可以帮到您!如果有任何进一步的问题,请随时提问。
如果问题已经解决,请设置最佳答案
想知道小甲鱼最近在做啥?请访问 -> ilovefishc.com
回复

使用道具 举报

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

以下是修改后的代码示例:
x = input("请输入需要加密的明文:")
y = input("请输入需要替换的字符:")
z = input("请输入将要替换的字符:")

ylength = len(y)
zlength = len(z)

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

    conflict_flag = False  # 设置标志变量

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

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

    if conflict_flag:
        print("由于替换字符出现冲突, 该密文无法解密!")

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

希望这可以帮到您!如果有任何进一步的问题,请随时提问。
如果问题已经解决,请设置最佳答案
想知道小甲鱼最近在做啥?请访问 -> ilovefishc.com
回复 支持 反对

使用道具 举报

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

以下是修改后的代码:
x = input("请输入需要加密的明文:")
y = input("请输入需要替换的字符:")
z = input("请输入将要替换的字符:")
ylength = len(y)
zlength = len(z)

if ylength != zlength:
    print("需要替换的字符数量必须要跟将要替换的字符数量一致!")
else:
    table = str.maketrans(y, z)
    print(x.translate(table))
    error_printed = False  # 标志变量,初始值为False
    for i in y:
        if y.count(i) > 1:
            if not error_printed:  # 如果标志变量为False,则打印信息
                print("由于替换字符出现冲突, 该密文无法解密!")
                error_printed = True  # 将标志变量设置为True
            break
        else:
            for j in z:
                if z.count(j) > 1:
                    if not error_printed:  # 如果标志变量为False,则打印信息
                        print("由于替换字符出现冲突, 该密文无法解密!")
                        error_printed = True  # 将标志变量设置为True
                    break

这样修改后,"由于替换字符出现冲突, 该密文无法解密!"只会打印一次。
想知道小甲鱼最近在做啥?请访问 -> ilovefishc.com
回复 支持 反对

使用道具 举报

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

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

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

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

示例解释:

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

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

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

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

如果回答对你有帮助,请给我一个最佳答案!
想知道小甲鱼最近在做啥?请访问 -> ilovefishc.com
回复 支持 反对

使用道具 举报

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

break:退出整个循环,不管接下来还有没有要循环的了
continue:只退出本次循环,接下来的循环还是要循环的
在有一个条件分支时上述规则依然成立的
想知道小甲鱼最近在做啥?请访问 -> ilovefishc.com
回复 支持 反对

使用道具 举报

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

使用道具 举报

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

谢谢
想知道小甲鱼最近在做啥?请访问 -> ilovefishc.com
回复 支持 反对

使用道具 举报

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

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

感激不尽
想知道小甲鱼最近在做啥?请访问 -> ilovefishc.com
回复 支持 反对

使用道具 举报

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

本版积分规则

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

GMT+8, 2024-9-22 03:56

Powered by Discuz! X3.4

© 2001-2023 Discuz! Team.

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