该题库是程序设计实习MOOC的python题库,一共94题的答案,建议先自己尝试再看答案,题目链接如下:OpenJudge – OpenJudge
http://cxsjsxmooc.openjudge.cn/book/
001:A+B问题
A=input()
B=A.split(' ',1)
print(int(B[0])+int(B[1]))
002:字符三角形
a=input()
A="{:^5}".format(a)
B="{0:>2}{1:<3}".format(a, a*2)
C="{:^5}".format(a*5)
print(A)
print(B)
print(C)
003:计算(a+b)*c的值
A=input()
B=A.split(' ',2)
print((int(B[0])+int(B[1]))*int(B[2]))
004:反向输出一个三位数
A=input()
print(A[::-1])
005:字符菱形
a=input()
A="{:^5}".format(a)
B="{0:>2}{1:<3}".format(a, a*2)
C="{:^5}".format(a*5)
print(A)
print(B)
print(C)
print(B)
print(A)
006:输出第二个整数
A=input()
B=A.split(' ',2)
print(B[1])
007:求三个数的和
A=input()
B=A.split(' ',2)
a1=float(B[0])
a2=float(B[1])
a3=float(B[2])
s=a1+a2+a3
if s==int(s):
C="{:.1f}".format(s)
print(C)
else:
print(s)
008:字符串交换
A=input()
B=input()
print(B[0]+B[1]+A[2]+A[3])
print(A[0]+A[1]+B[2]+B[3])
009:字符串中的整数求和
A=input()
B=A.split(' ',1)
C=B[0]
D=B[1]
print(int(C[0:2])+int(D[0:2]))
010:求(x+y)*x的值
A=input()
B=A.split(' ',1)
a1=float(B[0])
a2=float(B[1])
s=(a1+a2)*a1
print("{:.5f}".format(s))
011:奇偶数判断
A=int(input())
if A%2==0:
print('even')
else:
print('odd')
012:判断子串
A=input()
B=input()
if B.find(A)==-1:
print('NO')
else:
print('YES')
013:三角形判断
A=input()
B=A.split(' ',2)
a1=int(B[0])
a2=int(B[1])
a3=int(B[2])
if a1+a2>a3 and a1+a3>a2 and a2+a3>a1:
print('yes')
else:
print("no")
014:简单计算器
A=input()
B=A.split(' ',2)
a1=int(B[0])
a2=int(B[1])
a3=B[2]
if a3=='+':
print(a1+a2)
elif a3=='-':
print(a1-a2)
elif a3=='*':
print(a1*a2)
elif a3 == '/':
if a2==0:
print('Divided by zero!')
else:
print(a1//a2)
else:
print('Invalid operator!')
015:摄氏华氏温度转换
import decimal
A=input()
B=A[::-1]
a=A[0:len(A)-1]
x1=decimal.Decimal(a)
x2=decimal.Decimal('32')
x3=decimal.Decimal('1.8')
if B[0]=='F' or B[0]=='f':
d=(x1-x2)/x3
if int(d)==d:
e="{:^}".format(int(d))
else:
e="{:.2f}".format(d)
print(str(e)+'C')
else:
d=x1*x3+x2
if int(d)==d:
e="{:^}".format(int(d))
else:
e="{:.2f}".format(d)
print(str(e)+'F')
016:幸运的年份
A=int(input())
if (A-1949)%10==0:
print('Lucky year')
elif (A-1921)%10==0:
print('Good year')
elif A%400==0 or (A%4==0 and A%100>0):
print('Leap year')
elif A>0:
print('Common year')
else:
print('Illegal year')
017:计算2的幂
a=int(input())
print(2**a)
018:计算多项式的值
A=input()
B=A.split(' ',4)
x=float(B[0])
a=float(B[1])
b=float(B[2])
c=float(B[3])
d=float(B[4])
y=a*(x**3)+b*(x**2)+c*x+d
print("{:.7f}".format(y))
019:车牌限号
A=input()
B=A[::-1]
c=int(B[0])
if c%2==0:
print('NO')
else:
print('YES')
020:点和正方形的关系
A=input()
B=A.split(' ',1)
if abs(eval(B[0]))<=1 and abs(eval(B[1]))<=1:
print('yes')
else:
print('no')
021:计算邮资
import math
A=input()
B=A.split(' ',1)
if int(B[0])<=1000:
p=8
else:
a1=int(B[0])-1000
n=math.ceil(a1/500)
p=8+4*n
if B[1]=='y':
p+=5
print(p)
022:分段函数
A=input()
x=float(A)
y=(-x+2.5 if 0<=x<5 else
2-1.5*(x-3)*(x-3) if 5<=x<10 else
x/2-1.5)
print("{:.3f}".format(y))
023:大象喝水
import math
A=input()
B=A.split(' ',1)
a1=int(B[0])
a2=int(B[1])
V=3.14159*a1*a2*a2
n=math.ceil(20000/V)
print(n)
024:苹果和虫子2
import math
A=input()
B=A.split(' ',2)
a1=int(B[0])
a2=int(B[1])
a3=int(B[2])
n=math.ceil(a3/a2)
if a1-n>=0:
print(a1-n)
else:
print(0)
025:求一元二次方程的根
A=input()
B=A.split(' ',2)
a=float(B[0])
b=float(B[1])
c=float(B[2])
d=b*b-4*a*c
if d>0:
x1=(-b+d**0.5)/(2*a)
x2 =(-b-d ** 0.5) /(2*a)
X1=max(x1,x2)
X2=min(x1,x2)
print("x1={:.5f};x2={:.5f}".format(X1,X2))
elif d<0:
r=-b/(2*a)
x1 = (-d) ** 0.5/ (2 * a)
if -r==r:
r=0
print("x1={:.5f}+{:.5f}i;x2={:.5f}-{:.5f}i".format(r,x1,r,x1))
else:
r = -b / (2 * a)
print("x1=x2={:.5f}".format(r))
026:输入n个整数求和
a=0
n=input()
for i in range(int(n)):
a1=input()
b=int(a1)
a=b+a
print(a)
027:从小到大输出正整数n的因子
n=input()
a=[]
for i in range(int(n)):
if (int(n))%(i+1)==0:
print(i+1,end=' ')
028:多次求n个数的和
m=input()
for i in range(int(m)):
n=input()
a=0
for j in range(int(n)):
a1=input()
b=int(a1)
a=b+a
print(a)
029:字符直角三角形
A=input()
B=A.split(' ',2)
for i in range(int(B[1])):
print(B[0]*(i+1))
030:多少种和为因子的取法
A=input()
a=0
B=A.split(' ',1)
a1=int(B[0])
a2=int(B[1])
for i in range(a1):
for j in range(a1):
b1=i+1
b2=j+1
if a2/(b1+b2)>=1 and a2%(b1+b2)==0 and b1<b2:
print(b1,b2)
a+=1
print(a)
031:寻找子串
A=input()
B=input()
C=B.replace(' ','')
c=A.find(C)
print(c)
032:求最小公倍数
A=input()
B=A.split(' ',2)
a1=int(B[0])
a2=int(B[1])
a3=int(B[2])
n=a1*a2*a3
for i in range(n):
c=i+1
if c%a1==0 and c%a2==0 and c%a3==0:
print(c)
break
033:十进制数转二进制数
number = int(input())
binnum = bin(number)
if number>0:
print(binnum[2:])
elif number==0:
print(0)
else:
print('-'+binnum[3:])
034:求最大整数
# 输入若干行,每行若干整数,求所有整数的最大值
s=input().split()
maxV = eval(s[0])
try:
while True:
for x in s:
maxV = max(maxV, int(x))
s = input().split() # 输入数据已经没有了还执行input,会产生异常
except: # pycharm里Ctrl+D表示输入结束
pass # pass语句啥都不做,就是玩儿(你可以省略试试)
print(maxV)
035:求斐波那契数列第k项
A=int(input())
B=[0]*46
for i in range(A):
if i<=1:
B[i]=1
else:
B[i]=B[i-1]+B[i-2]
print(B[i])
036:求阶乘的和
import math
s=0
n = int(input())
for i in range(n):
a=math.factorial(i+1)
s=s+a
print(s)
037:求不大于n的全部质数
A=int(input())
if A>2:
for i in range(2,A+1):
for x in range(2,i):
if i%x==0:
break
else:
print(i,end=' ')
else:
print(2)
038:角谷猜想
n = int(input())
while n != 1:
if n % 2:
print(str(n)+'*3+1='+str(n*3+1))
n = n*3 + 1
else:
print(str(n)+'/2='+str(n//2))
n = n // 2
print('End')
039:数字统计
A=input()
B=A.split(' ',1)
s=0
for i in range(int(B[0]),int(B[1])+1):
a=str(i)
c=a.count('2')
s+=c
print(s)
040:求整数的和与均值
A=input()
B=int(A)
s=0
for i in range(B):
C=int(input())
s=s+C
print("{:^} {:.5f}".format(s,s/B))
041:整数序列的元素最大跨度值
A=int(input())
B=input()
B1=B.split(' ',A)
a1=a2=int(B1[0])
for i in range(A):
a3=int(B1[i])
a1=max(a3,a1)
a2=min(a3,a2)
print(a1-a2)
042:毕业生年薪统计
A=int(input())
B=input()
a=0
B1=B.split(' ',A)
for i in range(A):
a3=int(B1[i])
if a3>=30:
a+=1
print(a)
043:奥运奖牌计数
A=int(input())
s1=s2=s3=0
for i in range(A):
B=input()
B1=B.split(' ',3)
s1=s1+int(B1[0])
s2=s2 + int(B1[1])
s3=s3 + int(B1[2])
S=s1+s2+s3
print(s1,s2,s3,S)
044:鸡尾酒疗法
A=int(input())
A1=[0]*A
for i in range(A):
B=input()
B1=B.split(' ',2)
A1[i]=int(B1[1])/int(B1[0])
for i in range(A-1):
if A1[i+1]-A1[0]>0.05:
print('better')
elif A1[0]-A1[i+1]>0.05:
print('worse')
else:
print('same')
045:正常血压
A=int(input())
c=0
s=0
for i in range(A):
B=input()
B1=B.split(' ',2)
a1=int(B1[0])
a2 = int(B1[1])
if 90<=a1<=140 and 60<=a2<=90:
c+=1
if c>s:
s=c
else:
c=0
print(s)
046:数字反转
A=input()
A1=int(A)
if A1>0:
b=A[::-1]
for i in range(len(A)):
if b[i]=='0' and b[i+1]>'0' and b[0]=='0':
d=i+1
break
else:
d=0
print(b[d:])
else:
A=A[1:]
b = A[::-1]
for i in range(len(A)):
if b[i] == '0' and b[i + 1] > '0' and b[0] == '0':
d = i + 1
break
else:
d = 0
print(-int(b[d:]))
047:求特殊自然数
for i in range(401,1000):
a=str(i)
b=int(a[0])
c=int(a[1])
d=int(a[2])
e1=b*49+c*7+d
e2=d*81+c*9+b
if e1==e2:
print(e1)
print(a)
print(a[::-1])
break
048:字符计数
A=int(input())
for i in range(A):
a=input()
b=input().split()
for j in range(len(b)):
c=b[j].upper()
d=c.count(a.upper())
if j==len(b)-1:
print(d,end='
')
else:
print(d,end=' ')
049:八皇后问题
def fanzhuan(board):
board1=[0]*len(board)
for i, t in enumerate(board):
board1[t]=i
return board1
# 检查当前位置是否可以放置 Queen
def check(board, row, col):
for i in range(row):
# 不在同一列 不在同一对角线
if abs(board[i] - col) == 0 or abs(board[i] - col) == abs(i - row):
return False
return True
def eightQueen(board, row):
# 皇后个数
global s
border = len(board)
# 当 row >= border 时,代表此时每行都能摆放皇后,即获得解法
if row >= border:
s=s+1
print("No. "+str(s))
board=fanzhuan(board)
for i, col in enumerate(board):
print('0 ' * col + '1 ' + '0 ' * (len(board) - 1 - col))
# 逐列遍历
for col in range(border):
if check(board, row, col):
# board 的key代表皇后保存的row,value代表皇后保存的col
board[row] = col
eightQueen(board, row + 1)
_board = [0 for i in range(8)]
global s
s=0
eightQueen(_board, 0)
050:上台阶
def taijie(n):
if n==1:
return 1
elif n==2:
return 2
else:
return taijie(n-1)+taijie(n-2)
print(taijie(int(input())))
051:汉诺塔问题
def taijie(n,x="A",y="B",z="C"):
if n==1:
print("{}->{}".format(x,z))
else:
taijie(n-1,x,z,y)
print("{}->{}".format(x,z))
taijie(n - 1, y, x, z)
taijie(int(input()))
052:N皇后问题
# 确认最后的基线及迭代条件
def FoundQueen(List1, m):
for var1 in range(m):
if not conflict(List1, var1):
if len(List1) == m - 1:
yield [var1];
else:
List2 = (List1 + [var1]).copy();
for result in FoundQueen(List2, m):
yield [var1] + result;
# 确认冲突的条件
def conflict(list1, y):
len1 = len(list1)
for var in range(len1):
if y == list1[var] or abs(y - list1[var]) == abs(len1 - var):
return True;
return False;
aa=int(input())
if aa==2 or aa==3:
print('NO ANSWER')
else:
queens = list(FoundQueen([],aa))
a=len(queens)
b=len(queens[0])
for i in range(a):
for j in range(b):
print(queens[i][j],end=" ")
print("")
053:求最大公约数问题
A=input()
B=A.split(' ',1)
a1=max(int(B[0]),int(B[1]))
a2=min(int(B[0]),int(B[1]))
while a1%a2>0:
c=a1%a2
a1=a2
a2=c
print(a2)
054:递归复习法
def fuxi(B):
if B==1:
return 1
elif B == 2:
return 2
else:
return fuxi(B-1)+fuxi(B-2)+B
A=int(input())
for i in range(A):
B=int(input())
print(fuxi(B))
055:多少种取法
def ways(m, n, s):
# 第一类,各种特殊情况
if s < 0 or n < 0 or m <= 0: # 当输入数据小于0时,取法为0
return 0
elif n == 0 and s == 0: # 当n==0且s==0时,只有1种取法
return 1
elif n == 0 and s > 0: # 当取0个,但是s>0时,取法为0
return 0
elif n == 1: # 判断n=1的情况
if m >= s:
return 1 # 若m>=s,只有1种取法
else:
return 0 # 若m<s,则取法为0
elif m >= n and s == 0: # 当m>=n 并且 s=0时 ,只有1种取法
return 1
elif n > 1 and s == 1: # 当n>1且s=0时 ,取法为0
return 0
# 第二类,讨论大类
elif m > s: # 当m>s时
if n == s or n > s:
return 0
elif 1 < n < s:
return ways(s - 1, n, s)
elif m < s: # 当m<s时
return ways(m - 1, n - 1, s - m) + ways(m - 1, n, s) # 当取m时 与 不取m时 的和
elif m == s: # 当m=s时
if n > m:
return 0
else:
return ways(m - 1, n, s)
t = eval(input()) # t组数
for i in range(t):
m, n, s = map(int, input().split())
print(ways(m, n, s))
056:分解因数
def DFS(n, m):
count = 0
if n == 1:
return 1
i = m
while i <= n:
if n % i == 0:
count += DFS(n // i, i)
i += 1
return count
t = int(input())
while t != 0:
n = int(input())
print(DFS(n, 2))
t -= 1
057:全排列
#求出num_list中各个数字的全排列,结果是各个排列组成的列表。
def quanpailie(num_list):
if len(num_list) == 0:
return []
if len(num_list) == 1:
return [num_list] #只有1个数字的情形。注意:结果是列表的列表
pailie_list = []
for i in range(len(num_list)): #对于num_list中的每个数字
#得到以第 i 个数字打头的排列
num_list_pop_i = num_list[:] #[:]不能省略。作用是复制一份列表。
num = num_list_pop_i.pop(i) #从num_list中取出第i个数字
#得到第i个数字打头的所有排列 = 打头数字 + num_list_pop_i的全排列
for qpl in quanpailie(num_list_pop_i): #对于num_list_pop_i的全排列中的每一个排列
qpl.insert(0, num) #该排列的头部加上打头数字
pailie_list.append(qpl) #得到num_list的一个排列
return pailie_list
A=input()
B=[]
for i in range(len(A)):
B.append(A[i])
C=quanpailie(B)
for i in range(len(C)):
s = "".join(C[i])
print(s,end="
")
058:校门外的树
A=input()
B=A.split(' ',1)
C=[0]*(int(B[0])+1)
for i in range(int(B[1])):
a = input()
b = a.split(' ', 1)
for j in range(int(B[0])+1):
if int(b[0])<=j<=int(b[1]):
C[j]=1
print(int(B[0])+1-sum(C))
059:石头剪刀布
A=input()
B=A.split(' ',2)
a1=int(B[0])
a2=int(B[1])
a3=int(B[2])
C=[[0]*a2,[0]*a3]
for i in range(2):
C[i]=input().split()
[b1,c1]=divmod(a1,a2)
[b2,c2]=divmod(a1,a3)
C[0]=C[0]*b1+list(C[0][0:c1])
C[1]=C[1]*b2+list(C[1][0:c2])
def fuxi(B):
s=s1=0
for i in range(a1):
if (C[0][i]=='0' and C[1][i]=='2') or (C[0][i]=='2' and C[1][i]=='5') or (C[0][i]=='5' and C[1][i]=='0'):
s+=1
elif (C[1][i]=='0' and C[0][i]=='2') or (C[1][i]=='2' and C[0][i]=='5') or (C[1][i]=='5' and C[0][i]=='0'):
s1+=1
if s>s1:
print("A")
elif s<s1:
print("B")
else:
print("draw")
fuxi(C)
060:学生排序
n = int(input())
a = []
for i in range(n):
s = input().split()
s[1]=int(s[1])
s[2] = int(s[2])
a.append(s)
a.sort(key = lambda x:(-x[2],-x[1],x[0]))
for i in range(len(a)):
for j in range(3):
print(a[i][j],end=" ")
print("")
061:图像模糊处理
m,n=map(int,input().split())#获得两个矩阵的行列数
D=[[0 for i in range(n)] for j in range(m)]
C=[[0]*n]*m
for i in range(m):
C[i]=input().split()
for j in range(n):
C[i][j]=int(C[i][j])
for i in range(m):
for j in range(n):
if i==0 or i==m-1 or j==0 or j==n-1:
D[i][j]=C[i][j]
else:
D[i][j] =round((C[i-1][j]+C[i+1][j]+C[i][j-1]+C[i][j+1]+C[i][j])/5)
for i in range(m):
for j in range(n):
print(D[i][j],end=' ')
print("")
062:单词出现频率统计
dict={}
try:
while True:
s=input()
dict[s]=dict.get(s,0)+1
except:
for x in sorted(dict.items(),key=lambda x:(-x[1],x[0])):
print(x[1],x[0])
063:统计不重复的单词个数
s = []
while 1:
try:
s.append(input())
except:
print(len(set(s)))
break
064:过滤多余的空格
解法一:
A=input()
B=A.split()
for i in range(len(B)):
if i==len(B)-1:
print(B[i])
else:
print(B[i],end=' ')
解法二:
import re
A=input()
print(re.sub(r' +',' ',A))#以列表的方式返回
065:统计数字字符个数
解法一:
A=input()
s=0
for i in range(10):
a=str(i)
b=A.count(a)
s=s+b
print(s)
解法二:
import re
s1=0
A=input()
C=re.findall(r'd+',A)#以列表的方式返回
if len(C)>0:
for i in range(len(C)):
s=len(C[i])
s1=s+s1
print(s1)
else:
print(0)
066:大小写字母互换
解法一:
A=input()
B=[0]*len(A)
for i in range(len(A)):
if 'a'<=A[i]<='z':
c=A[i]
B[i]=c.upper()
elif 'A'<=A[i]<='Z':
c = A[i]
B[i] = c.lower()
else:
B[i] = A[i]
B1=''.join(B)
print(B1)
解法二:
A=input()
print(A.swapcase())
067:找第一个只出现一次的字符
A=input()
for i in range(len(A)):
if A.count(A[i])==1:
print(A[i])
break
if i ==len(A)-1 and i>0:
print('no')
068:判断字符串是否为回文
A=input()
B=A[::-1]
if A==B:
print('yes')
else:
print('no')
069:字符串最大跨距
A=input()
B=A.split(',',2)
S=B[0]
S1=B[1]
S2=B[2]
a=len(S)
a1=len(S1)
a2=len(S2)
c=S.index(S1)
c1=a-S[::-1].index(S2[::-1])
if c+a1<=c1-a2:
print(c1-a2-a1-c)
else:
print(-1)
070:找出全部子串位置
n=int(input())
for i in range(n):
a,b=input().split()
t=0
if a.find(b)==-1:
print("no")
else:
while True:
t=a.find(b,t)
if t==-1:
break
print(t,end=" ")
t=t+len(b)
print()
071:石头剪刀布
A=input()
B=A.split(' ',2)
a1=int(B[0])
a2=int(B[1])
a3=int(B[2])
C=[[0]*a2,[0]*a3]
for i in range(2):
C[i]=input().split()
[b1,c1]=divmod(a1,a2)
[b2,c2]=divmod(a1,a3)
C[0]=C[0]*b1+list(C[0][0:c1])
C[1]=C[1]*b2+list(C[1][0:c2])
def fuxi(B):
s=s1=0
for i in range(a1):
if (C[0][i]=='0' and C[1][i]=='2') or (C[0][i]=='2' and C[1][i]=='5') or (C[0][i]=='5' and C[1][i]=='0'):
s+=1
elif (C[1][i]=='0' and C[0][i]=='2') or (C[1][i]=='2' and C[0][i]=='5') or (C[1][i]=='5' and C[0][i]=='0'):
s1+=1
if s>s1:
print("A")
elif s<s1:
print("B")
else:
print("draw")
fuxi(C)
072:向量点积计算
A=int(input())
m=[0]*A
B=input().split()
C=input().split()
for i in range(A):
m[i]=int(B[i])*int(C[i])
print(sum(m))
073:万年历
xq=["Sunday","Monday","Tuesday","Wednesday","Thursday", "Friday","Saturday"]
n=int(input())
for n1 in range(n):
monthDays = [-1, 31, 28, 31, 30, 31, 30, 31, 31, 30, 31, 30, 31]
days = 0
lst = input().split()
year, month, date = int(lst[0]), int(lst[1]), int(lst[2])
# 该模块判断是否合法
buhefa=0
if month>12 or month<1:
buhefa=1
else:
if year % 4 == 0 and year % 100 != 0 or year % 400 == 0:
if (date < 1 or date > monthDays[month]) and month != 2:
buhefa = 1
if month == 2 and date > 29:
buhefa = 1
else:
if date < 1 or date > monthDays[month]:
buhefa = 1
# 该模块判断是否合法
if buhefa: # 不合法
print("Illegal")
else: # 合法
if year >= 2012:
for y in range(2012, year): # 先累加过掉的整年的天数
if y % 4 == 0 and y % 100 != 0 or y % 400 == 0: # 闰年
days += 366
else:
days += 365
if year % 4 == 0 and year % 100 != 0 or year % 400 == 0:
monthDays[2] = 29
for i in range(1, month): # 再累加year那年过掉的整月的天数
days += monthDays[i]
days += date # 累加year年month那个月的天数
days -= 22 # 2012年1月22日是星期天。扣掉2012年的前22天
print(xq[days % 7]) # 星期天算一周的第0天
else:
for y in range(year, 2012):
if y % 4 == 0 and y % 100 != 0 or y % 400 == 0: # 闰年
days += 366
else:
days += 365
if year % 4 == 0 and year % 100 != 0 or year % 400 == 0:
monthDays[2] = 29
for i in range(1, month): # 减去多余的
days -= monthDays[i]
days -= date # 同上需要减去多余的
days += 22 # 加上需要的
print(xq[(7 - days % 7) % 7]) #
074:很简单的整数划分问题
n = int(input())
dp = [0]*(n+1)
dp[0] = 1
mod = int(1e9+7)
for i in range(1, n+1):
for j in range(i, n+1):
dp[j] = (dp[j] + dp[j-i]) % mod
print(dp[n])
075:病人排队
n = int(input())
a = []
for i in range(n):
s = input().split()
a.append(s + [i])
def f(x):
if int(x[1]) >= 60:
return (-int(x[1]),int(x[2]))
else:
return (0,x[2])
a.sort(key = f)
for j in range(n):
print(a[j][0])
076:回文子串
s = input()
for i in range(2,len(s)+1):
for j in range(0,len(s)+1-i):
t = s[j:j+i]
if t == t[::-1]:
print(t)
077:矩阵乘法
A=input()
B=A.split(' ',2)
a1=int(B[0])
a2=int(B[1])
a3=int(B[2])
C=[[0]*a2]*a1
D=[[0]*a3]*a2
b=[[0 for i in range(a3)] for j in range(a1)] #创建一个m行n列的初始化矩阵
for i in range(a1):
C[i]=input().split()
for j in range(a2):
C[i][j]=int(C[i][j])
for i in range(a2):
D[i]=input().split()
for j in range(a3):
D[i][j]=int(D[i][j])
for i in range(a1):
for j in range(a3):
E = 0
for k in range(a2):
E+=C[i][k]*D[k][j]
b[i][j]=E
for i in range(a1):
for j in range(a3):
print(b[i][j],end=' ')
print("")
078:矩阵转置
A=input()
B=A.split(' ',1)
a1=int(B[0])
a2=int(B[1])
C=[[0]*a2]*a1
for i in range(a1):
C[i]=input().split()
for j in range(a2):
C[i][j]=int(C[i][j])
for i in range(a2):
for j in range(a1):
print(C[j][i],end=' ')
print("")
079:计算鞍点
f=0
C=[[0,0,0,0,0],[0,0,0,0,0],[0,0,0,0,0],[0,0,0,0,0],[0,0,0,0,0]]
for i in range(5):
A = input()
B=A.split()
C[i][0]=int(B[0])
C[i][1] = int(B[1])
C[i][2] = int(B[2])
C[i][3] = int(B[3])
C[i][4] = int(B[4])
for i in range(5):
for j in range(5):
d=max(C[i])
if min(C[0][j],C[1][j],C[2][j],C[3][j],C[4][j])==d and C[i][j]==d:
print(i+1,end=' ')
print(j+1,end=' ')
print(C[i][j],end='')
f=1
if f==0:
print('not found')
080:最简单的单词
s = int(input())
for i in range(s):
A=int(input())
d = {}
c = []
d1 = {}
for i in range(A*10):
B=input().split()
d.setdefault(B[0], []).append(int(B[1]))
c.append(B[0])
for i in range(A * 10):
c1=d[c[i]]
a1=sum(c1)/len(c1)
d1.setdefault(c[i],a1)
print(min(d1, key=lambda k: d1[k]))
081:校园食宿预订系统
n,m=list(map(int,input().split()))
d={}
z=[]
c=[[0 for i in range(3)] for j in range(n)] #创建一个m行n列的初始化矩阵
for i in range(m+n):
B = input().split()
if i<m:
d.setdefault(B[0],[int(B[1]),int(B[2])])
else:
c[i-m]=B
for i in range(n):
for j in range(3):
e=c[i][j]
f,g=d[e]
if g>0:
z.append(f)
d[e]=[f,g-1]
print(sum(z))
082:更强的卷王查询系统
students = {}
n = int(input())
for i in range(n):
course, name, score = input().split()
if name not in students:
students[name] = {}
students[name][course] = score
students[name]["participation"] = False
n = int(input())
for i in range(n):
s = input().split()
for j in range(1, int(s[0]) + 1):
for k in students.items():
value = k[1]
if s[j] in value: #代表该学生考过这个
if "total" not in value:
value["total"] = int(value[s[j]])
else:
value["total"] = int(value[s[j]]) + value["total"]
for k in students.items():
values = k[1]
isParticipation = 0
for l in range(1, int(s[0]) + 1):
if s[l] in values:
isParticipation += 1
if isParticipation == int(s[0]):#该名学生这一组课都考过
values["participation"] = True #标记参与了这一组全部考试
values["avg"] = float(values["total"]) / int(s[0]) #计算平均值
values["total"] = 0
maxAvg = {}#记录最高平均分
for k in students.items():
values = k[1]
if values["participation"]:
if maxAvg:
if maxAvg["avg"] <= values["avg"]:
if maxAvg["avg"] == values["avg"]:
if maxAvg["name"] > k[0]:
maxAvg["name"] = k[0]
maxAvg["avg"] = values["avg"]
else:
pass
else:
maxAvg["name"] = k[0]
maxAvg["avg"] = values["avg"]
else:#第一次添加为空
maxAvg["name"] = k[0]
maxAvg["avg"] = values["avg"]
values["participation"] = False
print(maxAvg["name"])
083:抽取ip地址
import re
lines=[]
while True:
try:
lines.append(input())
except:
break
for line in lines:
mts = re.findall(r'(^|[^d.]+)(?!0d+.)((([01]{0,1}d{0,1}d|2[0-4]d|25[0-5]).){3}([01]{0,1}d{0,1}d|2[0-4]d|25[0-5]))(?![d.]+)', line)
for mt in mts:
print(mt[1])
084:找出所有整数
import re
m='d+'
while True:
try:
s = input()
lst = re.findall(m,s)
for x in lst:
print(x)
except:
break
085:找出所有整数和小数
import re
m=r'd+.d+|d+'
while True:
try:
s = input()
lst = re.findall(m,s)
for x in lst:
print(x)
except:
break
086:找出小于100的整数
import re
m = r"(^|[^0-9-])(d{1,2})([^0-9]|$)"
for i in range(2):
s = input()
lst = re.findall(m,s)
for x in lst:
print(x[1])
087:密码判断
import re
m = '^[a-zA-Z][w-]{7,}$'
while True:
try:
s = input()
if re.match(m,s) != None:
print("yes")
else:
print("no")
except:
break
088:找<>中的数
A=int(input())
for i in range(A):
f=1
s = input()
for i in range(0,len(s)):
for j in range(i+1,len(s)+1):
t = s[i:j]
if t[0]=='<' and t[-1]=='>':
t1=t[1:len(t)-1]
if t1.isdigit():
a=int(t1)
if 0<=a<=999 and len(t1)<4 and str(a)==t1:
f=0
print(a,end=" ")
if f==0:
print("")
else:
print('NONE')
089:检查美元
解法一:
while True:
try:
s = input()
fa=2
fb=2
for i in range(0,len(s)):
for j in range(i+1,len(s)+1):
t = s[i:j]
if t[0]=='$' and t[-1]=='$':
t1=t[1:len(t)-1]
if "," in t1:
c=t1.split(",")
for i in range(len(c)):
d=c[i]
if i==0:
if d>'0':
fa=1
else:
fa=0
else:
if len(d)==3:
fb=1
else:
fb=0
else:
if 0<len(t1)<=3 and t1.isdigit()==True:
if t1[0]!='0':
fa=1
fb = 1
if fa==1 and fb==1:
print('yes')
break
else:
print("no")
except:
break
解法二:
import re
m=r"$[1-9]{1}d{0,2}$|$[1-9]{1}d{0,2},(d{3},){1,}d{3}$|$[1-9]{1}d{0,2},[0-9]{3}$"
# m=r"$[1-9]{1,3}$|$[1-9]{1,3},[0-9]{3}$"
while True:
try:
s = input()
if re.search(m,s) != None:
print("yes")
else:
print("no")
except:
break
090:电话号码
解法一:
import re
m=r'(<([a-z]+)>.+?</)2>'
n=r'((d{1,2}))-d{3}(?=[^d])'
i=int(input())
while i:
biaoji=0
s=input()
l1=re.findall(m,s)
if len(l1)!=0: #找到符合条件的tag,但注意l1里的元素是子串列表,比如l1[0]=[balabala,ba] l1[0][0]为tag,l1[0][1]为m里的分组一
for l2 in l1:
l3=list(re.findall(n,l2[0]))
if len(l3)!=0: #在符合条件里的tag里找到号码了但这里有疑问,他直接给了n中分组一的值,而不是返回一个类似 [(02)-123,02],直接给了02
time=len(l3) #记录有多少个区号,方便控制输出格式里的逗号
print('<'+l2[1]+'>',end='')
print(l3[0],end='')
for x in range(1,time):
print(','+l3[x],end='')
print('</'+l2[1]+'>')
biaoji=1;
if biaoji==0:
print("NONE")
else:
print("NONE")
i-=1
解法二:
import re
D=int(input())
m=r'(<([a-z]+)>.+?</)2>'
n=r'((d{1,2}))-d{3}(?=[^d])'
for j in range(D):
A=input()
B=re.findall(m,A)
if len(B)>0:
a=0
for i in range(len(B)):
x=B[i][0]
C=re.findall(n,x)
if len(C)>0:
my_string = ','.join(C)
print('<'+B[i][1]+'>'+my_string+'</'+B[i][1]+'>')
a=1
if a==0:
print("NONE")
else:
print("NONE")
091:通讯记录
解法一:
def xiugai(st):
if st=="_" :
return True
else:
return st.isalnum()
s1=len('@pku.edu.cn')
s2=len('@stu.pku.edu.cn')
while True:
try:
s = input()
ss=0
print('----')
for i in range(0,len(s)):
for j in range(i+1,len(s)+1):
t = s[i:j]
if t[0]=='<' and t[-1]=='>':
t1=t[1:len(t)-1]
if t1.count("<")==1 and t1.count(">")==1:
a=t1.find(">")
b=t1.find("<")
if a<b and t1[0:a]!='':
r1=t1[0:a]
r2=t1[b+1:len(t1)]
if '/'+r1==r2:
r3=t1.find("@pku.edu.cn")
r4=t1.find('@stu.pku.edu.cn')
if r3>0:
t2=t1[a+1:r3]
a1=t2.find("%")
if a1>=0:
t3=t2[a1+1:]
if t3[0]!='%' and len(t3)<=8:
cou = 0
for i in range(len(t3)):
if t3[i]!='%':
if xiugai(t3[i]):
cou+=1
else:
cou+=1
if cou==len(t3):
t4=t3.replace("%"," ")
print(t4+'@pku.edu.cn')
ss+=1
if r4>0:
if r4>r3 and r3>0:
t5=t1[r3+s1:r4]
a11 = t5.find("%")
if a11 >= 0:
t33 = t5[a11+ 1:]
if t33[0] != '%' and len(t33) <= 8:
cou = 0
for i in range(len(t33)):
if t33[i] != '%':
if xiugai(t33[i]):
cou += 1
else:
cou += 1
if cou == len(t33):
t6 = t33.replace("%", " ")
print(t6 + '@stu.pku.edu.cn')
ss+=1
else:
r5=t1.find('%')
t7=t1[r5+1:r4]
if t7[0]!='%' and len(t7)<=8:
cou = 0
for i in range(len(t7)):
if t7[i]!='%':
if xiugai(t7[i]):
cou+=1
else:
cou+=1
if cou==len(t7):
t8=t7.replace("%"," ")
print(t8+'@stu.pku.edu.cn')
ss+=1
if ss==0:
print('NONE')
except:
break
解法二:
import re
while True:
try:
m=r'(<([a-z]+)>.+?</)2>'
n=r"%[^%]+%w{1,8}@pku.edu.cn|%[^%]+%w{1,8}@stu.pku.edu.cn"
A=input()
B=re.findall(m,A)
print("----")
if len(B)>0:
a=0
for i in range(len(B)):
x=B[i][0]
C=re.findall(n,x)
if len(C)>0:
for k in range(len(C)):
D=re.sub("%"," ",C[k])
print(D.strip())
a=1
if a==0:
print("NONE")
else:
print("NONE")
except:
break
092:时间处理
import datetime
while True:
try:
a=input()
if "AM" in a or "PM" in a:
tm1=datetime.datetime.strptime(a,"%m-%d-%Y %H:%M %p") # 生成时间对象
else:
tm1=datetime.datetime.strptime(a,"%Y %m %d %H %M")
b=input()
if ' ' not in b:
delta=datetime.timedelta(seconds=int(b))
else:
i,j,k=map(int,b.split())
delta=datetime.timedelta(days=i,hours=j,minutes=k)
newt=tm1+delta
print(newt.strftime("%Y-%m-%d %H:%M:%S"))
except Exception as a:
break
093:成绩排序
n = int(input())
a = []
for i in range(n):
s = input().split()
a.append((s[0],int(s[1])))
a.sort(key = lambda x:(-x[1],x[0]))
for x in a:
print(x[0],x[1])
094:扑克牌排序
import functools
dict1 = {'h': 4, 's': 3, 'd': 2, 'c': 1}
dict2 = {'2': 13, 'A': 12, 'K': 11, 'Q': 10, 'J': 9, '1': 8, '9': 7, '8': 6, '7': 5, '6': 4, '5': 3, '4': 2, '3': 1}
# 1表示str1大,-1表示str2大
def cmp(str1, str2) -> int:
if str1[1] != str2[1]:
num1 = dict2[str1[1]]
num2 = dict2[str2[1]]
if num1 > num2:
return 1
if num1 < num2:
return -1
else:
num1 = dict1[str1[0]]
num2 = dict1[str2[0]]
if num1 > num2:
return 1
else:
return -1
return 0
try:
while True:
cnt = 0
mylist = list(map(str, input().split()))
if mylist == []:
break
newlist = sorted(mylist, key=functools.cmp_to_key(cmp), reverse=True)
result = str(' '.join(str(i) for i in newlist))
print(result + ' ')
except EOFError:
pass
© 版权声明
文章版权归作者所有,未经允许请勿转载。如内容涉嫌侵权,请在本页底部进入<联系我们>进行举报投诉!
THE END





















暂无评论内容