#pat习题网址
https://pintia.cn/problem-sets/1111652100718116864/problems/type/1
浙大python习题\第4章\1.生成3的乘方表.py题源来自pta 没有读者验证码,只是验证了一些数据
本文适合新手小白,需要看pat原题的可以登录上面的网站看,后面的习题在持续更新中…
第四章有点多,这次先整理了一半,后面的明天发
#输入一个非负整数n,生成一张3的乘方表,输出3^0 ~3^n的值。可调用幂函数计算3的乘方。
n = int(input())
for i in range(0,n + 1):
print(f'pow(3,{i}) = {3**i}')
浙大python习题\第4章\2.统计素数并求和.py
#要求统计给定整数M和N区间内素数的个数并对它们求和。
M,N=map(int,input().split())
s=[] #方便求个数及求和
for i in range(M,N+1):
for j in range(2,i): #为什么不是从1开始,因为1不是素数
if i%j==0:
break
else:
s.append(i)
print(len(s),sum(s)) #列表长度就是个数
浙大python习题\第4章\3.猴子吃桃.py
#一只猴子第一天摘下若干个桃子,当即吃了一半,还不过瘾,又多吃了一个;
# 第二天早上又将剩下的桃子吃掉一半,又多吃了一个。以后每天早上都吃了前 一天剩下的
# 一半加一个,到第N天早上想再吃时,见只剩下一个桃子了。问:第一天共摘了多少个桃子?
n = int(input()) #输入第N天
m=1 #第n天剩的
for i in range(1,n): #只用带入1到n-1天
m = (m+1)*2 #前一天=(后一天+1)*2
print(m)
浙大python习题\第4章\4.验证哥德巴赫猜想猜想.py
#数学领域著名的“哥德巴赫猜想”的大致意思是:任何一个大于2的偶数总能表示为两个素数之和。
# 比如:24=5+19,其中5和19都是素数。
# 本实验的任务是设计一个程序,验证20亿以内的偶数都可以分解成两个素数之和。
m=eval(input()) #eval用于把输入的内容转换为可执行程序,这里也可以用int
ls=[]
for i in range(2,m):
for j in range(2,i):
if i%j==0:
break
else:
if not [ 0 for j in range(2,m-i) if (m-i)%j ==0]:
print("{}+{}={}".format(i,m-i,m))
break
浙大python习题\第4章\5.求e的近似值.py
#自然常数 e 可以用级数 1+1/1!+1/2!+⋯+1/n!+⋯
#来近似计算。本题要求对给定的非负整数 n,求该级数的前 n+1 项和。
x=int(input())
y=1
a=1
for i in range(1,x+1):
a*=i
y=y+1/a #表示级数
print(f'{y:.8f}')
浙大python习题\第4章\6.输出斐波那契数列前n项.py
# 输出菲波那契(Fibonacci)数列的前N项,每行输出5个,题目保证输出结果在长整型范围内。
# Fibonacci数列就是满足任一项数字是前两项的和
# (最开始两项均定义为1)的数列,例如:1,1,2,3,5,8,13,…。
n = int(input())
a, b = 1, 0
if n<1:
print('Invalid.')
else:
for i in range(n):
b, a = a, a+b #后一项=前两项之和
if (i+1)%5 != 0:
print(f'{a:>11d}' ,end='') #格式化输出
else:
print(f'{a:>11d}')
浙大python习题\第4章\7.求平均成绩和及格人数.py
#计算学生们的平均成绩,并统计及格(成绩不低于60分)的人数。
# 题目保证输入与输出均在整型范围内。
n=int(input()) #输入人数
s=list(map(int,input().split())) #输入成绩,用列表方便后面求平均数
if n==0:
print("average = 0.0")
print("count = 0")
exit(0) #exit()用于结束这些程序,不会去运行下面的程序
ave=sum(s)/len(s)
l=[i for i in s if i>=60] #将分数及格的放入列表
cou=len(l)
print(f'averge={ave:.1f}\ncount={cou}')
浙大python习题\第4章\8.分数前n项和.py
#计算序列 2/1+3/2+5/3+8/5+… 的前N项之和。
#注意该序列从第2项起,每一项的分子是前一项分子与分母的和,分母是前一项的分子。
a,b = 1,2 #这里的b/a表示第一项
n = int(input())
s = 0
for i in range(n):
s += b/a #先把第一项加上,再再进行变换
a,b = b,a+b
print(f'{s:.2f}') #题目要求保留两位小数
浙大python习题\第4章\9.查询水果价格.py
#给定四种水果,分别是苹果(apple)、梨(pear)、桔子(orange)、葡萄(grape),
#单价分别对应为3.00元/公斤、2.50元/公斤、4.10元/公斤、10.20元/公斤。
print("[1] apple","[2] pear","[3] orange","[4] grape","[0] exit",sep="\n")
#sep用于每输出一个元素就换一行
n = list(map(int,input().split())) #可以同时查几个价格
lis = [3,2.5,4.1,10.2] #列表方便输出价格
for i in range(len(n)): #题目要求满足这个,就退出
if n[i] == 0 or i >4 :
break
elif 1 <= n[i] <= 4:
s=lis[n[i]-1] #为什么-1,因为列表下标从0开始
print(f'price = {s:.2f}')
else:
print("price = 0.00") #输入其他字符价格就输出0
浙大python习题\第4章\10.求正整数的最大公约数和最小公倍数.py
#求两个给定正整数的最大公约数和最小公倍数
a,b = map(int,input().split()) #输入a,b两个数
m,n = max(a,b),min(a,b)
while m%n != 0: #大数除以小数,如果余数为0,最大公约数就是小的数
m,n = n,m%n #辗转相除法,把上一项的除数(小的那个)除以上一项的余数
print(n,a*b//n) #最大公约数是刚好能整除的式子中的除数
#最小公倍数是两个数相乘再除以最大公约数
浙大python习题\第4章\11.@判断正数是否为素数.py
#判断一个给定的正整数是否素数
n = int(input()) #输入正数个数
a = int(input().split())
for i in range(n):
for j in range(2,a):
if a % j == 0 :
break
elif a==1:
print('No')
else:
print('Yes')
continue
print('No')
浙大python习题\第4章\12.求满足条件的斐波拉契数.py
#斐波那契数,亦称之为斐波那契数列,指的是这样一个数列:1、1、2、3、5、8、13、21、……,
#这个数列从第3项开始,每一项都等于前两项之和。求大于输入数的最小斐波那契数。
n = int(input()) #输入一个数,n
a, b = 1, 1 #a表示前一个数,b表示后一个数
while b <= n:
a, b = b, a + b #当循环到b=n时,让a=n,b就是n后面那个数了
print(b)
浙大python习题\第4章\13.求误差小于输入值的e的近似值.py
#自然常数e可以用级数1+1/1!+1/2!+⋯+1/n!来近似计算。
# ei代表前i项求和。输入误差范围error,当ei+1-ei
n = float(input())
a = 1
i = 2 #表示循环是从e3开始
e1 = 1 #给出第一项和第二项的值
e2 = 2
while e2 - e1 >= n: #当误差很大时,就向后循环
e1 = e2
a *= i
e2 += 1 / a
i = i + 1
print('{e2:.6f}')
#为什么输出的是e2(也就是后一项),因为e2-e1的值
#e2的后一项-e2的值一定n(级数的性质)所以只能输出e2
浙大python习题\第4章\14.统计各种字符的个数.py
#输入10个字符,统计其中英文字母、空格或回车、数字字符和其他字符的个数
letter,blank,digit,other =0,0,0,0
lis = []
while True:
lis.extend(list(input())) #extend用于一次性追加多个元素在列表末尾
lis.append("") #追加回车
if len(lis) >10: #题目要求
break
for i in lis[:10]:
if "a" <= i <= "z" or "A" <= i <="Z":
letter += 1
elif i == "" or i == " ":
blank += 1
elif "0" <= i <= "9":
digit += 1
else:
other += 1
print("letter = %s,blank = %s,digit = %s,other = %s"%(letter,blank,digit,other))
浙大python习题\第4章\15.求换硬币的方法.py
#将一笔零钱换成5分、2分和1分的硬币,要求每种硬币至少有一枚,有几种不同的换法?
n=int(input()) #输入零钱数
n-=8 #题目要求要求每种硬币至少有一枚,所以要减8
a,b,c=n//5+1,n//2+1,n//1+1 #a,b,c表示分别单独兑换成5分、2分和1分的硬币的总数
counts=0
for i in range(a,0,-1): #用多层循环,最外层循环是5分的数目,要先考虑数目大的钱再考虑数目小的钱
for j in range(b,0,-1): #多层循环的遍历只能倒着遍历,因为题目要求要求每种硬币至少有一枚,i,j,k不能为0
for k in range(c,0,-1):
if 5*i +2*j +1*k==n+8: #如果所有的钱加起来等于总数,就输出相关变量
s=i+j+k
print(f'fen5:{i} fen2: {j} fen1 :{k} total:{s}')
counts+=1 #在最内层循环记录有几种换法
print(f'count={counts}')
欢迎分享,转载请注明来源:内存溢出
评论列表(0条)