鱼C论坛

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

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

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

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

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

x
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[i]
        while i != -1:
            if last != y[i]:
                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[i]
        while i != -1:
            if last != x[i]:
                print("由于替换字符出现冲突,该密文无法解密!")
                flag = -1
                break
    
            i = y.find(each, i+1)






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







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

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

使用道具 举报

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

使用道具 举报

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

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

这个代码不就可以判断是否能解密了吗
想知道小甲鱼最近在做啥?请访问 -> ilovefishc.com
回复 支持 反对

使用道具 举报

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

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

打字不易,请给个好评!!!
兄弟!给个好评!求求了!!!
想知道小甲鱼最近在做啥?请访问 -> ilovefishc.com
回复 支持 反对

使用道具 举报

发表于 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[i]:
IndexError: string index out of range
想知道小甲鱼最近在做啥?请访问 -> ilovefishc.com
回复 支持 反对

使用道具 举报

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

打字不易, ...

所以这两段代码似乎都有问题
想知道小甲鱼最近在做啥?请访问 -> ilovefishc.com
回复 支持 反对

使用道具 举报

 楼主| 发表于 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[i]
        while i != -1:
            if last != y[i]:
                print("由于替换字符出现冲突,该密文无法解密!")
                flag = -1
                break

            i = x.find(each, i + 1)



这一段是干嘛的 我实在是没看懂
if last != y[i] 
这个语句不是一直是False吗 因为
last = y[i]
赋值了他俩相等啊
想知道小甲鱼最近在做啥?请访问 -> ilovefishc.com
回复 支持 反对

使用道具 举报

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

应该是因为
i = x.find(each, i + 1)
想知道小甲鱼最近在做啥?请访问 -> ilovefishc.com
回复 支持 反对

使用道具 举报

发表于 2022-2-9 15:26:22 | 显示全部楼层
但是请注意第 11 行代码:
 i = x.find(each, i + 1)
再看第 6 行:
if last != y[i] 
这里的 i 变量可是会一直变的!
想知道小甲鱼最近在做啥?请访问 -> ilovefishc.com
回复 支持 反对

使用道具 举报

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

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

使用道具 举报

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

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

使用道具 举报

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

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

使用道具 举报

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

本版积分规则

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

GMT+8, 2025-1-12 13:10

Powered by Discuz! X3.4

© 2001-2023 Discuz! Team.

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