阅读量:2
浙大版PTA《Python 程序设计》题目集 参考答案
本答案配套详解教程专栏,欢迎订阅:
PTA浙大版《Python 程序设计》题目集 详解教程_少侠PSY的博客-CSDN博客
01第1章-1 从键盘输入两个数,求它们的和并输出
a=int(input()) # 输入a的值 b=int(input()) # 输入b的值 print(a+b) # 输出a+b的值
02第1章-2 从键盘输入三个数到a,b,c中,按公式值输出
a,b,c=input().split() a=int(a) b=int(b) c=int(c) print(b*b-4*a*c)
03第1章-3 输出“人生苦短,我学Python”
print("人生苦短,我学Python")
04第2章-1 计算 11+12+13+…+m
m=int(input()) s=sum([i for i in range(11,m+1)]) print("sum =",s)
05第2章-2 计算分段函数[1]
x = float(input()) if x != 0: y = 1 / x else: y = 0 print("f({:.1f}) = {:.1f}".format(x, y))
06第2章-3 阶梯电价
e = float(input()) cost = 0 if e < 0: print("Invalid Value!") else: if e <= 50.00: cost = e * 0.53 else: cost = 50.0 * 0.53 + (e - 50) * (0.53 + 0.05) print(f"cost = {cost:.2f}")
07第2章-4 特殊a串数列求和
a, n = map(int, input().split()) tn = 0 sn = 0 for i in range(1, n + 1): tn = tn * 10 + a #第n项的值 sn = sn + tn #前n项的和 print("s =", sn)
08第2章-5 求奇数分之一序列前N项和
N = int(input()) s = 0 for i in range(N): s += 1 / (i + i + 1) print(f"sum = {s:.6f}")
09第2章-6 求交错序列前N项和
n = int(input()) sum = 0 sign = 1 for i in range(1, n + 1): sum += sign * i / (i + i - 1) sign *= -1 print(f"{sum:.3f}")
10第2章-7 产生每位数字相同的n位数
a,b=input().split(',') print(int(str(int(a))*int(b)))
11第2章-8 转换函数使用
x,y=eval(input()) # x,y=map(int, input().split(',')) print(int(str(x),y))
12第2章-9 比较大小
a, b, c = map(int, input().split()) if b > c: b, c = c, b if a > b: a, b = b, a if b > c: b, c = c, b print(f"{a}->{b}->{c}")
13第2章-10 输出华氏-摄氏温度转换表
lower, upper = map(int, input().split()) if lower > upper: print("Invalid.") else: print("fahr celsius") while lower <= upper: celsius = 5 * (lower - 32) / 9 print(f"{lower:d}{celsius:6.1f}") lower += 2
14第2章-11 求平方与倒数序列的部分和
m, n = map(int, input().split()) res = 0 for i in range(m, n + 1): res += i * i + 1 / i print(f"sum = {res:.6f}")
15第2章-12 输出三角形面积和周长
import math a, b, c = map(int, input().split()) if a + b > c and b + c > a and a + c > b: perimeter = a + b + c s = (a + b + c) / 2.0 area = math.sqrt(s * (s - a) * (s - b) * (s - c)) print(f"area = {area:.2f}; perimeter = {perimeter:.2f}") else: print("These sides do not correspond to a valid triangle")
16第2章-13 分段计算居民水费
x = float(input()) if x > 15.0: print("{:.2f}".format(2.5 * x - 17.5)) else: print("{:.2f}".format(4 * x / 3))
17第2章-14 求整数段和
A, B = map(int, input().split()) s = c = 0 for i in range(A, B + 1): print(f'{i:5d}', end='') c += 1 if c == 5: print() c = 0 s += i if c: print() print(f'Sum = {s}')
18第3章-1 大于身高的平均值
l=input().split() l1=[int(i) for i in l] aver=sum(l1)/len(l1) l2=[i for i in l1 if i>aver] for i in l2: print(i,end=' ')
19第3章-2 查验身份证
#自定义函数,用于验证一个身份证号码是否合法。 def validate_id_number(s): w = [7, 9, 10, 5, 8, 4, 2, 1, 6, 3, 7, 9, 10, 5, 8, 4, 2] m = "10X98765432" sum = 0 for j in range(17): if not s[j].isdigit(): return False sum += int(s[j]) * w[j] sum = sum % 11 if s[17] != m[sum]: return False return True # 主程序 n = int(input()) cnt = 0 for i in range(n): s = input() if len(s) != 18 or not validate_id_number(s): cnt += 1 print(s) if cnt == 0: print("All passed")
20第3章-3 输出字母在字符串中位置索引
sen=input() a,b=input().split() lst=[(i,sen[i]) for i in range(len(sen)) if sen[i]==a or sen[i]==b] lstnew=lst[::-1] for i in range(len(lstnew)): print(lstnew[i][0],lstnew[i][1])
21第3章-4 查找指定字符
cc = input() str = input() index = -1 for i in range(len(str)): if str[i] == cc: index = i if index != -1: print(f"index = {index}") else: print("Not Found")
22第3章-5 字符转换
s = input() n = 0 for char in s: if '0' <= char <= '9': n = n * 10 + int(char) print(n)
23第3章-6 求整数序列中出现次数最多的数
a = input().split() element_count = {} if a: a.pop(0) for element in a: element_count[element] = a.count(element) max_element = max(element_count, key=element_count.get) max_count = element_count[max_element] print(max_element, max_count)
24第3章-7 求最大值及其下标
n=int(input()) a=list(map(int,input().split())) print(max(a),a.index(max(a)))
25第3章-8 字符串逆序
s = input() s = s[::-1] print(s)
26第3章-9 字符串转换成十进制整数
s = input() hex_str = "" negative = False for c in s: if c.isdigit() or c.upper() in "ABCDEF": hex_str += c elif c == "-" and len(hex_str) == 0: negative = True if hex_str: num = int(hex_str, 16) if negative: num = -num print(num) else: print(0)
27第3章-10 统计大写辅音字母
a = input() cnt=0 for n in a : if n.isupper() and n!="A" and n!="E" and n!="I" and n!="O" and n!="U": cnt=cnt+1 print(cnt)
28第3章-11 字符串排序
lst = input().split() lst.sort() print("After sorted:") for i in range(0,len(lst)): print(lst[i])
29第3章-12 求整数的位数及各位数字之和
n=input() l=[int(i) for i in n] print(len(n),sum(l))
30第3章-13 字符串替换
a = list(input()) m = [chr(i) for i in range(ord('A'),ord('Z')+1)] for i in range(len(a)): if a[i] in m: b=m.index(a[i]) a[i]=m[25-b] b="".join(a) print(b)
31第3章-14 字符串字母大小写转换
str = input() for i in str: if i == "#": break elif i.islower(): print(i.upper(),end = "") elif i.isupper(): print(i.lower(),end = "") else: print(i,end = "")
32第3章-15 统计一行文本的单词个数
cnt=0 for i in input().split(): cnt+=1 print(cnt)
33第3章-16 删除重复字符
a=set(input()) lst=list(a) lst.sort() print(f"{''.join(lst)}")
34第3章-17 删除字符
str=input() c=input() str,c=str.strip(),c.strip()#移除字符串两端的空白字符 result=str.replace(c.upper(),"")#将 c 的大写形式删除 result=result.replace(c.lower(),"")#将 c 的小写形式删除 print("result:",result)
35第3章-18 输出10个不重复的英文字母
s = input().strip() li = [] for i in s: if i.isalpha() and i.upper() not in li and i.lower() not in li : li.append(i) if len(li)==10: break if len(li)<10: print('not found') else: s = ''.join(li) print(s)
36第3章-19 找最长的字符串
n = int(input()) max = 0 for i in range(n): s = input() if(max<len(s)): max=len(s) maxstr=s print('The longest is:',maxstr)
37第3章-20 逆序的三位数
s=input() s=s[::-1] print(int(s))
38第3章-21 判断回文字符串
s=input() print(s) if s==s[::-1]: print('Yes') else: print('No')
39第3章-22 输出大写英文字母
s = input() t="" flag=0 for element in s: if(element.isupper()): t=t+element flag=1 if(flag==0): print("Not Found") else: lst=list(t) res=list(set(lst)) res.sort(key=lst.index) print("".join(res))
40第4章-1 生成3的乘方表
n=int(input()) for i in range(n+1): a = 3**i print(f"pow(3,{i}) = {a}")
41第4章-2 统计素数并求和
import math def is_prime(num): sqrt_num = int(math.sqrt(num)) if num == 1: return False for i in range(2, sqrt_num + 1): if num % i == 0: return False return True m, n = map(int, input().split()) counts = 0 sum = 0 for i in range(m, n+1): if is_prime(i): counts += 1 sum += i print(f"{counts} {sum}")
42第4章-3 猴子吃桃问题
N=int(input()) def show(N): x=1 for i in range(0,N-1): x=(x+1)*2 return x print(show(N))
43第4章-4 验证“哥德巴赫猜想”
import math def isPrime(num): sqrt_num = int(math.sqrt(num)) if num == 1: return False for i in range(2, sqrt_num + 1): if num % i == 0: return False return True x=int(input()) for y in range(2,x//2+1): z = x - y if (isPrime(y) == 1 and isPrime(z) == 1): print('{:d} = {:d} + {:d}'.format(x, y, z)) break
44第4章-5 求e的近似值
from math import factorial total = 1 n = int(input()) for i in range(n): total += 1/factorial(i+1) print(f'{total:.8f}')
45第4章-6 输出前 n 个Fibonacci数
n=int(input()) a, b = 0, 1 if(n>0): for i in range(n): print(f'{b:11d}',end="") a, b = b, a + b if((i+1)%5==0): print() else: print("Invalid.")
46第4章-7 统计学生平均成绩与及格人数
n=int(input()) if(n==0): print('average = 0.0') print('count = 0') else: lst = list(map(int,input().split())) sum = sum(lst) aver=sum/n new_lst = [x for x in lst if x >= 60] cnt = len(new_lst) print(f'average = {aver:.1f}') print(f'count = {cnt:d}')
47第4章-8 求分数序列前N项和
N=int(input()) a,b,c=2,1,0 for i in range(N): c+=a/b a,b=a+b,a print(f"{c:.2f}")
48第4章-9 查询水果价格
print("[1] apple\n[2] pear\n[3] orange\n[4] grape\n[0] exit") num=list(map(int,input().split())) price=[3,2.5,4.1,10.2] for i in range(len(num)): if num[i]==0 or i>=5: break elif num[i]>0 and num[i]<5: print("price = %.2f"%price[num[i]-1]) else: print("price = 0.00")
49第4章-10 最大公约数和最小公倍数
import math a,b=map(int,input().split()) print(math.gcd(a,b),int((a*b)/math.gcd(a,b)))
50第4章-11 判断素数
def prime(n): if n < 2: return False for i in range(2, int(n**0.5)+1): if n % i == 0: return False return True n = int(input()) for i in range(n): num = eval(input()) print('Yes') if prime(num) else print('No')
51第4章-12 求满足条件的斐波那契数
n = int(input("请输入一个整数:")) fibonacci_sequence = [1, 1] while fibonacci_sequence[-1] < n: next_fib = fibonacci_sequence[-1] + fibonacci_sequence[-2] fibonacci_sequence.append(next_fib) print("最后一个小于", n, "的斐波那契数是:", fibonacci_sequence[-1])
52第4章-13 求误差小于输入值的e的近似值
a=float(input()) b,c=2,1 n,count=2,1 while b-c>=a: count*=n n+=1 c=b b=b+1/count print(f"{b:.6f}")
53第4章-14 统计字符
input_string = input() letter_count, blank_count, digit_count, other_count = 0, 0, 0, 0 while len(input_string) < 10: input_string += '\n' # 行尾回车符补上 input_string += input() input_string = input_string[:10] for char in input_string: if char.isalpha(): letter_count += 1 elif char.isspace(): blank_count += 1 elif char.isdigit(): digit_count += 1 else: other_count += 1 print('letter = {}, blank = {}, digit = {}, other = {}'.format(letter_count, blank_count, digit_count, other_count))
54第4章-15 换硬币
money = int(input()) count = 0 #记录满足条件的组合方式的数量 total = 0 #计算当前组合方式的硬币总数 for fen5 in range(money // 5, 0, -1): for fen2 in range((money - fen5 * 5) // 2, 0, -1): fen1 = money - fen5 * 5 - fen2 * 2 total = fen5 + fen2 + fen1 if fen1 > 0: print(f"fen5:{fen5}, fen2:{fen2}, fen1:{fen1}, total:{total}") count += 1 total = 0 print(f"count = {count}")
55第4章-16 jmu-python-判断是否构成三角形
a,b,c=map(int,input().split()) if a+b>c and a+c>b and b+c>a and a>0 and b>0 and c>0: print('yes') else: print('no')
56第4章-17 水仙花数
n = int(input()) for i in range(10**(n-1), 10**n): #遍历 ls = [int(x)**n for x in str(i)] #计算每个数字的n次方 if sum(ls) == i: #每个位上的数字求和,然后与数本身进行比较 print(i)
57第4章-18 猴子选大王
n=int(input()) a=[i for i in range(1,n+1)] index=0 while len(a)>1: x=a.pop(0) index+=1 if index==3: index=0 else: a.append(x) print(a[0])
58第4章-19 矩阵运算
n = int(input()) total = 0 matrix = [] for i in range(n): row = list(map(int, input().split())) matrix.append(row) for i in range(n): for j in range(n): if i + j != n - 1 and j != n - 1 and i != n - 1: total += matrix[i][j] print(total)
59第4章-20 求矩阵各行元素之和
m,n=map(int,input().split()) for i in range(m): sr=list(map(int,input().split())) print(sum(sr))
60第4章-21 判断上三角矩阵
T = int(input()) for _ in range(T): n = int(input()) matrix = [] for i in range(n): row = list(map(int, input().split())) matrix.append(row) upper_triangle = True for i in range(n): for j in range(n): if i > j and matrix[i][j] != 0: upper_triangle = False break if upper_triangle: print("YES") else: print("NO")
61第4章-22 找鞍点
num = int(input()) matrix = [] for i in range(num): matrix.append(list(map(int, input().split()))) for i in range(num): max_row = max(matrix[i][k] for k in range(num)) for j in range(num): min_col = min(matrix[k][j] for k in range(num)) if max_row == min_col: print(f"{i} {j}") exit() print("NONE")
62第4章-23 求矩阵的局部极大值
m,n=map(int,input().split()) ls=[] count=0 for i in range(m): s=input() ls.append([int(i) for i in s.split()]) for i in range(1,m-1): for j in range(1,n-1): if ls[i][j]>ls[i-1][j] and ls[i][j]>ls[i+1][j] and ls[i][j]>ls[i][j-1] and ls[i][j]>ls[i][j+1]: print(ls[i][j],i+1,j+1) count+=1 if count==0: print("None",m,n)
63第4章-24 打印九九口诀表
n=int(input()) for i in range(1,n+1): for j in range(1,i+1): print("%d*%d=%-4d"%(j,i,i*j),end='') print()
64第4章-25 输出三角形字符阵列
n=int(input()) s=ord("A") for i in range(n,0,-1): for j in range(i): print(chr(s),end=' ') s +=1 print()
65第4章-26 求1!+3!+5!+……+n!
n = int(input()) total_sum = 1 factorial = 1 for odd_number in range(3, n + 1, 2): factorial *= odd_number*(odd_number-1) total_sum += factorial print(f"n={n},s={total_sum}")
66第4章-27 二维数组中每行最大值和每行和
ls=list(map(int,input().split())) s=[] for j in range(3): s=ls[3*j:(j+1)*3] for i in range(3): print("{:>4d}".format(s[i]),end='') print(f"{max(s):>4d}",end='') print(f"{sum(s):>4d}")
67第4章-28 矩阵转置第4章-28 矩阵转置
ls=list(map(int,input().split())) s=[] for i in range(3): s.append(ls[3*i:(i+1)*3]) for i in range(3): for j in range(3): print(f"{s[j][i]:>4d}",end='') print()
68第4章-29 找出不是两个数组共有的元素
l1=list(map(str,input().split())) l2=list(map(str,input().split())) ls=[] l1.pop(0) l2.pop(0) for i in l1: if i not in l2 and i not in ls: ls.append(i) for j in l2: if j not in l1 and j not in ls: ls.append(j) print(*ls)
69第4章-30 找完数
flag = 0 m,n = map(int,input().split()) for i in range (m,n+1): s = [1] for j in range (2,int(i**0.5 + 1)): if i%j ==0: s.append(j) s.append(i//j) if sum(s) == i: s.sort() print (i,end=" = ") print(' + '.join(map(str,s))) flag=1 if(flag == 0): print("None")
70第5章-1 输出星期名缩写
a=input() sum={'1':'Mon','2':'Tue','3':'Wed','4':'Thu','5':'Fri','6':'Sat','7':'Sun'} print(sum[a])
71第5章-2 图的字典表示
n=int(input()) vertex=0 edge=0 length=0 for i in range(n): l=input() d=eval(l) for key1 in d: vertex+=1 for key2 in d[key1]: edge+=1 length+=d[key1][key2] print(vertex,edge,length)
72第5章-3 四则运算(用字典实现)
result={"+":"x+y","-":"x-y","*":"x*y","/":'x/y if y!=0 \ else "divided by zero"'} x=int(input()) z=input() y=int(input()) r=eval(result.get(z)) if type(r)!=str: print(f'{r:.2f}') else: print(r)
73第5章-4 分析活动投票情况
s={"6","7","8","9","10"}-set(input().split(",")) lst=list(s) lst=[int(i) for i in lst] lst.sort() print(*lst)
74第5章-5 统计字符出现次数
s=input() ch=input() dc={} for c in s: dc[c]=dc.get(c,0)+1 if ch in s: print(dc[ch]) else: print(0)
75第5章-6 统计工龄
N = int(input()) dic = {} ls = list(map(int,input().split())) for i in ls: if i not in dic: dic[i] = 1 else: dic[i]+=1 for i in sorted(dic.keys()): print(f"{i}:{dic[i]}")
76第5章-7 列表去重
lst=eval(input()) seen=set() lst1=[i for i in lst if i not in seen and not seen.add(i)] print(*lst1)
77第5章-8 能被3,5和7整除的数的个数(用集合实现)
a,b=input().split() a,b=int(a),int(b) s1=set([i for i in range(a,b+1) if i%3==0]) s2=set([i for i in range(a,b+1) if i%5==0]) s3=set([i for i in range(a,b+1) if i%7==0]) print(len(s1&s2&s3))
78第5章-9 求矩阵鞍点的个数
n=int(input()) a=[] for i in range(0,n): b=input().split() a.insert(i,b) c=[] d=[] for i in range(0,n): maxa=max(int(a[i][j]) for j in range(n)) mina=min(int(a[k][i]) for k in range(0,n)) c+=[(i,j) for j in range(n) if int(a[i][j])==maxa] d+=[(k,i) for k in range(n) if int(a[k][i])==mina] c=list(set(c)&set(d)) print(len(c))
79第5章-10 两数之和
nums = list(map(int,input().split(','))) target = int(input()) hm = dict() for i in range(len(nums)): if nums[i] in hm: print(hm[nums[i]], i) break hm[target - nums[i]] = i else: print("no answer")
80第5章-11 字典合并
#合并字典 dic1=eval(input()) dic2=eval(input()) dic3={} keys=set(dic1.keys())|set(dic2.keys()) for key in keys: value=dic1.get(key,0)+dic2.get(key,0) dic3[key]=value #排序 lst=[(ord(k) if k not in range(0,10) else k,v) for k,v in dic3.items()] lst.sort() #输出 lst1=[] for t in lst: if 0<=t[0]<=9: lst1.append("{}:{}".format(t[0],t[1])) else: lst1.append('"{}":{}'.format(chr(t[0]),t[1])) print("{"+",".join(lst1)+"}")
81第6章-1 输入列表,求列表元素和(eval
输入应用)
lst=eval(input()) s=sum([i for i in lst]) print(s)
82第6章-2 一帮一
N = int(input()) male_students = [] # 存储男生信息的列表 female_students = [] # 存储女生信息的列表 count = 1 while N > 0: s = list(input().split()) if int(s[0]) == 1: male_students.append([s[1], count]) count+=1 else: female_students.append([s[1], count]) count += 1 N -= 1 while male_students and female_students: if male_students[0][1] < female_students[0][1]: print(f"{male_students.pop(0)[0]} {female_students.pop()[0]}") else: print(f"{female_students.pop(0)[0]} {male_students.pop()[0]}")
83第6章-3 列表或元组的数字元素求和
def sum_nested_numbers(data): total = 0 for item in data: if isinstance(item, (int, float)): total += item elif isinstance(item, (list, tuple)): total += sum_nested_numbers(item) return total input_data = eval(input()) # 从输入字符串中解析出列表或元组 result = sum_nested_numbers(input_data) print(result)
84第6章-4 列表数字元素加权和(1)
def calculate_weighted_sum(lst, depth=1): total = 0 for item in lst: if isinstance(item, list): total += calculate_weighted_sum(item, depth + 1) else: total += item * depth return total input_list = eval(input()) result = calculate_weighted_sum(input_list) print(result)
85第6章-5 列表元素个数的加权和(1)
def weighted_element_count(lst, depth=1): count = 0 for item in lst: if isinstance(item, list): count += weighted_element_count(item, depth + 1) else: count += depth return count input_str = input() input_list = eval(input_str) result = weighted_element_count(input_list) print(result)
86第6章-6 求指定层的元素个数
def count_integers_at_depth(X, depth): cnt = 0 for x in X: if type(x)==int: if depth == n: cnt += 1 else: cnt += count_integers_at_depth(x, depth + 1) return cnt X = eval(input()) n = int(input()) print(count_integers_at_depth(X, 1))
87第6章-7 找出总分最高的学生
num_students = int(input()) student_info = {} max_total_score = -1 for i in range(num_students): info = input().split() student_id = info[0] student_name = info[1] scores = list(map(int, info[2:])) total_score = sum(scores) if total_score > max_total_score: max_total_score = total_score top_student = (student_name, student_id, total_score) print("{} {} {}".format(top_student[0], top_student[1], top_student[2]))
88第6章-8 输出全排列
import itertools n = int(input()) numbers = list(range(1, n + 1)) permutations = list(itertools.permutations(numbers)) for perm in permutations: print("".join(map(str, perm)))
89 第6章函数-1
def fn(a, n): result = 0 current_term = 0 for i in range(1, n + 1): current_term = current_term * 10 + a result += current_term return result
90第6章函数-2 使用函数求素数和
# 定义一个函数 prime,用于判断一个数是否为素数 def prime(p): if p <= 1: return False for i in range(2, int(p**0.5) + 1): if p % i == 0: return False return True # 定义函数 PrimeSum,用于返回区间 [m, n] 内所有素数的和 def PrimeSum(m, n): prime_sum = 0 for num in range(m, n + 1): if prime(num): prime_sum += num return prime_sum
91第6章函数-3 使用函数统计指定数字的个数
def CountDigit(number,digit ): numlist=list(str(number)) dig=str(digit) count=numlist.count(dig) return count
92第6章函数-4 使用函数输出指定范围内Fibonacci数的个数
def fib(n): if n==0: return 1 elif n==1: return 1 else: i=2;a=1;b=1 while i<=n: a,b = b,a+b i=i+1 return b def PrintFN(m,n): fiblist=[] a=1;b=1 while a<=n: if a>=m: fiblist.append(a) a,b=b,a+b return fiblist
93第6章函数-5 使用函数求余弦函数的近似值
import math def funcos(eps,x): i=0;s=0;flag=1 while True: item=x**i/math.factorial(i) if abs(item)>=eps: s=s+flag*item flag=-flag i=i+2 else: break return s
94第6章函数-6 缩写词
def acronym(phrase): words=phrase.split() res="" for word in words: res=res+word[0].upper() return res
95第7章-1 词频统计
import re, collections, sys words = "".join([line for line in sys.stdin]) words = re.compile(r"\w+", re.I).findall(words.lower().split('#')[0]) words = [each.strip() for each in words] words = list(map(lambda each: each[0:15] if len(each) > 15 else each, words)) counter = collections.Counter(words) rank = sorted(counter.items(), key=lambda each: (-each[1], each[0]), reverse=False) print(len(rank)) for each in rank[0:int(0.1*len(rank))]: print("{}:{}".format(each[1], each[0]))