小儿无赖 发表于 2023-8-4 16:49:37

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

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

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尤其时在循环语句总中还有一个条件分支的时候。感激不尽!!!

tyh小号 发表于 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,则打印"由于替换字符出现冲突, 该密文无法解密!"。

希望这可以帮到您!如果有任何进一步的问题,请随时提问。
如果问题已经解决,请设置最佳答案

isdkz 发表于 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


这样修改后,"由于替换字符出现冲突, 该密文无法解密!"只会打印一次。

学习编程中的Ben 发表于 2023-8-4 16:49:56

关于使用break和continue的解释:

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

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

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

示例解释:

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

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

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

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

如果回答对你有帮助,请给我一个最佳答案!{:10_254:}{:10_254:}{:10_254:}

学习编程中的Ben 发表于 2023-8-4 16:53:08

本帖最后由 学习编程中的Ben 于 2023-8-4 16:54 编辑

break:退出整个循环,不管接下来还有没有要循环的了
continue:只退出本次循环,接下来的循环还是要循环的
在有一个条件分支时上述规则依然成立的

学习编程中的Ben 发表于 2023-8-4 16:55:53

你就想吗
你如果要只输出一次
那么你设定一个变量,再循环外设置一个判断
如果判断通过再输出,这样就只会输出一次了

小儿无赖 发表于 2023-8-4 17:00:46

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

谢谢

小儿无赖 发表于 2023-8-4 17:07:27

学习编程中的Ben 发表于 2023-8-4 16:49
关于使用break和continue的解释:

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

感激不尽
页: [1]
查看完整版本: 请问如何才能使“由于替换字符出现冲突, 该密文无法解密!”只打印一次啊,谢谢