1.任意整数各个位数之和
请输入任意一个正整数,求各个位数之和并输出。
输入样例1:
123
输出样例1:
sum=6
代码:
s, sum = input(), 0
for i in s:
sum += int(i)
print('sum=%d' % sum)
2.列表下标转换
【题目描述】
从键盘输入一个字符串,保证字符串中的元素仅由英文单词构成(单词之间用英文逗号隔开)。请你先对字符串中的元素进行排序(仅排序,不要改变原本的字符串),然后将字符串中的每个元素替换为它们排序后的序号。请将替换后的字符串以列表的形式输出。
【详细解释】序号代表了一个元素有多大。序号编号的规则如下:
1、序号从 1 开始编号;
2、一个元素越大,那么序号越大;
3、果两个元素相等,那么它们的序号相同;
4、英文字母按照首字母的大小进行排序,如果首字母相同,则按第二个字母进行排序,依次类推;
【输入描述】
一行英文单词,单词之间用逗号隔开。
【输出描述】
一个列表。
【输入样例1】
a,a,a
【输出样例1】
[1,1,1]
【输入样例2】
a,a,h,b,c,e,d,f,ab,dd,c,f
【输出样例2】
[1,1,9,3,4,7,5,8,2,6,4,8]
代码:
s = input().split(',')
a = s[::]
a.sort()
ans, id, cnt = [], {}, 1
for i in range(len(a)):
if not i or a[i] == a[i - 1]:
id[a[i]] = cnt
else:
cnt += 1
id[a[i]] = cnt
for i in range(len(s)):
if s[i] != ',':
ans.append(id[s[i]])
print('[%d' % ans[0], end = '')
for i in range(1,len(ans)):
print(',%d' % ans[i], end = '')
print(']')
3.稀疏矩阵的表示
【题目描述】
稀疏矩阵,即包含大量值为 0 的矩阵,此类矩阵的一种存储方法是将矩阵中所有非 0 元素所在的位置(行标和列标)和元素值存储在顺序表(数组)中,通过存储由所有非 0 元素的三元组构成的顺序表,和该稀疏矩阵的行数、列数以及非零元素总个数构成的三元组,即可完成对整个稀疏矩阵的存储,这就是稀疏矩阵使用三元组表示的实现思想。
例如:
下面三元组表:
((1,2,12),(1,3,9),(3,1,-3),(3,6,14),(4,3,24),(5,2,18),(6,1,15),(6,4,-7),(6,7,8))
最后一个三元组(6,7,8),表示系数矩阵为6行7列,包含8个非零元。
所存储的矩阵为:
0 12 9 0 0 0 0
0 0 0 0 0 0 0
-3 0 0 0 0 14 0
0 0 24 0 0 0 0
0 18 0 0 0 0 0
15 0 0 -7 0 0 0
编写程序,从键盘输入一个 m行 x n列 的稀疏矩阵,输出他的三元表表示方法,及转置后的矩阵。
【注意】每输入一行应判断本行的列数是否与 n 相等,若不相等则直接结束程序,并输出’输入错误!’
【输入要求】
第一行,两个正整数 m 和 n 代表矩阵的行数和列数,中间用逗号隔开。
第二~M+1行,为一个稀疏矩阵(该矩阵中的非0元素可为整数或小数)。
【输出要求】
第一行,该稀疏矩阵的三元表示法。
第二~N+1行,为该稀疏矩阵的转置矩阵(注意每个元素占6位,且最后一行不换行。
Sample Input 1
8,5
1 0 0 0 0
3 0 0 0 0 0 0 0
Sample Output 1
Input error in line 2 of the matrix!
Sample Input 2
4,6
1.2 0 0 3 0 0
0 0 0 3.4 0 0
-2 -2.1 0 0 0 0
0 0 0 1 0 0.0
Sample Output 2
Triplet List:
((1, 1, 1.2), (1, 4, 3), (2, 4, 3.4), (3, 1, -2), (3, 2, -2.1), (4, 4, 1), (4, 6, 6))
Transpose matrix:
1.2 0 -2 0
0 0 -2.1 0
0 0 0 0
3 3.4 0 1
0 0 0 0
0 0 0 0.0
代码:
m,n = map(int,input().split(','))
a,ans,cnt = [],[],0
for i in range(m):
a.append(list(map(eval,input().split())))
if len(a[i]) != n:
print(f'Input error in line {i+1} of the matrix!')
exit()
for i in range(m):
for j in range(n):
if a[i][j] != 0:
ans.append((i+1,j+1,a[i][j]))
cnt += 1
ans.append((m,n,cnt))
print('Triplet List:')
print(tuple(ans))
print('Transpose matrix:')
for i in zip(*a):
for j in i:
print(f'{j:^6}',end=' ')
if i != zip(*a)[-1]:
print()
4.有序列表插入元素
【题目描述】
从键盘上获取一个已按升序排好的整数列表(测试样例的数都已严格按照升序输入),用户输入一个待插入的整数,编写程序,实现插入该数后,列表后仍保持有序。
【输入描述】
样例输入:
1、列表元素由空格隔开。
2、待插入的整数。
【输出描述】
样例输出:
输出后的列表为X,插入后的索引值为X
若插入元素的值与已有列表中的元素相同,则X为最大下标索引值。
【输入样例1】
1 2 3 3 3 4
3
【输出样例1】
输出后的列表为[1, 2, 3, 3, 3, 3, 4],插入索引值为5
代码:
a = list(map(int, input().split()))
b = eval(input())
a.append(b)
a.sort()
print('输出后的列表为', end = '')
print(a, end = '')
print(',插入索引值为%d' % (a.index(b) + a.count(b) - 1))
5.列表合并去重
【题目描述】
输入两个列表alist和blist,要求列表中的每个元素都为正整数且不超过10;合并alist和blist,并将重复的元素去掉后输出一个新的列表clist。同时为保证输出结果一致,请将列表clist内元素按升序排序之后再输出。
【输入描述】
共两行,每一行都用来输入列表中的元素值,以空格隔开。
【输出描述】
共一行,以列表形式打印输出。
【输入样例1】
1 2 3
4 3 2
【输出样例1】
[1, 2, 3, 4]
代码:
a = list(map(int, input().split()))
b = list(map(int, input().split()))
print(list(set(a + b)))
6.单词的区域
Description
输入一个列表 words ,列表中的元素全部为由字符串组成的单词,遍历整个列表,将所有可以使用键盘中同一区域字母打印出来的单词,和其所对应的颜色区域组成”键值对“存入字典当中,并输出。键盘如下图所示。
美式键盘中:
红色区域由字符 “qweasdzxc” 组成。
蓝色区域由字符 “rtyfghvbn” 组成。
黄色区域由字符 “uiopjklm” 组成。
Input
一行仅由单词组成的字符串,单词之间用空格隔开。
Output
一行,单词区域的字典。
Sample Input 1
sea hello Dad Peace try pop
Sample Output 1
{‘Red’: [‘sea’, ‘Dad’], ‘Blue’: [‘try’], ‘Yellow’: [‘pop’]}
Sample Input 2
BLUE red yellow pink
Sample Output 2
{‘Red’: [], ‘Blue’: [], ‘Yellow’: []}
代码:
def check(x, y):
for i in x:
if y.find(i)==-1:
return False
return True
s = list(input().split())
a= {'qweasdzxc':'Red', 'rtyfghvbn':'Blue', 'uiopjklm':'Yellow'}
ans = {'Red':[], 'Blue':[], 'Yellow':[] }
for i in s:
flag = False
for j in a.keys():
if check(i.lower(),j):
flag = True
ans[a[j]].append(i)
break
print(ans)
7.查验身份证
【题目描述】
一个合法的身份证号码由17位地区、日期编号和顺序编号加1位校验码组成。校验码的计算规则如下:首先对前17位数字加权求和,权重分配为:[7,9,10,5,8,4,2,1,6,3,7,9,10,5,8,4,2];然后将计算的和对11取模得到值Z;最后按照以下关系对应Z值与校验码M的值:
Z:0 1 2 3 4 5 6 7 8 9 10
M:1 0 X 9 8 7 6 5 4 3 2
现在给定一些身份证号码,请你验证校验码的有效性,并输出有问题的号码。
【输入描述】
输入第一行给出正整数N(≤100)是输入的身份证号码的个数。随后N行,每行给出1个18位身份证号码。
【输出描述】
按照输入的顺序每行输出1个有问题的身份证号码。这里并不检验前17位是否合理,只检查前17位是否全为数字且最后1位校验码计算准确。如果所有号码都正常,则输出All passed。
【输入样例1】
4
320124198808240056
12010X198901011234
110108196711301866
37070419881216001X
【输出样例1】
12010X198901011234
110108196711301866
37070419881216001X
【输入样例2】
2
320124198808240056
110108196711301862
【输出样例2】
All passed
代码:
n = int(input())
m = [7, 9, 10, 5, 8, 4, 2, 1, 6, 3, 7, 9, 10, 5, 8, 4, 2]
z = '10X98765432'
flag = True
while(n):
n -= 1
s = input()
x = list(''.join(s[:]))
res = 0
for i in range(0,17):
if x[i] != 'X':
res += m[i] * int(x[i])
if x[-1] != z[res % 11]:
print(s)
flag = False
if flag:
print('All passed')
8.亲和数
【题目描述】
古希腊数学家毕达哥拉斯在自然数研究中发现,220的所有真约数(即不是自身的约数)之和为:1+2+4+5+10+11+20+22+44+55+110=284。
而284的所有真约数为1、2、4、71、 142,加起来恰好为220。
人们对这样的数感到很惊奇,并称之为亲和数。
一般地讲,如果两个数中任何一个数都是另一个数的真约数之和,则这两个数就是亲和数。
你的任务就编写一个程序,判断给定的两个数是否是亲和数。
【输入描述】
两个整数A,B; 其中 0 <=A,B <=600000 ;
【输出描述】
如果A和B是亲和数的话输出YES,否则输出NO。
【输入样例1】
220 284
【输出样例1】
YES
【输入样例2】
100 200
【输出样例2】
NO
代码:
a, b = map(int, input().split())
def get(x):
res = 0
for i in range(1,x):
if x % i == 0:
res += i
return res
if get(a) == b and get(b) == a:
print('YES')
else:
print('NO')
9.乘积的列表
【题目描述】
给定一个包含若干个整数的列表alist,要求返回输出列表blist,blist中的元素为除与alist对应位置上的元素之外其余各元素的乘积。(注:原列表的1位于1号位置,结果应该等于除去1号位置的其他元素的积,对应输出6=23,原列表的2,对应输出3=13,原列表的3,对应输出2=1*2)
【输入描述】
共一行,元素以空格隔开。
【输出描述】
共一行,为一个列表。
【输入样例1】
1 2 3
【输出样例1】
[6, 3, 2]
代码:
a = list(map(int, input().split()))
sum = 1
for i in a:
sum *= i
if not sum:
b = []
for i in range(len(a)):
cnt = 1
for j in range(len(a)):
if j != i:
cnt *= a[j]
b.append(cnt)
print(b)
else:
b = [sum // i for i in a]
print(b)
10.矩阵相加
Description
正整数n,代表要输入的是n*n的矩阵,两个矩阵由用户输入,计算输出两个矩阵相加的和。
Input
一个整数n,和两个矩阵的值。
Output
两个矩阵相加后的值,每个元素占三位,中间对齐,元素之间由两个空格组成。
Sample Input 1
3
12 3 -5
1 -9 0
3 6 8
1 8 9
6 5 4
3 2 1
Sample Output 1
13 11 4
7 -4 4
6 8 9
代码:
n = int(input())
a = [[]for i in range(n)]
for i in range(n):
a[i] = list(map(int,input().split()))
for i in range(n):
a[i] = [j + k for j, k in zip(a[i], list(map(int,input().split())))]
for i in range(n):
for j in range(n):
print(f'{a[i][j]:^3}', end=' ')
print()