一、用户输入两个版本号 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