浙大python习题超详细思路

浙大python习题超详细思路,第1张

人生苦短,我用python
#pat习题网址
https://pintia.cn/problem-sets/1111652100718116864/problems/type/1

题源来自pta 没有读者验证码,只是验证了一些数据
本文适合新手小白,需要看pat原题的可以登录上面的网站看,后面的习题在持续更新中…
第四章有点多,这次先整理了一半,后面的明天发

浙大python习题\第4章\1.生成3的乘方表.py
#输入一个非负整数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}')

欢迎分享,转载请注明来源:内存溢出

原文地址: https://outofmemory.cn/langs/713974.html

(0)
打赏 微信扫一扫 微信扫一扫 支付宝扫一扫 支付宝扫一扫
上一篇 2022-04-24
下一篇 2022-04-24

发表评论

登录后才能评论

评论列表(0条)

保存