python有一些很好用的关于字符串的小技巧,做了点题总结一下
去重:
n=str(input())
n=list(n)
n=set(n)
n=list(n)
排序:
从小到大排序
n.sort()
从大到小排序
n.sort(reverse=True)
去掉字符串首尾空格:
n = input().strip()
替换多个空格为单个空格
使用正则表达式
import re
m = re.sub(r'\s+', ' ',n)
一个整数大于n且能被k整除:m=((n/k)+1)*k
判断闰年:((year % 4 == 0 && year % 100 != 0) || year % 400 == 0)
到了做题干货部分
(1)对给定的一个字符串,把其中从 a-y ,A-Y 的字母用其后继字母替代,把 z 和 Z 用 a 和 A 替代,其他非字母字符不变,则可得到一个简单的加密字符串。
a = input()
b = ""
for i in a:
if 'a' <= i <= 'z' or 'A' <= i <= 'Z':
b+= chr(((ord(i) - ord('a')) + 1) % 26 + ord('a'))
else:
b += i
print(b)
'''ord(i) 获取字符 i 的 ASCII 值。
ord('a') 获取字符 'a' 的 ASCII 值。
ord(i) - ord('a') 计算字符 i 相对于 'a' 的偏移量。
(ord(i) - ord('a')) + 1 将偏移量向后移动一位。
% 26 确保偏移量在 0 到 25 之间循环。
+ ord('a') 最终得到新字符的 ASCII 值。
chr(...) 将得到的 ASCII 值转换回字符,并追加到结果字符串 b 中。
'''
(2)本题要求编写程序,将给定字符串中的大写英文字母按以下对应规则替换:
原字母对应字母
A Z
B Y
C X
D W
… …
X C
Y B
Z A
输入格式:
输入在一行中给出一个不超过80个字符、并以回车结束的字符串。
输出格式:
输出在一行中给出替换完成后的字符串。
输入样例:
Only the 11 CAPItaL LeTtERS are replaced.
输出样例:
Lnly the 11 XZKRtaO OeGtVIH are replaced.
rules = {
'A':'Z','B':'Y','C':'X','D':'W','E':'V',
'F':'U','G':'T','H':'S','I':'R','J':'Q',
'K':'P','L':'O','M':'N','N':'M','O':'L',
'P':'K','Q':'J','R':'I','S':'H','T':'G',
'U':'F','V':'E','W':'D','X':'C','Y':'B',
'Z':'A'
}
n = input()
m = ""
for i in n:
if i in rules:
m +=rules[i]
else:
m += i
print(m)
(3)
一个数,表示最终要为这些玩具付出的最小价格
输入样例1:
4
3
2
3
2
输出样例1:
8
def cost(prices):
prices.sort(reverse=True)
total_cost = sum(price for i, price in enumerate(prices) if i % 3 != 2)
return total_cost
n = int(input())
prices = [int(input()) for _ in range(n)]
print(cost(prices))
(4)
n 个人围成一圈,从第一个人开始报数,数到 m 的人出列,再由下一个人重新从 1 开始报数,数到 m 的人再出圈,依次类推,直到所有的人都出圈,请输出依次出圈人的编号。
输入格式:
输入两个整数 n,m。
输出格式:
输出一行 n 个整数,按顺序输出每个出圈人的编号。
说明/提示
1<=n,m<=100
输入样例:
10 3
输出样例:
3 6 9 2 7 1 8 5 10 4
#用两个列表分别记录没出列的和出列的
def solve(n, m):
people = list(range(1, n + 1))
out_order = []
index = 0
while len(people) > 0:
index = (index + m - 1) % len(people)
out_order.append(str(people.pop(index)))
return ' '.join(out_order)
def main():
n, m = map(int, input().split())
result = solve(n, m)
print(result)
if __name__ == "__main__":
main()
(5)针对输入的N个字符串,输出其中最小的字符串。
输入格式:
输入第一行给出正整数N;随后N行,每行给出一个长度小于80的非空字符串,其中不会出现换行符,空格,制表符。
输出格式:
在一行中用以下格式输出最小的字符串:
Min is: 最小字符串
输入样例:
5
Li
Wang
Zha
Jin
Xian
N=int(input())
min_str=input()
for i in range(1,N):
curr_str=input()
if curr_str<min_str:
min_str=curr_str
print(f"Min is: {min_str}")
(6)字符串A-B计算A−B。不过麻烦的是,A和B都是字符串 —— 即从字符串A中把字符串B所包含的字符全删掉,剩下的字符组成的就是字符串A−B。输入在2行中先后给出字符串A和B。两字符串的长度都不超过104,并且保证每个字符串都是由可见的ASCII码和空白字符组成,最后以换行符结束。
a=input().strip()
b=input().strip()
b_set=set(b)
result=[char for char in a if char not in b_set]
print(''.join(result))
(7)
本题要求编写程序,输出n行由大写字母A开始构成的三角形字符阵列。
输入格式:
输入在一行中给出一个正整数n(1≤n<7)。
输出格式:
输出n行由大写字母A开始构成的三角形字符阵列。格式见输出样例,其中每个字母后面都有一个空格。
输入样例:
4输出样例:
A B C D
E F G
H I
J
n=int(input())
count=0
for i in range(n):
for j in range(n-i):
count+=1
print(chr(64+count),end=" ")
print()
(8)判断素数
def is_prime(n):
if n <= 1:
return False
if n <= 3:
return True
if n % 2 == 0 or n % 3 == 0:
return False
i = 5
while i * i <= n:
if n % i == 0 or n % (i + 2) == 0:
return False
i += 6
return True
# 输入一个数字
number = int(input("Enter a number to check if it's prime: "))
# 检查并输出结果
if is_prime(number):
print("yes")
else:
print("no")
也可以用python自带的库
from sympy import isprime
n = 19
print(isprime(n)) # 输出 True 或 False
如果要输出别的,比如yes和no
from sympy import isprime
def check_prime(number):
if isprime(number):
return "yes"
else:
return "no"
(9)数数字
给定一个 k 位整数 N=dk−110k−1+⋯+d1101+d0 (0≤di≤9, i=0,⋯,k−1, dk−1>0),请编写程序统计每种不同的个位数字出现的次数。例如:给定 N=100311,则有 2 个 0,3 个 1,和 1 个 3。
输入格式:
每个输入包含 1 个测试用例,即一个不超过 1000 位的正整数 N。
输出格式:
对 N 中每一种不同的个位数字,以 D:M
的格式在一行中输出该位数字 D
及其在 N 中出现的次数 M
。要求按 D
的升序输出。
输入样例:
100311
输出样例:
0:2
1:3
3:1
num=input()
digit={str(i): 0 for i in range(10)}
for i in num:
if i in digit:
digit[i]+=1
for i in range(10):
if digit[str(i)]>0:
print(f"{i}:{digit[str(i)]}")
(10)统计字符
给定一个长度不超过10000的、仅由英文字母构成的字符串。请将字符重新调整顺序,按GPLTGPLT....
这样的顺序输出,并忽略其它字符。当然,四种字符(不区分大小写)的个数不一定是一样多的,若某种字符已经输出完,则余下的字符仍按GPLT
的顺序打印,直到所有字符都被输出。
输入格式:
输入在一行中给出一个长度不超过10000的、仅由英文字母构成的非空字符串。
输出格式:
在一行中按题目要求输出排序后的字符串。题目保证输出非空。
输入样例:
pcTclnGloRgLrtLhgljkLhGFauPewSKgt
输出样例:
GPLTGPLTGLTGLGLL
str=input().upper()
g=p=l=t=0
for i in str:
if i =='G':
g+=1;
elif i=='P':
p+=1
elif i=='L':
l+=1
elif i=='T':
t+=1
while g>0 or p>0 or l>0 or t>0:
if g>0:
print('G',end='')
g-=1
if p>0:
print('P',end='')
p-=1
if l>0:
print('L',end='')
l-=1
if t>0:
print('T',end='')
t-=1
(11)求一个整数的位数及其各位数字之和
N=str(input())
len=len(N)
sum=sum(int(i) for i in N)
print(len,su
(12)新增字符
给定一个长度为 n 的字符串,我们想要得到更多的"our"字符串,可以往字符串中添加任意个字符’u’或者’U’。注意:比较不区分大小写,即 “our”、“Our”、“oUr”、“OUr” 都是等价的,即他们都可以看成"our"字符串。
输入格式:
一个字符串 s(1<=s的长度<=3000) ,含义如上,仅包含大小写字母。
输出格式:
最多可以得到多少个"our"字符串(不区分大小写)。
输入样例:
oUUorUouRoo
输出样例:
2
输入样例:
UoOuORURuR
输出样例:
1
输入样例:
oRUOUOOoro
输出样例:
2
s=input()
s=s.lower()
our=s.count('our')
or_count=s.count('or')
total=our+or_count
print(total)
本人小白一枚,在努力学习,感谢喜欢