【PTA-python】经验总结

列表,字典,元组,函数

题目链接思路及经验学习到的方法或函数
第3章-2 查验身份证https://blog.csdn.net/dive668/article/details/115646970list输入的数据都是字符串,与m列表里的元素比较时,必须要str强制转换。已知的数据最好都组成一个列表,方便判断与处理。isdigit()函数判断是不是数字类型
第3章-3 输出字母在字符串中位置索引https://blog.csdn.net/dive668/article/details/115676869更深入理解了range()函数range()函数,第一个参数是起始位置,包含在内,第二个是终止位置,不包含在内,第三个是步长。默认range(10),就是从0开始(包含在内),到10(不包含在内),自增1。对于此题,应该是range(n-1,-1,-1) 即从最后一个字符,到-1个字符。
第3章-4 查找指定字符https://blog.csdn.net/dive668/article/details/115677102只需要不断地查找并赋新值,就默认实现了输出最大的下标。现在看来,可以逆序,查找,输出下标即可
第3章-6 求整数序列中出现次数最多的数https://blog.csdn.net/dive668/article/details/115737275通过字典,取数字,得到其出现频率,同时学习了字符串的逆序操作,借鉴后也可以使用字符串的count(char)函数counts.get(w, 0) 中get()函数进行检测,若字典counts中包含w这个key(单词),则返回对应的value(counts中的词频);若不包含,则返回第二个参数0;最后将当前的w词进行计数+1(思想:看看counts里面有没有这个单词,有则在原有词频上+1;没有则插入新的key-value,key为当前单词,value为1)使用字典存储数字的键值,次数每次自增1。count() 方法用于统计字符串里某个字符出现的次数。可选参数为在字符串搜索的开始与结束位置。字符串逆序:ss=s[::-1]
第3章-9 字符串转换成十进制整数https://blog.csdn.net/dive668/article/details/115741767初步想法,把字符串通过int(x,16)转为十六进制,判断是不是属于0-15。实际上不可行,因为可以转的必然转成了,不可以转的会报错。通过一个字符串存储所有的16进制字符,stand="0123456789abcdefABCDEF"通过 if xx in str判断是否在str内部。s.find()找到一个字符出现的位置。
第3章-10 统计大写辅音字母https://blog.csdn.net/dive668/article/details/115742979strip() 方法用于移除字符串头尾指定的字符(默认为空格或换行符)或字符序列。注意:该方法只能删除开头或是结尾的字符,不能删除中间部分的字符。还是建立一个辅音大写字母表,Python中的字符串本身是不可变的——不能更改它,也不能删除字母。但是可以基于字符串创建新的字符串对象。所以只能另建一个字符串,判断如果不是辅音字母再添加到字符串中。
第3章-16 删除重复字符https://blog.csdn.net/dive668/article/details/115751366第一次考虑用count去计数每个字符的出现次数,条件判断后添加到初始为空的字符串中。set函数可以去除重复元素set() 函数创建一个无序不重复元素集,可进行关系测试,删除重复数据,还可以计算交集、差集、并集等。需要紧跟强制类型转换为list()。sort()和sorted()区别。join() 方法。join()用于将序列中的元素以指定的字符连接生成一个新的字符串。
第3章-17 删除字符https://blog.csdn.net/dive668/article/details/115752220不分大小写地删除字符,那么就转化字符为大写,如果要剔除,则不添加之replace方法删除字符:s.replace(s1.upper,"").replace(s1.lower(),"")Python 字符串大小写转换函数:print(str.upper()) # 把所有字符中的小写字母转换成大写字母print(str.lower()) # 把所有字符中的大写字母转换成小写字母print(str.capitalize()) # 把第一个字母转化为大写字母,其余小写print(str.title()) # 把每个单词的第一个字母转化为大写,其余小写
第3章-18 输出10个不重复的英文字母https://blog.csdn.net/dive668/article/details/115752892要先去除字符串中的空格,再去除数字。Python关于去除字符串中空格的方法这里使用''.join(s.split())s.replace(' ','')a关于不重复的分析,如果是顺序固定,则不能使用set()函数,set()返回的字符顺序是不确定的,所以还是借助于upper()判断,对c进行大写,并对结果进行大写,对比分析。
第3章-19 找最长的字符串https://blog.csdn.net/dive668/article/details/115774457初步想法是建立起一个字典,键存储字符,值存储长度,对值进行排序,输出最大的值所对应的键。这里回顾统计单词次数那一部分。要将元素.items()分割后取list列表类型。多余的不输出即可。list去实现,一个list中存字符,一个list中存长度。建立一个空字符串,每次和输入对比。记录对比后最长的值给字符串更新。s=""ss=input()s=max(s,ss,key=len)Python——max()的用法
第3章-21 判断回文字符串https://blog.csdn.net/dive668/article/details/115786092输入字符串,把他逆序,设置标记位,将原字符串和逆序字符串一一对比,看是否不一样。改进:对比两个字符串是否完全一样,不需要一个一个元素对比,直接整体对比。s==ssreversed()函数,可以参考这篇博文python 中 关于reverse() 和 reversed()的用法介绍
第3章-22 输出大写英文字母https://blog.csdn.net/dive668/article/details/115787191初步想法:使用set函数,过滤掉重复元素,但是set函数会破坏字符串输出顺序。之后想法:创建一个空字符串,使用isupper()这个判断函数,如果是大写,而且未被添加到空字符串中过,就添加进去set函数的理解,另外借助于列表的sort函数,借助于列表中的索引顺序,可以保留原顺序的同时实现排序。注意print(ss.sort())结果是空值。这个和reverse()与reversed()的区别一样。reverse()的返回值是none。reversed()使用需要借助于list或next
第4章-2 统计素数并求和https://blog.csdn.net/dive668/article/details/115802818for循环借助标记位,判断是否是素数。这种解法滤去了素数2,而且对素数1的处理存在问题
第4章-3 猴子吃桃问题https://blog.csdn.net/dive668/article/details/115803309倒序思考:对1先+1,再乘以2,循环N-1天。得到答案。
第4章-4 验证“哥德巴赫猜想” --拆解素数https://blog.csdn.net/dive668/article/details/115803511首先根据输入数据,得到其素数列表。从第一个素数位置开始判断,如果N-该素数仍在素数列表里,借鉴多方内容后,计算素数遇到超时问题:对检索范围划分int(n**0.5+1)和n//2+1。" / “就表示 浮点数除法,返回浮点结果;” // "表示整数除法。
第4章-5 求e的近似值https://blog.csdn.net/dive668/article/details/115804240第一种方法,重复计算了阶乘,而且缺少了复原。实际上阶乘的变化,每次也只是乘以n而已。
第4章-6 输出前 n 个Fibonacci数https://blog.csdn.net/dive668/article/details/115816584首先要判断输入数据个数。<1 ==1 ==2 。之后遍历输出。查阅资料。学到了通过print()函数的end=""实现不换行,默认是换行。注意题目要求的输出格式!斐波那契数列的实现
第4章-7 统计学生平均成绩与及格人数https://blog.csdn.net/dive668/article/details/115817389添加链接描述很简单。sum函数求列表的和。对输入为0的处理。要提前判断,并且通过exit(0)来退出程序。否则在执行到range(0)时会报错,提示非零返回。另外还有列表的建立:new_lst = [x for x in lst if x >= 60]
第4章-8 求分数序列前N项和https://blog.csdn.net/dive668/article/details/115817833不使用列表,直接用迭代的返回值计算分子和分母。定义两个函数。另外还要注意对n==1的处理
第4章-9 查询水果价格https://blog.csdn.net/dive668/article/details/115818639建立起价格列表。建立起输入列表。对输入数据,输出在价格列表中的对应值,注意特殊情况的输出,以及标记位记录输入数据的个数。
第4章-10 最大公约数和最小公倍数https://blog.csdn.net/dive668/article/details/115819016最大公约数借助于辗转相除法这样一个函数,Euclid(m,n)。两数的乘积再除以两数的最大公约数法。这个方法虽然比较复杂,但是使用范围很广。
第4章-12 求满足条件的斐波那契https://blog.csdn.net/dive668/article/details/115839338首先建立一个取斐波那契数的函数。因为没有穷尽,使用while循环对输入的数进行范围判断。满足条件后输出。
第4章-13 求误差小于输入值的e的近似值https://blog.csdn.net/dive668/article/details/115839499首先建立一个取ei的函数,while判断是否满足条件。不符合条件,cnt自增1,继续判断。直至满足条件
第4章-14 统计字符https://blog.csdn.net/dive668/article/details/115839608使用while循环,好像这一章都开始使用while循环去做题了。如果一个input()输入结束了,那么就知道回车符一定有了一个,但需要再判断字符数长度是否>10,否则还会循环下一行。判断字符类型,用到了三个函数isalpha() isspace() isdigit():对于两个列表的合并,借助于extend()函数:s=list(input()) lst.extend(s)
第4章-15 换硬币https://blog.csdn.net/dive668/article/details/115840513为了实现各个硬币数目>=1,range()函数设定倒序范围,先求五分硬币数目,再求二分硬币数目,最后求一分硬币数目,注意在往下递推求解的过程中,各个硬币数目的条件是>=1,这影响到range(five,0,-1)if one>=1:
第4章-17 水仙花数https://blog.csdn.net/dive668/article/details/115841690旧式想法:从大位开始计算,先算出最高位。每次需要迭代更新,减去高位数之后,算低一位的数。博主封心的想法:每次取mod10的结果,再除以10取整数部分,降低位次。读题不认真,是N次方,而不是仅仅3次方。
第4章-18 猴子选大王https://blog.csdn.net/dive668/article/details/115844716按数目,建立一个全为1的列表,cnt计数,如果mod3为0,就修改列表对应值为0。使用求和sum,判断如果只有一个1,就是结果。从头到尾不断循环,这就要考虑while循环,同时一定要注意程序有退出出口:break改进:使用pop()函数实现。对于len(lst)>1作为while判断的条件。极简代码,约瑟夫环问题。
第4章-19 矩阵运算https://blog.csdn.net/dive668/article/details/115871251这里学习如何存储矩阵。for 循环 list.extend()去连接另一个列表。另外注意*作为乘法,不能直接n(n-1),会报错TypeError: 'int' object is not callable
第4章-21 判断上三角矩阵https://blog.csdn.net/dive668/article/details/115875223首先归结出判断上三角的函数的条件,定义为一个函数,以函数阶数和矩阵的列表作为参数。这里注意,列表作为参数的定义方法:def shangsanjiao(m,lst=[])for循环,实现按照输入要求的矩阵个数
第4章-22 找鞍点https://blog.csdn.net/dive668/article/details/115876937矩阵存储还按照之前list.extend()的方法。判断是不是行的最大和列的最小,定义函数实现:def andian(s,m,n,lst=[]),s代表矩阵阶数,用以遍历。m,n代表传入的要判断的元素的行列标记,lst为存储列表。
第4章-23 求矩阵的局部极大值https://blog.csdn.net/dive668/article/details/115877816定义一个判断部分最大值的函数:大于四周的函数,就返回True。对非边界值的判断:范围是range(1,n-1)list.append(object) 向列表中添加一个对象objectlist.extend(sequence)把一个序列seq的内容添加到列表中。如果使用a.appen(),那么大列表里的元素是小列表。a.append(list(map(int,input().split())))。那么就可以直接通过i,j访问特定行列下标:if a[i][j]>a[i][j-1] and a[i][j]>a[i][j+1] and a[i][j]>a[i+1][j] and a[i][j]>a[i-1][j]:
第4章-27 二维数组中每行最大值和每行和https://blog.csdn.net/dive668/article/details/115878346可以直接三行代码,循环遍历输出值。可以借助于sum()函数和max()函数。实际上这两个函数的使用可以通过范围表示实现,而不需要一个一个表示。max(a[i*3:i*3+3]), sum(a[i*3:i*3+3])另外因为题目固定,还可以通过拆解计算。max(a[b:c])和sum(a[b:c])的使用
第4章-28 矩阵转置https://blog.csdn.net/dive668/article/details/115843885仔细分析,输出是有规律的:共三行,三次循环,每行第一个通过range(3)迭代。而每行的三个数,之间的差值都是3,也可以for循环迭代
第4章-30 找完数https://blog.csdn.net/dive668/category_10975891.html对范围内的n个数,双重遍历,将小于n的因子遍历添加进列表,时间复杂度为O(n^2)。对小数可以实现,大数就要改进算法。抛开输出都有的开头的1,其他输出可以看作是(+ {}).format(lst[i])。遍历时数据范围可以缩减到√n。添加因子时同时添加除数和商。(同时注意这里,对于4*4=16的情况,只添加一个4,也就是if n*n!=i:``l.append(i//n).同时,可以先添加满因子列表后,sort函数排序,再输出因子分解的和列表。输出格式也可以看作 +号连接了每个元素,使用" + ".join(str(lst[i])
第5章-1 输出星期名缩写https://blog.csdn.net/dive668/article/details/115909697对于题目中有清晰的所有的输出结果的题目,一般考虑,将可能的输出结果都归结起来,或为列表存储,或为字典存储,这样可以省去重复写if-else循环。这里使用字典。获得输入的键,输出对应的值。
第5章-2 图的字典表示https://blog.csdn.net/dive668/article/details/115910132根据题目提示,要求使用eval函数处理输入。能够取到输入的字典内的字典键的个数,值的求和。eval这个函数就是在返回,它觉得正确的那个值。返回一个迭代器,可以使用 list() 来转换为列表,列表为字典中的所有值。list(dict.values()))。我们使用list(dict.values())取到了列表元素a=eval(input()) b=list(a.values()) print(type(b))得到b的类型是list,长度为1.但eval不能对b处理。可实际上,处理没那么麻烦。得到字典后,for循环即可得到每个键,取这个下标下的值,对这个值(实际上也是一个键),再for循环,取键里的键和对应的值。
第5章-3 四则运算(用字典实现)https://blog.csdn.net/dive668/article/details/115917345想半天不知道字典怎么实现,想到字典只是一个键值对的关系,取到到键对应的值,如果是一个运算符,又是一个字符,用不到计算当中!实际上这里还是利用了eval函数的作用,按照其形式给出适合的结果。同时学习使用 try except的异常处理。字典结合eval实现
第5章-6 统计工龄https://blog.csdn.net/dive668/article/details/115921730初步想法时是遍历,把元素,单次地放入if not in : .append()实现,之后借助于.count()计算在列表里的数目,遍历输出。实际上考虑到每次的count是一个遍历的运算,所以应该是O(n^2)的数量级。考虑从头到尾只遍历一次数据,使用字典,遍历的同时添加,修改数据。时间复杂度就是O(n)。sorted()后,原字典输出并没有改变,必须要赋值给一个lst列表,输出列表,才能看到数据修改。
第5章-7 列表去重https://blog.csdn.net/dive668/article/details/115922257eval()实现输入识别为list()。为了实现" ".join,需要将list内的元素都转换为string类型。set()去重。以a中的index索引为key进行sort。
第5章-8 能被3,5和7整除的数的个数(用集合实现)https://blog.csdn.net/dive668/article/details/115922421Python set() 函数set3=set()set5=set()set7=set()res_set = set()#存储交运算#分别存储这些数的倍数#最后取交集,取长度res_set=set3&set5&set7 print(len(res_set))
第5章-10 两数之和https://blog.csdn.net/dive668/article/details/115960940题目要求一重循环加字典实现.将每个输入作为键,用目标数减去输入的值作为值,如果值也在输入的列表中。那么就说明键,值都在列表中。输出列表的索引即可。
第5章-11 字典合并https://blog.csdn.net/dive668/article/details/115965719通过ord(x[0])取其 ascii码值。数字的ascii就是本身,如果遇到字符,则按ord()进行排序,因此sorted排序函数需要进行一个if类型判断。d=sorted(a.items(),key=lambda item:item[0] if type(item[0])==int else ord(item[0]))
第6章-2 一帮一https://blog.csdn.net/dive668/article/details/115971280成绩好的和成绩差的匹配可以借助逆序来实现。题目要求男女搭配,这个可以根据0+1=1来实现。另外为了让已经搭配过的不能再搭配,可以修改其性别值为特别值,如-1。
第6章-3 列表或元组的数字元素求和https://blog.csdn.net/dive668/article/details/116030697本想借鉴之前的一篇文章,字符连接输入,判断非括号,非逗号,就加上数据,但发现只能添加个位数据借鉴其他文章,去掉列表里的方括号和圆括号,不去掉双引号,再eval转换对列表求和
第6章-4 列表数字元素加权和(1)https://blog.csdn.net/dive668/article/details/116032069想把[,]括号替换为特殊字符,依据出现次序,遇到!号则增加level标记值,顺序计算,遇到?号,level标记值-1,再顺序计算。但发现转换为其他字符在语义上无法通过。可以通过递归函数计算,def 传入list和level。
第6章-6 求指定层的元素个数https://blog.csdn.net/dive668/article/details/116016532python的多层嵌套列表处理采用入队出队的思想,匹配前后括号
第6章-8 输出全排列https://blog.csdn.net/dive668/article/details/116034946初步想法,采用列表,如果有n项,就创建n-1项列表。每个输入都会因为pop出元素而需要重新迭代赋值计算。效率比较低。学习来的解法:将输入看作字符,存到列表里,定义函数,输入为初始元素和空字符串,输出从一个字符出发的长度为n的字符串。迭代实现。另有方法暴力枚举,比如输入3,从100开始到400的数据。另外也有用random.shuffle()打乱次序,进行输出的
第7章-1 词频统计https://blog.csdn.net/dive668/article/details/116068616遇到含有回车的无效输入,while循环如何处理。同过input()字符串不断串联起来。字符串思想,读入所有内容到一个串内。关于并列情况的字典序输出。双重排序条件:字典序,数字降序list=sorted(counts.items(), key=lambda item:(-item[1], item[0]))#按item第一位的倒序,也即数字的倒序,第零位的正序,也即单词的字典序排序。参考代码截断到#输入的代码。import sys s=sys.stdin.read() s=s[:s.find("#")]#通过指针定位,找到输入中#字符出现的位置,并截断到此处
浙大版《Python 程序设计》题目集–函数题部分https://blog.csdn.net/dive668/article/details/116070664
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值