小白Python做题小技巧

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 

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−1​10k−1+⋯+d1​101+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)

本人小白一枚,在努力学习,感谢喜欢

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值