一、请按照以下规则整理一个给定的字符串 s。
一个整理好的字符串中,两个相邻字符 s[j] 和 s[j+1],其中 0 <= j <= s.length - 2,要满足如下条件:
· 若 s[j] 是小写字符,则 s[j+1] 不可以是相同的大写字符
· 若 s[j] 是大写字符,则 s[j+1] 不可以是相同的小写字符
· 如果 s[j] 和 s[j+1] 满足以上两个条件,则将它们一并删除
请按要求整理好字符串,并将结果打印到屏幕上。
提示: 将字符串逐个读取,整理后放到一个列表中,最后将列表中的元素挨个打印即可。
答案代码:
s = input("请输入一个字符串:")
res = []
for each in s:
if res and res[-1].lower() == each.lower() and res[-1] != each:
res.pop()
else:
res.append(each)
for each in res:
print(each, end='')
结果:
解析:这里比较难理解的应该是判断部分,它是先判断列表是否为空;如果不为空,则将列表中最后一个元素(即上一轮迭代放进去的字符)拿出来比对,大家都转换成小写,如果一样,那么说明它是同一个字母(此时可能是一个大写一个小写,两个都是大写,或者两个都是小写 3 种可能性);最后判断如果两者不相同,则说明是同一个字母的大小写。
二、给定的字符串 s 是按照如下规则存放的:它的偶数下标为小写英文字母,奇数下标为正整数。
题目要求:编写代码,将奇数下标的数字转换为相对于上一个字母偏移后的字母。
比如 s = “a1b2c3” 转换后的结果是 “abbdcf”(a1 -> ab,b2 -> bd,c3 -> cf);s = “x7y8z9” 转换后的结果是 “xeygzi”(遇到最后字母 z ,则从 a 继续计算偏移)
提示:用到ord()和chr()函数
ord() 用于将指定的单个字符串转换成对应的 Unicode 编码。
chr() 用于将指定的 Unicode 编码转换成对应的字符。
示例:
>>> ord('A')
65
>>> ord('i')
105
>>> chr(23567)
'小'
>>> chr(30002)
'甲'
>>> chr(40060)
'鱼'
英文字母偏移一位:
>>> ord('A')
65
>>> chr(ord('A')+1)
B
答案代码:
s = input("请按规则输入一个字符串:")
length = len(s)
res = []
# 获取字母 a 的编码值
base = ord('a')
# 从第一个元素开始,每次迭代跳过一个元素
for i in range(0, length, 2):
# ord(s[i]) - base 操作得到一个字母的偏移值,比如 b 就是 1
# 跟 26 求余数的作用是防止溢出,循环计算偏移
# int(s[i+1]) 下标为奇数所代表的值
# s[i]+shift 字符串的拼接,s[i]=a, shift=b,
shift = chr((ord(s[i]) - base + int(s[i+1])) % 26 + base)
print(s[i]+shift, end="")
运行结果:
我的错误代码:
s=input("请输入字符串:")
a=[]
for i in range(len(s)):
if i%2==0:
a.append(s[i])
continue
else :
c=s[i-1]
b=chr(ord(c)+1)
a.append(b)
continue
print(a)
运行结果:
题目来自小甲鱼python 字符串(I)