(小甲鱼字符串II编程)1.用户输入两个版本号 v1 和 v2,请编写代码比较它们,找出较新的版本。2.编写一个加密程序,其实现原理是通过替换指定的字符进行加密,附加要求是实现密文逆向检测。

一、用户输入两个版本号 v1 和 v2,请编写代码比较它们,找出较新的版本。

科普:版本号是由一个或多个修订号组成,各个修订号之间由点号(.)连接,每个修订号由多位数字组成,例如 1.2.33 和 0.0.11 都是有效的版本号。
从左到右的顺序依次比较它们的修订号,点号(.)左侧的值要比右侧的权重大,即 0.1 要比 0.0.99 大。

程序实现如下:
在这里插入图片描述
答案代码:

v1 = input("请输入第一个版本号,v1 = ")
v2 = input("请输入第二个版本号,v2 = ")
    
n, m = len(v1), len(v2)              #n,m分别为字符串v1和v2的长度,n=3,m=6
i, j = 0, 0
    
while i < n or j < m:                #判断V1,V2的长度,长度至少为1,,,i=2是第二次大循环从这里开始。
    x = 0
    while i < n and v1[i] != '.':     #此处主要是下标索引值必须要比字符串长度小,并且遇到小数点需跳过
        x = x * 10 + int(v1[i])    #通过判断去掉小数点和0
        i += 1                    #下标索引i自增
    i += 1                        #下标索引i自增
    y = 0
    while j < m and v2[j] != '.':     
        y = y * 10 + int(v2[j])    #通过while语句判断去掉小数点和0
        j += 1
    j += 1                        #下标索引j自增
    if x > y:                     #最终x=1,y=0,则x大于y。
        print("v1")
        break
    elif x < y:
        print("v2")
        break
    
if x == y:
    print("v1 = v2")

结果:
在这里插入图片描述
代码还是不能理解的,可以用debug里面的degugger功能调试一下,看一下每一步的过程,参考链接
: IDLE Debug

在这里插入图片描述

二.编写一个加密程序,其实现原理是通过替换指定的字符进行加密,附加要求是实现密文逆向检测。

程序实现如下:
在这里插入图片描述
答案思路:主要讲一下检测冲突的代码,先遍历需要替换的字符,如果字符串里面一个元素出现了两次或两次以上,则用x.find()找到元素第一次出现的位置下标,然后通过下标索引找到与之对应的“将要替换的字符”里面的元素,对其进行判断。
最后检查y中的字符,方法类似。

答案代码:

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)       

题目来自小甲鱼链接: 字符串II

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值