Python学习之牛客网新手入门130(53-61):字符串

Python学习之牛客网新手130题。

涵盖知识点相关注释,供个人学习使用。

字符串

53.【年轻人不讲5的】众所周知,年轻人不讲 5 的。作为一个年轻人,你应该自觉把数字中的 5 屏蔽掉。在一行输入一个只包含数字的非空字符串 s,输出一个字符串,为将所有字符 5替换为 *后的结果。

s=input()
s=s.replace('5','*')   
print(s)

#replace()替换

54.【斗兽棋】牛牛和牛妹正在玩一个博弈游戏。每人可以选择一个棋子:`elephant`、`tiger`、`cat` 或 `mouse`。elephant` 吃 `tiger`;`tiger` 吃 `cat`;`cat` 吃 `mouse`; `mouse` 吃 `elephant`;如果一方的棋子能够吃掉另一方的棋子,则该方获胜;否则为平局。

在一行输入两个以空格分隔的字符串 s1,s2​,其中 s1,s2∈{"elephant","tiger","cat","mouse"}分别代表牛牛和牛妹所出的棋子。如果牛牛获胜,输出 win;如果牛妹获胜,输出 lose;如果平局,输出 tie。

s1,s2 = input().split()
 
# 定义胜负关系字典
rules = {
    'elephant': ['tiger'],
    'tiger': ['cat'],
    'cat': ['mouse'],
    'mouse': ['elephant']
}
 
if s2 in rules[s1]:
    print("win")
elif s1 in rules[s2]:
    print("lose")
else:
    print("tie")

55.【BFS】Bob 在学习了 DFS 后,自己又发明了一种新的搜(luan)索(gao)方法,叫做 BFS(Bob First Search)。这种搜索被定义为:在一个字符串中,从前向后查找子串 "Bob" 第一次出现的位置(不区分大小写)。

在一行输入一个不含空格的字符串 S,其长度为 ∣S∣,输出一个整数,表示子串 "Bob" 第一次出现的位置(下标从 0 开始)。如果子串未出现,则输出 −1。

s=input().lower()    #lower()将所有字母变成小写
test='bob'
locate=s.find(test)    #find()找到目标并返回位置,找不到返回-1(正好是题目要求)
print(locate)

#所有字母变成大写是upper()
#所有单词首字母大写是title()

56.【凯撒加密】第一行输入一个整数 n表示错位次数。第二行输入一个由小写英文字母组成的字符串 ss (1≦∣s∣≦103)表示原文字符串。输出一个字符串,表示对 s中每个字符向后错位 n 次后得到的密码字符串。

n=int(input())  #一定需要加int不然报错
s=input()
s_new=''    #新字符串

for i in s:
    offset=(ord(i)-ord('a')+n)%26    #相对偏移量
    s_new+=chr(ord('a')+offset)
print(s_new)

#ord()表示把目标转换成ASCLL数字顺序位置
#chr()表示把ASCLL数字顺序位置转换成目标

57.【无限长正整数排列字符串】定义无限字符串 S="123456789101112......" 即将所有正整数依次拼接得到。在一行中输入一个整数 n,输出一个数字表示字符串 S 的第 n 个字符。

n=int(input())
s=''    #s[0]=空

for i in range(1,n+1):  #定义s[1]=1,s[2]=12...
    s+=str(i)

print(s[n-1])   #第n个字符,从s[0]开始数,序号为n-1

58.【简写单词】输出一个字符串,为复合词的简写形式。简写方式为:取每个单词的首字母并将其转换为大写,然后按原单词顺序依次连接。

str=input().title() #每个单词首字母大写,其他字母小写
upper= [char for char in str if char.isupper()]    #识别字符串中的大写字母
print(''.join(upper))    #元素连成新的字符串

59.【牛牛的考试】第一行输入一个整数 T表示题目数。接下来共有 T 道题,每道题由 4 行字符串组成,分别对应选项 A、B、C、D;对于每道题,输出按照上述坊间传说应选的选项字母A、B、C 或 D,每个字母独占一行。策略是:三长一短选最短;三短一长选最长;参差不齐就选 C。

t=int(input())

for i in range(t):
    A=input()
    B=input()
    C=input()
    D=input()
    length=[len(A),len(B),len(C),len(D)]
    min_l=min(length)    #ABCD最短的长度
    max_l=max(length)    #ABCD最长的长度
    if length.count(min_l)==1:    #最短的唯一时
        print(['A','B','C','D'][length.index(min_l)])    #输出最短长度对应的ABCD哪一个
    elif length.count(max_l)==1:    #最长的唯一时
        print(['A','B','C','D'][length.index(max_l)])    #输出最长长度对应的ABCD哪一个

    else:
        print('C')

60.【添加逗号】给定一个正整数 N。现在需要将其转换为千分位格式,即从整数最低位开始,每三位数字插入一个英文逗号,以提高可读性。例如,对于 980364535980364535,转换后为 980,364,535980,364,535。请编写程序完成该格式转换。

在一行中输入一个整数 N,输出一个字符串,表示将 NN转换为千分位格式后的结果。

n=int(input())
print('{:,}'.format(n))
#{:,}是一种字符串格式化语法,用于在数字中插入千位分隔符

61.【字符串操作】给定长度为 n 的只含小写字母的字符串 s,以及正整数 m 次操作。每次操作给定两个整数 ℓ,r和两个小写字母 c1,c2;将字符串 s 在区间 [ℓ,r]内的所有字符c1​ 替换为 c2。按顺序执行完所有操作后,输出最终的字符串。

在一行输入两个整数 n,m。接下来一行输入一个只含小写字母的字符串 s,长度为 n。再接下来 m 行,每行输入两个整数 ℓ,r和两个字符 c1,c2​,用空格分隔。输出一个只含小写字母的字符串,表示执行完所有操作后的最终字符串。

n,m=map(int,input().split())
s=list(input()) #转换成列表,即输入abc转换成['a','b','c']这种

for i in range(m):
    l,r,c1,c2=input().split()
    l=int(l)
    r=int(r)
    for j in range(l-1,r):
        if s[j]==c1:
            s[j]=c2

s=''.join(s)    #不join会输出['a','b','c']这种而不是abc
print(s)

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值