01字符串分隔
•输入一个字符串,请按长度为8拆分每个输入字符串并进行输出;
•长度不是8整数倍的字符串请在后面补数字0,空字符串不处理。
输入:abc
输出:abc00000
s1 = input()
if len(s1) < 1 or len(s1) == 8:
print(s1)
elif 1<len(s1)<8:
n = 8-len(s1)
print(s1+"0"*n)
else:
while len(s1)>8:
print (s1[:8])
s1 = s1[8:]
print(s1 + '0'*(8-len(s1)))
02字符串最后一个单词的长度
s = input()
s1 = s.split()
a = s1.pop()
lens = len(a)
print(lens)
03计算某字符出现次数
写出一个程序,接受一个由字母、数字和空格组成的字符串,和一个字符,然后输出输入字符串中该字符的出现次数。(不区分大小写字母)
输入:
ABCabc
A
输出:2
s1 = input()
s2 = input()
j = 0
for i in range(len(s1)):
if s1[i].lower() == s2.lower():
j = j+1
i = i+1
print(j)
或
s1 = input().lower()
s2 = input().lower()
print(s1.count(s2))
** 04进制转换**
写出一个程序,接受一个十六进制的数,输出该数值的十进制表示。
输入:0xAA
输出:170
a = input()
if a[0] + a[1] == '0x':
s = 0
converString = '0123456789ABCDEF'
lens = len(a)
for i in range(2,lens):
b = converString.index(a[i])
s =s + b * (16 ** (lens - i-1))
print(s)
05 合并表记录
数据表记录包含表索引index和数值value(int范围的正整数),请对表索引相同的记录进行合并,即将相同索引的数值进行求和运算,输出按照index值升序进行输出。
示例1
输入:
4
0 1
0 2
1 2
3 4
输出:
0 3
1 2
3 4
示例2
输入:
3
0 1
0 2
8 9
输出:
0 3
8 9
index,value = map(int,input().split())
a = int(input())
d = {}
for i in range(a):
index,value = map(int,input().split())
if index in d.keys():
d[index] += value
else:
d[index] = value
for index in sorted(d.keys()):
print(index,d[index])
06字符串反转
输入:
abcd
输出:
dcba
s = input()
a = []
b = ''
for i in range(len(s)):
a.append(s[i])
for j in range(len(s)):
b += a.pop()
print(b)
但是别人的方法好简单啊。。
print(input()[::-1])
07句子逆序
输入:
I am a boy
输出:
boy a am I
a = input().split()[::-1]
s = ''
for i in a:
s = s + i +' '
print (s)
08字符串排序
给定 n 个字符串,请对 n 个字符串按照字典序排列。
输入:
9
cap
to
cat
card
two
too
up
boat
boot
输出:
boat
boot
cap
card
cat
to
too
two
up
a = int(input())
b = []
for i in range(a):
b.append(input())
b.sort()
for j in b:
print(j)
09求int型正整数在内存中存储时1的个数
输入一个 int 型的正整数,计算出该 int 型数据在内存中存储时 1 的个数。
示例1
输入:
5
输出:
2
示例2
输入:
0
输出:
0
a = int(input())
s = []
while a >=1:
b = a%2
s.append(b)
a = a //2
j = 0
for i in s:
if i == 1:
j = j+1
print(j)
别人的:
a = bin(int(input()))
b = str(a)
print(b.count('1'))
多组输入输出
while True:
try:
a = int(input())
b = bin(a)
print(b.count('1'))
except:
break
10单词倒排
输入:
I am a student
输出:
student a am I
输入:
$bo*y gi!r#l
输出:
l r gi y bo
本人写了一个半小时的,像个冤种。。。
ls = "abcdefghijklmnopqrstuvwxyzABCDEFGHIJKLMNOPQRSTUVWXYZ"
s = input().split()
c = ''
for i in s:
# print(i)
b = list(i)
# print(b)
for j in range(len(b)):
if b[j] not in ls:
b[j] = ' '
# print(b)
c = c + ''.join(b)+" "
# print(c)
a = c.split()[::-1]
y = ''
for i in a:
y = y+i+" "
print(y)
别人:应用了正则,sub替换
Python正则表达式及常用匹配
\w 匹配字母数字及下划线,等价于 ‘[A-Za-z0-9_]’
\W 匹配非字母数字及下划线,等价于’[^A-Za-z0-9_]
import re
a = re.sub('[\W]',' ',input())
# a = a.strip(' ').split(' ') 加strip好像是可以去除首位的空格?
a = a.split()
print(' '.join(a[::-1]))
11明明的随机数
第一行先输入随机整数的个数 N 。 接下来的 N 行每行输入一个整数,代表明明生成的随机数。
输入:
3
2
2
1
输出:
1
2
a = []
for i in range(int(input())):
a.append(int(input()))
for i in sorted(set(a)):
print(i)
题外话,随机函数:import random ,random.randint(1,500)
12输入整型数组和排序标识,对其元素按照升序或降序进行排序
第一行输入数组元素个数
第二行输入待排序的数组,每个数用空格隔开
第三行输入一个整数0或1。0代表升序排序,1代表降序排序
输入:
8
1 2 4 9 3 55 64 25
0
输出:
1 2 3 4 9 25 55 64
升序排序:sort()
降序排序:sort(reverse=True)
a = int(input())
b = input().split()
e = []
for i in range(len(b)):
e.append(int(b[i]))
c = input()
if c == '0':
e.sort()
elif c == "1":
e.sort(reverse=True)
d = ''
for i in range(a):
d = d + str(e[i]) + " "
print(d)
13输入n个整数,输出其中最小的k个
输入描述:
第一行输入两个整数n和k
第二行输入一个整数数组
输出描述:
从小到大输出最小的k个整数,用空格分开。
输入:
5 2
1 3 5 7 2
输出:
1 2
print(a[i],end=(" "))
n = input().split()
a = input().split()
c = []
for i in range(len(a)):
c.append(int(a[i]))
c.sort()
for i in range(int(n[1])):
print(str(c[i]),end=(" "))
14最长回文子串
给定一个仅包含小写字母的字符串,求它的最长回文子串的长度。
输入:
cdabbacc
输出:
4
说明:
abba为最长的回文子串
while True:
try:
s = input()
result = 0
for i in range(len(s)):
max_len = result + 1
while i+max_len <= len(s):
if s[i:i+max_len] == s[i:i+max_len][::-1]:
result = max_len
max_len = max_len + 1
if result !=0:
print(result)
except:
break

15求最大连续bit数
求一个int类型数字对应的二进制数字中1的最大连续数,例如3的二进制为00000011,最大连续2个1
输入:
200
输出:
2
说明:
200的二进制表示是11001000,最多有2个连续的1。
s = bin(int(input()))[2:].split('0')
maxlen = 0
for i in s:
if len(i)>maxlen:
maxlen = len(i)
print(maxlen)
# s = bin(int(input()))[2:].split('0')
# print(s)
# print(max(len(i) for i in s))
16 密码强度等级
密码按如下规则进行计分,并根据不同的得分为密码进行安全等级划分。
一、密码长度:
5 分: 小于等于4 个字符
10 分: 5 到7 字符
25 分: 大于等于8 个字符
二、字母:
0 分: 没有字母
10 分: 密码里的字母全都是小(大)写字母
20 分: 密码里的字母符合”大小写混合“
三、数字:
0 分: 没有数字
10 分: 1 个数字
20 分: 大于1 个数字
四、符号:
0 分: 没有符号
10 分: 1 个符号
25 分: 大于1 个符号
五、奖励(只能选符合最多的那一种奖励):
2 分: 字母和数字
3 分: 字母、数字和符号
5 分: 大小写字母、数字和符号
最后的评分标准:
= 90: 非常安全
= 80: 安全(Secure)
= 70: 非常强
= 60: 强(Strong)
= 50: 一般(Average)
= 25: 弱(Weak)
= 0: 非常弱(Very_Weak)
对应输出为:
VERY_SECURE
SECURE
VERY_STRONG
STRONG
AVERAGE
WEAK
VERY_WEAK
请根据输入的密码字符串,进行安全评定。
注:
字母:a-z, A-Z
数字:0-9
符号包含如下: (ASCII码表可以在UltraEdit的菜单view->ASCII Table查看)
!"#$%&'()*+,-./ (ASCII码:0x21~0x2F)
:;<=>?@ (ASCII码:0x3A~0x40)
[]^_` (ASCII码:0x5B~0x60)
{|}~ (ASCII码:0x7B~0x7E)
输入:
38$@NoNoN
输出:
VERY_SECURE
说明:
样例的密码长度大于等于8个字符,得25分;大小写字母都有所以得20分;有两个数字,所以得20分;包含大于1符号,所以得25分;由于该密码包含大小写字母、数字和符号,所以奖励部分得5分,经统计得该密码的密码强度为25+20+20+25+5=95分。
又臭又长:
知识点:
判断字母是否全大写: s.isupper()
判断字母是否全小写: s.islower()
判断字符串有没有字母:re.search(‘[a-zA-Z]’,s)
import re
s = input()
fuhao = '''!"#$%&'()*+,-./:;<=>?@[\]^_`{|}~'''
shuzi = '0123456789'
sores1,sores2,sores3,sores4,sores5 = 0,0,0,0,0
# 密码长度
if len(s)<=4:
sores1 = 5
elif 5<=len(s)<=7:
sores1 = 10
else:
sores1 = 25
# print(sores1)
# 字母
if re.search('[a-zA-Z]',s) == 'False':
sores2 = 0
if re.search('[a-zA-Z]',s):
if s.isupper():
sores2 = 10
elif s.islower():
sores2 = 10
else:
sores2 = 20
# print(sores2)
# 数字
count = 0
for i in range(len(s)):
if s[i] in shuzi:
count = count+1
# print(count)
if count == 0:
sores3 = 0
elif count == 1:
sores3 = 10
else:
sores3 = 20
# print(sores3)
# 符号
count_fuhao = 0
for i in range(len(s)):
if s[i] in fuhao:
count_fuhao = count_fuhao+1
# print(count)
if count_fuhao == 0:
sores4 = 0
elif count_fuhao == 1:
sores4 = 10
else:
sores4 = 25
# print(sores4)
# 奖励
if sores2 ==10 and sores3 !=0:
sores5 = 2
elif sores2 ==10 and sores3 !=0 and sores4 !=0:
sores5 = 3
elif sores2 == 20 and sores3 !=0 and sores4 !=0:
sores5 = 5
# print(sores5)
# 总分数
sores = sores1+sores2+sores3+sores4+sores5
# print(sores)
a = ''
if sores >=90:
print("VERY_SECURE")
elif sores >=80:
print("SECURE")
elif sores >=70:
print("VERY_STRONG")
elif sores >=60:
print("STRONG")
elif sores >=50:
print("AVERAGE")
elif sores >=25:
print("WEAK")
else:
print("VERY_WEAK")
17简单密码
九键手机键盘上的数字与字母的对应: 1–1, abc–2, def–3, ghi–4, jkl–5, mno–6, pqrs–7, tuv–8 wxyz–9, 0–0,把密码中出现的小写字母都变成九键键盘对应的数字,如:a 变成 2,x 变成 9.
而密码中出现的大写字母则变成小写之后往后移一位,如:X ,先变成小写,再往后移一位,变成了 y ,例外:Z 往后移是 a 。
数字和其它的符号都不做变换。
输入:
YUANzhi1987
输出:
zvbo9441987
知识点:
s = input()
a = []
zhimu = "abcdefghijklmnopqrstuvwxyz"
for i in range(len(s)):
a.append(s[i])
if a[i] in 'abc':
a[i] = 2
elif a[i] in 'def':
a[i] = 3
elif a[i] in 'ghi':
a[i] = 4
elif a[i] in 'jkl':
a[i] = 5
elif a[i] in 'mno':
a[i] = 6
elif a[i] in 'pqrs':
a[i] = 7
elif a[i] in 'tuv':
a[i] = 8
elif a[i] in 'wxyz':
a[i] = 9
elif a[i].isupper():
if a[i] !='Z':
b = a[i].lower()
indec = zhimu.index(b)
# print(indec)
a[i] = zhimu[indec+1]
# print(a[i])
if a[i] == 'Z':
a[i] = 'a'
else:
a[i] = a[i]
# print(a)
pp = ''
for i in a:
pp = pp+str(i)
print(pp)
18求最小公倍数
c = input().split()
a = int(c[0])
b = int(c[1])
for i in range(1,b+1):
if a*i%b == 0:
print(a*i)
break
19字符统计
一个字符串,为不同字母出现次数的降序表示。若出现次数相同,则按ASCII码的升序输出。
输入:
aaddccdc
输出:
cda
说明:
样例里,c和d出现3次,a出现2次,但c的ASCII码比d小,所以先输出c,再输出d,最后输出a.
s = input()
# 输入的字符串去重并根据ASC11升序排序
list1 = sorted(set(s))
# print(list1)
# 对list1中的字母按照该字符在输入中出现的次数进行降序排序,
#由于list1已经对字符进行升序排序了,所以数字相同时自动会按照升序排序
list2 = sorted(list1,key=lambda x:s.count(x),reverse=True)
# print(list2)
print(''.join(list2))
sorted(t, key=lambda x:x[0])排序问题
sorted(d.items(), key=lambda x: x[0]) 中 d.items() 为待排序的对象;key=lambda x: x[0] 为对前面的对象中的第二维数据(即value)的值进行排序。 key=lambda 变量:变量[维数] 。维数可以按照自己的需要进行设置。
20记负均正II
输出负数个数以及所有非负数的平均值
示例1
输入:
-13
-4
-7
输出:
3
0.0
示例2
输入:
-12
1
2
输出:
1
1.5
保留1位小数:round((sum/len(d)),1)
c = []
d = []
while True:
try:
a = int(input())
if a <0:
c.append(a)
else:
d.append(a)
except:
break
print(len(c))
if len(d) == 0:
print(0.0)
else:
sum = 0
for i in range(len(d)):
sum = sum+d[i]
avg =round((sum/len(d)),1)
print(avg)
21记负均正
输出负数的个数,和所有正整数的平均值。
a = int(input())
b = list(map(int,input().split()))
count1 = 0
count2 = 0
sum1 = 0
for i in range(len(b)):
if b[i] < 0:
count1 = count1 +1
elif b[i] > 0:
count2 = count2 +1
sum1 = sum1 + b[i]
if count2 != 0:
avg = round(sum1/count2,1)
else:
avg = 0.0
print(count1,avg)
22自守数
自守数是指一个数的平方的尾数等于该数自身的自然数。例如:25^2 = 625,76^2 = 5776,9376^2 = 87909376。请求出n(包括n)以内的自守数的个数
str(i2).endswith(str(i))?*
count = 0
for i in range(int(input())+1):
if str(i**2).endswith(str(i)):
count = count +1
print(count)
23动态规划:Redraiment的走法
Redraiment是走梅花桩的高手。Redraiment可以选择任意一个起点,从前到后,但只能从低处往高处的桩子走。
输入:
6
2 5 1 5 4 5
输出:
3
说明:
6个点的高度各为 2 5 1 5 4 5
如从第1格开始走,最多为3步, 2 4 5 ,下标分别是 1 5 6
从第2格开始走,最多只有1步,5
而从第3格开始走最多有3步,1 4 5, 下标分别是 3 5 6
从第5格开始走最多有2步,4 5, 下标分别是 5 6
所以这个结果是3。
while True:
try:
n = int(input())
nums = list(map(int,input().split()))
max_length = 0
dp = [1]*n
for i in range(n):
for j in range(i):
if nums[j] < nums[i]:
dp[i] = max(dp[i],dp[j]+1)
max_length = max(max_length,dp[i])
print(max_length)
except:
break
23统计每个月兔子的总数
假设一只兔子第3个月出生,那么它第5个月开始会每个月生一只兔子。
一月的时候有一只兔子,假如兔子都不死,问第n个月的兔子总数为多少?
波那契数列变换问题
def fun(n):
if n <=2:
return 1
else:
return fun(n-2)+fun(n-1)
print(fun(int(input())))
24删除字符串中出现次数最少的字符
输入:
aabcddd
输出:
aaddd
s = input()
dic = {}
for i in s:
if i in dic:
dic[i] += 1
else:
dic[i] = 1
MIN = min(dic.values())
for i in s:
if dic[i] == MIN:
s = s.replace(i,'')
print(s)
25记票统计
请实现一个计票统计系统。你会收到很多投票,其中有合法的也有不合法的,请统计每个候选人得票的数量以及不合法的票数。
(注:不合法的投票指的是投票的名字不存在n个候选人的名字中!!)
输入描述:
第一行输入候选人的人数n,第二行输入n个候选人的名字(均为大写字母的字符串),第三行输入投票人的人数,第四行输入投票。
输出描述:
按照输入的顺序,每行输出候选人的名字和得票数量(以" : "隔开,注:英文冒号左右两边都有一个空格!),最后一行输出不合法的票数,格式为"Invalid : "+不合法的票数。
输入:
4
A B C D
8
A D E CF A GG A B
输出:
A : 3
B : 1
C : 0
D : 1
Invalid : 3
说明:
E CF GG三张票是无效的,所以Invalid的数量是3.
n1 = int(input())
list1 = input().split()
# print(list1)
n2 = int(input())
list2 = input().split()
dic1 = {}
for i in range(n2):
a = 0
if list2[i] not in dic1:
dic1[list2[i]] = 0
else:
dic1[list2[i]] += 1
# print(dic1)
dic2 = {}
for i in range(n1):
if list1[i] in dic1.keys():
dic2[list1[i]] = dic1[list1[i]]+1
else:
dic2[list1[i]] = 0
value = 0
for i in dic2:
value = value + dic2[i]
# print(value)
Invalid = n2-value
# print(Invalid)
# print(dic2)
for i in dic2:
print("%s : "%i+ str(dic2[i]))
print("Invalid : "+ str(Invalid))
26质数因子
功能:输入一个正整数,按照从小到大的顺序输出它的所有质因子(重复的也要列举)(如180的质因子为2 2 3 3 5 )
按照从小到大的顺序输出它的所有质数的因子,以空格隔开。
n = int(input())
i = 1
while i * i < n:
i = i+1
if n%i == 0:
print(i,end=' ')
n = int(n /i)
i = i-1
print(n,end=' ')
27表示数字
将一个字符串中所有的整数前后加上符号“”,其他字符保持不变。连续的数字视为一个整数。
输入:
Jkdi234klowe90a3
输出:
Jkdi234klowe90a3*
s =" " +input()+ ' '
a = ''
for i in range(len(s)-1):
if s[i].isdigit() ^ s[i+1].isdigit():
a = a + (s[i]+'*')
else:
a = a + s[i]
print(a[1:])
28完全数计算
完全数(Perfect number),又称完美数或完备数,是一些特殊的自然数。
它所有的真因子(即除了自身以外的约数)的和(即因子函数),恰好等于它本身。
例如:28,它有约数1、2、4、7、14、28,除去它本身28外,其余5个数相加,1+2+4+7+14=28。
输入:
1000
输出:
3
n = int(input())
b = []
sums = 0
for i in range(1,n+1):
sums = 0
for j in range(1,i):
if i % j == 0:
sums+=j
if sums == i:
b.append(i)
print(len(b))
29 汽水瓶
输入文件最多包含 10 组测试数据,每个数据占一行,仅包含一个正整数 n( 1<=n<=100 ),表示小张手上的空汽水瓶数。n=0 表示输入结束,你的程序不应当处理这一行。
输入:
3
10
81
0
输出:
1
5
40
归根结底就是n/2的事情
while True:
try:
n = int(input())
if n == 0:
pass
else:
sum0 = 0
while n>=3:
a = int(n/3)
b = n%3
sum0 += a
n = a + b
if n == 2:
sum0 += 1
print(sum0)
except:
break
30 蛇形矩阵
蛇形矩阵是由1开始的自然数依次排列成的一个矩阵上三角形。
例如,当输入5时,应该输出的三角形为:
1 3 6 10 15
2 5 9 14
4 8 13
7 12
11
while True:
try:
n = int(input())
# i行j列
for i in range(1,n+1):
for j in range(1,n-i+2):
if j == n - i + 1:
print((i + j - 2) * (i + j - 1) // 2 + j)
else:
print((i + j - 2) * (i + j - 1) // 2 + j,end=' ')
except:
break
31放苹果
把m个同样的苹果放在n个同样的盘子里,允许有的盘子空着不放,问共有多少种不同的分法?
注意:如果有7个苹果和3个盘子,(5,1,1)和(1,5,1)被视为是同一种分法。
数据范围:0≤m≤10 ,1≤n≤10 。
'''
m个苹果n个盘
1个苹果1个盘一种放法
没有苹果没有盘0种放法
其他:
当有n个盘都有1个苹果的时候,剩余m-n个苹果,这时候就是m-n个苹果放n个盘的问题
当有一个盘是空盘的时候,就是m个苹果放n-1个盘的问题
'''
def app(m,n):
if m ==1 or n ==1 :
return 1
elif m < 0 or n <0:
return 0
else:
return app(m-n,n)+app(m,n-1)
while True:
try:
m,n = map(int,input().split())
print(app(m,n))
except:
break
32查找组成一个偶数最接近的两个素数
任意一个偶数(大于2)都可以由2个素数组成,组成偶数的2个素数有很多种情况,本题目要求输出组成指定偶数的两个素数差值最小的素数对。
数据范围:输入的数据满足 4≤n≤1000
输入:
20
输出:
7
13
# 判断是否是素数
def checkprime(num):
if num == 1:
return False
# 2是唯一的偶数素数
if num == 2:
return True
list1 = []
# 在除开1和本身以外,如果可以被整除,说明不是素数
for i in range(2, num):
if num % i == 0:
list1.append(i)
# 如果不存在list1,说明没有其他数可以整除它,说明是素数
if not list1:
return True
else:
return False
while True:
try:
n = int(input())
num = n // 2
for i in range(num):
# 从中位数往前后不断去加减整数
a, b = num + i, num - i
# 确定是否是素数,如果是则输出,结束循环
if checkprime(a) and checkprime(b):
print(b)
print(a)
break
except:
break
33走方格的方案数
请计算n*m的棋盘格子(n为横向的格子数,m为竖向的格子数)从棋盘左上角出发沿着边缘线从左上角走到右下角,总共有多少种走法,要求不能走回头路,即:只能往右和往下走,不能往左和往上走。
注:沿棋盘格之间的边缘线行走
数据范围: 1≤n,m≤8
输入两个正整数n和m,用空格隔开。(1≤n,m≤8)
输出一行结果
输入:
2 2
输出:
6
# 递归
# n,m:横向的格子数、竖向的格子数
def walk(n,m):
if n ==0 or m == 0:
return 1
else:
return walk(m-1,n)+walk(m,n-1)
while True:
try:
n,m = map(int,input().split())
print(walk(n,m))
except:
break