0
点赞
收藏
分享

微信扫一扫

浙大python习题超详细思路(第五章)

八怪不姓丑 2022-04-22 阅读 155
python

人生苦短,我用python

#pat习题网址
https://pintia.cn/problem-sets/1111652100718116864/problems/type/1

浙大python习题\第5章\1.输出星期名缩写.py

#输入一个1到7的数字,输出对应的星期名的缩写。
dic = {1:"Mon",2:"Tue",3:"Wed",4:"Thu",5:"Fri",6:"Sat",7:"Sun"}
#写成字典
n = int(input())
print(dic[n])    #字典的输出,dic[1]就输出字典中1所对应的字符串

浙大python习题\第5章\2.图的字典表示.py

# 图的字典表示。输入多行字符串,每行表示一个顶点和该顶点相连的边及长度,
# 输出顶点数,边数,边的总长度。比如上图0点表示:
# {‘O’:{‘A’:2,‘B’:5,‘C’:4}}。用eval函数处理输入,eval函数具体用法见第六章内置函数
# 输入格式:
# 第一行表示输入的行数 下面每行输入表示一个顶点和该顶点相连的边及长度的字符串
# 输出格式:
# 在一行中输出顶点数,边数,边的总长度
n=int(input())    #表示下面的输入行数,有几个点就有几行(可以百度一下什么是"图")
num=0
sum=0
for i in range(n):
    dic=eval(input())  #输入"表示一个顶点和该顶点相连的边及长度的字符串"弄成字典

    for j in dic:     #j去遍历dic,比如说dic是{'a':{'b':10,'c':6}},那么得到的就是a
        temp=dic[j]    #dic[j]就是a的值,就是这个{'b':10,'c':6}
        
        for key in temp:   #key就是冒号前面的那个值,这里得到的key就是b,c
           
            num+=1            #记录有几个边
            sum+=temp[key]     #temp[key]就表示里面的数字了
print("{:d} {:d} {:d}".format(n,num,sum)) #输出就行了

浙大python习题\第5章\3.用字典实现四则运算.py

# 输入格式:
# 在一行中输入一个数字 在一行中输入一个四帜运算符(+,-,*,/) 在一行中输入一个数字
# 输出格式:
# 在一行中输出运算结果(小数保留2位)
a = int(input())    #运算符号前面的那个数
way = input()
b = int(input())     #运算符号后面的那个数
#为啥这三行代码是这个顺序,因为是题目要求
if way == '/' and b == 0:
    print('divided by zero') #除数不能为0
else:
    dic = {'+':a+b,'-':a-b,'*':a*b,'/':a/b}  #+-*/对应相应的算法
    print('{:.2f}'.format(dic[way]))  #保留两位小数

浙大python习题\第5章\4.用集合分析活动投票.py

# 利用集合分析活动投票情况。第一小队有五名队员,序号是1,2,3,4,5;
# 第二小队也有五名队员,序号6,7,8,9,10。输入一个得票字符串,求第二小队没有得票的队员
s=set(map(int,input().split(",")))   #把输入的得票队伍放入集合,为啥是集合,是题目要求的
for i in range(6,11):                #题目要求是找第二队的
    if i not in s:                   #如果i队没有在s集合里,就输出它
            print(i,end=' ')

浙大python习题\第5章\5.统计字符出现次数.py

#本题要求编写程序,统计并输出某给定字符在给定字符串中出现的次数。
print(input().count(input()))
#count就是用于记录指定字符的数目的,前一个input是输入字符串,后一个input是输入给定字符

浙大python习题\第5章\6.统计工龄.py

#给定公司N名员工的工龄,要求按工龄增序输出每个工龄段有多少员工。
n = int(input())       #输入一共有几个员工
list = list(map(int, input().split()))  #把一堆工龄放入列表中
set = sorted(set(list))      #sorted用于生成一个新的排好序的列表
   #为啥这里要先把list弄成列表,因为下面i去遍历set的时候输出的工龄段不能重复
for i in set:
    s=list.count(i)        #用了第5题的思路,记录i在list里出现了多少次,不是去遍历set,是去遍历总的那个表
    print(f'{i}:{s}')

浙大python习题\第5章\7.列表去重.py

#输入一个列表,去掉列表中重复的数字,按原来次序输出!
s1 = [11, 2, 3, 4, 3]     #题目要求是要输入一个列表
s2 = list(set(s1))  #把s1放入集合,就可以去掉重复的数字
s2.sort(key = s1.index)  
#用了set之后输出的数是乱序的,题目要求按原次序输出
# sort用于排序,key = s1.index是排序的条件,indrx是表示s1的下标,根据s1的下标进行排序
print(*s2)   #用*s2输出列表成字符串

浙大python习题\第5章\8.求能被3,5,7整除的个数.py

#求指定区间内能被3,5和7整除的数的个数(用集合表示)
a, b = map(int,input().split())   #输入一个区间
c = set()     #建一个集合(题目要求),放满足条件的数
for i in range(a,b+1):     #遍历输入的这个区间
    if i%3 == 0 and i%5 == 0 and i%7 == 0 :
        c.add(i)     #如果能被3,5和7整除就追加到列表c里面,set只能用add追加元素
print(len(c))        #个数就是c这个列表的长度

浙大python习题\第5章\9.求矩阵鞍点个数.py

#一个矩阵元素的“鞍点”是指该位置上的元素值在该行上最大、在该列上最小
n=eval(input())
ls=[]   
for i in range(n):
    a=list(map(int,input().split()))
    ls.append(a)
q=0    
for i,j in enumerate(ls):
    for m,l in enumerate(j):
        ld=[ls[k][m] for k in range(n)] 
        if l==max(j) and l ==min(ld):
            q+=1

浙大python习题\第5章\10.给定目标,求两数之和.py

# 给定一组整数,还有一个目标数,在给定这组整数中找到两个数字,使其和为目标数,如找到,解是唯一的。
# 找不到则显示 “no answer”。输出的下标按从小到大排序。用一重循环加字典实现。
value = list(map(int, input().split(",")))
n = eval(input())
keys = [x for x in range(len(value))]
d = dict(zip(value, keys))
for i, v in d.items():
    if(n - i) in d.keys():
        print(v, d[n-i])
        exit(0)
print("no answer")

浙大python习题\第5章\11.字典合并.py

# 字典合并。输入用字符串表示两个字典,输出合并后的字典,字典的键用一个字母或数字表示。
# 注意:1和‘1’是不同的关键字!
# 字典合并。输入用字符串表示两个字典,输出合并后的字典,
# 字典的键用一个字母或数字表示。注意:1和‘1’是不同的关键字!
a, b = eval(input()), eval(input())
c = [i for i in a.keys() if i in b.keys()]
for i in c:
    b[i] = a[i] + b[i]
a.update(b)
c=str(dict(sorted(a.items(), key=lambda x: x[0] if type(x[0]) == int else ord(x[0]))))
c = c.replace(' ', '')
c = c.replace("'", '"')
print(c)

举报

相关推荐

0 条评论