1370607278 发表于 2022-2-9 14:52:37

python课后习题问题

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


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

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

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











plain = input("请输入需要加密的明文:")
x = input("请输入需要替换的字符:")
y = input("请输入将要替换的字符:")
   
# 加密的代码
if len(x) != len(y):
    print("需要替换的字符数量必须跟将要替换的字符数量一致!")
else:
    cipher = plain.translate(str.maketrans(x, y))
    print("加密后的密文是:" + cipher)
   
# 检测冲突的代码
# flag 变量标志是否退出检测(只要找到一个冲突,就可以直接退出)
flag = 0
   
# 如果 x 中存在相同的字符,那么 y 对应下标的字符也应该是相同的
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)
   
# 如果 y 中存在相同的字符,那么 x 对应下标的字符也应该是相同的
for each in y:
    if y.count(each) > 1 and flag == 0:
      i = y.find(each)
      last = x
      while i != -1:
            if last != x:
                print("由于替换字符出现冲突,该密文无法解密!")
                flag = -1
                break
   
            i = y.find(each, i+1)






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







python爱好者. 发表于 2022-2-9 15:04:08

第一个程序不会自己判断返回的密文是否可以解密,以及一些错误处理,
而第二个程序就会返回一些关于密文是否可解密之类的消息,以及可以对一些错误进行免报错优化处理!

1370607278 发表于 2022-2-9 15:06:01

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

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

这个代码不就可以判断是否能解密了吗

python爱好者. 发表于 2022-2-9 15:07:09

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

懂了吗?不懂可以再问!懂了就给个好评呗!!!
{:10_257:}{:10_297:}{:10_281:}{:10_298:}
打字不易,请给个好评!!!
兄弟!给个好评!求求了!!!
{:10_254:}{:10_254:}{:10_254:}{:10_254:}

ckblt 发表于 2022-2-9 15:08:43

第一个:
请输入需要加密的明文:abcdefg
请输入需要替换的字符:aaaaa
请输入将要替换的字符:aa
需要替换的字符数量必须跟将要替换的字符数量一致!
由于替换字符出现冲突,该密文无法解密!
由于替换字符出现冲突,该密文无法解密!

第二个:
请输入需要加密的明文:abcdefg
请输入需要替换的字符:aaaaa
请输入将要替换的字符:aa
需要替换的字符数量必须跟将要替换的字符数量一致!
Traceback (most recent call last):
File "g:\Python Projects\Temp\b.py", line 22, in <module>
    if last != y:
IndexError: string index out of range

python爱好者. 发表于 2022-2-9 15:14:44

python爱好者. 发表于 2022-2-9 15:07
懂了吗?不懂可以再问!懂了就给个好评呗!!!

打字不易, ...

所以这两段代码似乎都有问题

1370607278 发表于 2022-2-9 15:22:15

python爱好者. 发表于 2022-2-9 15:14
所以这两段代码似乎都有问题

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)




这一段是干嘛的 我实在是没看懂
if last != y 这个语句不是一直是False吗 因为last = y 赋值了他俩相等啊

ckblt 发表于 2022-2-9 15:24:37

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

应该是因为
i = x.find(each, i + 1)

python爱好者. 发表于 2022-2-9 15:26:22

但是请注意第 11 行代码:
i = x.find(each, i + 1)
再看第 6 行:
if last != y
这里的 i 变量可是会一直变的!{:10_334:}

python爱好者. 发表于 2022-2-9 15:26:52

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

1370607278 发表于 2022-2-9 15:53:58

ckblt 发表于 2022-2-9 15:24
应该是因为

好的 谢谢

python爱好者. 发表于 2022-2-9 16:06:22

1370607278 发表于 2022-2-9 15:53
好的 谢谢

谢谢兄弟好评!
页: [1]
查看完整版本: python课后习题问题