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)