(小甲鱼字符串I编程)1.一个英文字符串,去掉相邻的大写小写如Aa,输出这个字符串 2.字符串按如下存放:它的偶数下标为小写英文字母奇数下标为正整数编写代码将奇数下标的数字转换为上一个字母偏移后的字母

一、请按照以下规则整理一个给定的字符串 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)

  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值