「学习笔记」3.17代码学习
2016-03-17 20:18
232 查看
今天还是继续刷acmcoder上的题,每天都会遇到很多新问题,不知道什么时候才能写得很顺畅呢。发现现在只能学白天,到晚上就很累了,一点都不想写代码了,今天晚上的时间又浪费了。看来晚上要换个学习内容了,也不能一直写代码。
2012素数判定
这道题其实是我昨天就思考的,对于素数判定用的是廖教程里的写法,后来再继续写就怎么也写不下去了,搞得乱七八糟,但是我还是想把它贴出来,这样以后自己回顾的时候也会知道自己是怎么走过来的。
2013蟠桃记
这道题有意思,当时看这个名字就觉得是不是很难啊,能不能写出来,结果仔细一看,原来算是很简单的了,这要是放在以前我肯定没仔细看就说不会,可以现在要逼着自己认真的看下去,思考,写出来,发现好像也没那么难。所以说,这人要是不动脑子该有多可怕。
2015偶数求和
我觉得这道题我写得并不好,感觉纯属用数学思想解决问题,所以相对来说感觉很啰嗦,很乱,别人不仔细读可能都晕晕的,可读性不强,方法2是大鲍提供的,认真研究一下。
2016数据的交换输出
这道题开始问题出现在find_min的min初始化上,我并没有初始化,而是想取i,j两个变量同时遍历list,比较,结果报错,在网上参考了别人的,写出来的,所以说还是不熟练,基础功不扎实。
2017字符串统计
2018母牛的故事
这是一道 类似母兔子的故事,也就是fibonacci数列,找到递推关系,就写出来,不过这些母牛真厉害,可以一直生的母牛,公牛哪去了???这代码题编得太迁强了。
2019数列有序
这道题看着很没有技术含量,而且我当时一看觉得哎呀妈呀,这道题太easy了,结果一写出来,各种问题。先是输入是带空格的,这样生成的list再相加,就会把空格加进去,我又想那我把空格去掉吧,结果咋也没弄明白怎么去。后来查了一下可以用split去掉,然后就是题目要求输入0 0 什么都不做,又把我难住了,这个问题到现在我还没有解决,还有输出,输出是啥,输出是一组数用空格分开,但是我的输出是一个list。哎呀!可以循环打印出列表元素啊,这校就是单个数了啊,看看,这有的时候脑子突然开窍拦都拦不住 。明天再改吧~
2012素数判定
这道题其实是我昨天就思考的,对于素数判定用的是廖教程里的写法,后来再继续写就怎么也写不下去了,搞得乱七八糟,但是我还是想把它贴出来,这样以后自己回顾的时候也会知道自己是怎么走过来的。
encoding:utf8 ##2012素数判定 ##1 是3.16写的,没有写完,当然也是错的,但是我还是留下来吧,以后再看看我写这乱七八糟的代码,哈哈! from itertools import ifilter #此处与上不同 ##廖教程中素数判断 ##埃氏筛法,就是说从2开始的所有自然数,先用2把序列中的2的倍数筛掉,得到新序列(3开始的奇数序列) ##然后,再将新序列中用3把序列中3的倍数筛掉,得到新序列,以此类推,筛掉5的倍数,筛掉7的倍数……最 ##后筛下来的便是我们要求的素数序列 # def _odd_iter(): #构造了一个奇数序列生成器,此处特意构造的生成器主要是因为在下面引用时需要是生成器 # n=1 # while True: # n=n+2 # yield n #这是个生成器,是个无限的序列 # # def _not_divisible(n): #定义了筛选函数,将素数筛选出来 # return lambda x:x%n>0 # # def primes(l): #定义生成器,不断地返回下一个素数 # yield 2 #此生成器的第一个元素是2 # it=_odd_iter() #这时的it是生成器 # while True: #这也是一个无限循环的序列 # n=next(it) #生成器指向序列下一个数 # yield n # it=ifilter(_not_divisible(n),it) #筛选出来素数 # yield it # # ##已经被我搞得乱七八糟的了,这都是啥啊 # def is_prime(x,y): # if x==0 and y==0: # return None # else: # s=[] # for n in range(x,y+1): # s.append(n**2+n+41) ##2 #思路:构造一个判断素数函数,题目中的多项式中n取{x:y}会生成一个list #将生成的list里的每个数做素数判断,若全是素数,返回‘ok’,若不全是素数,返回'no',x=0y=0时结束 def func(n): return lambda x:x%n>0 #这是一个生成器 #在一定范围内找素数 def primes(x): l=(x for x in range(2,x+1)) #yield 2 #加上这句的话在下面打印出来的2是单独一个list,其余的是一个list n=next(l) l=filter(func(n),l) yield l #生成的是在(3,x)内的素数生成器,[如何把2也打印出来呢?] def is_prime(x): for i in primes(x): return i #将(3,x)内的素数生成列表 if x in i: return True return False # print is_prime(20) # print is_prime(17) def f(x,y): if x==0 and y==0: return None else: l=[] for n in range(x,y+1): s=n**2+n+41 l.append(s) #print l lst=filter(is_prime,l) #print lst if len(lst)==len(l): print 'ok' else: print 'no' f(1,5) f(0,1) f(0,0)
2013蟠桃记
这道题有意思,当时看这个名字就觉得是不是很难啊,能不能写出来,结果仔细一看,原来算是很简单的了,这要是放在以前我肯定没仔细看就说不会,可以现在要逼着自己认真的看下去,思考,写出来,发现好像也没那么难。所以说,这人要是不动脑子该有多可怕。
#encoding:utf8 #蟠桃记 ##思路:这道题分析起来应该是递归,表达成递归公式应该是:a(1)=x,a(n-1)=1/2*a(n-2)-1,a(n)=1,给定n值,求x ##原题意是依次递减的数列,根据我个人习惯将其改成递增数列:b(1)=1,b(n)=2(b(n-1)+1),给定n,求b(n) def func(n): if n==1: return 1 return 2*func(n-1)+2 print func(2) print func(4)
2015偶数求和
我觉得这道题我写得并不好,感觉纯属用数学思想解决问题,所以相对来说感觉很啰嗦,很乱,别人不仔细读可能都晕晕的,可读性不强,方法2是大鲍提供的,认真研究一下。
#encoding:ut 4000 f8 #偶数求和 ##思路:先是构造偶数列,然后n%m得到该做几次每m个数求值,n/m得到最后不足m的有几个 ##写法2回头认真看看,我感觉自己写的好啰嗦啊,一般人看不懂呢 ##1 def sum_even(n,m): lst=range(2,(2*n+2),2) #print lst x=n%m y=n/m #print x,y s=[] if x==0: for i in range(1,y+1): s.append(sum(lst[((i-1)*m):i*m])/m) #print s else: for i in range(1,x+1): for j in range(1,i+1): s.append(sum(lst[(j-1):(j*m)])/m) #print s s1=sum(lst[(len(lst)-y):])/y #print s1 s.append(s1) return s print sum_even(3,2) print sum_even(4,2) ##2 大鲍写的 def average(l): return sum(l)/len(l) def sum_even(n,m): start=2 current_num=start while n>m: l=range(current_num,current_num+2*m-1,2) print average(l), n=n-m current_num+=2*m if n>0: l=range(current_num,current_num+2*n-1,2) print average(l), print sum_even(3,2) sum_even(4,2)
2016数据的交换输出
这道题开始问题出现在find_min的min初始化上,我并没有初始化,而是想取i,j两个变量同时遍历list,比较,结果报错,在网上参考了别人的,写出来的,所以说还是不熟练,基础功不扎实。
#encoding:utf8 #数据的交换输出 ##思路:先找到最小的数,再做替换 def find_min(l): min=l[1] for i in range(1,len(l)): if min>=l[i]: min=i return min #print find_min([4,2,1,3,4]) def change(l): if l[0]==0: return None else: temp=l[find_min(l)] # print temp l[find_min(l)]=l[1] # print l[find_min(l)] l[1]=temp # print l[1] print l[1:] change([4,2,1,3,4]) change([5,5,4,3,2,1]) change([0])
2017字符串统计
#encoding:utf8 #字符串统计 #思路:先将字符串中的元素均用ASCII码表示,判断其ASCII码在48~57之间的但是数字 #这道题一开始想得很简单,想着直接用type找到list里的int不就行了,结果我忘了,当字符串以列表形式 #表示的时候数字也是str形式,所以统计数为0,后来想到可区分str和int应该就是用ASCII了 def is_num(s): l=list(s) l_asc=[] for i in l: l_asc.append(ord(i)) #print l_asc lst=[] for j in l_asc: if j in range(48,59): lst.append(j) print len(lst) is_num('asd3fghjk8496ldorj') is_num('asdfweirfa1111awef')
2018母牛的故事
这是一道 类似母兔子的故事,也就是fibonacci数列,找到递推关系,就写出来,不过这些母牛真厉害,可以一直生的母牛,公牛哪去了???这代码题编得太迁强了。
#encoding:utf8 #母牛的故事 ##思路:这道题有点类似于Fibonacci数列,用递推关系来走,经过分析,其递推公式为: ##f1=1,f2=2,f3=3,f4=4,f(n)=n+f(n-4) def cow_num(n): if n==0: return None else: if n in range(1,5): return n return n+cow_num(n-4) print cow_num(2) print cow_num(4) print cow_num(5) print cow_num(6) print cow_num(0)
2019数列有序
这道题看着很没有技术含量,而且我当时一看觉得哎呀妈呀,这道题太easy了,结果一写出来,各种问题。先是输入是带空格的,这样生成的list再相加,就会把空格加进去,我又想那我把空格去掉吧,结果咋也没弄明白怎么去。后来查了一下可以用split去掉,然后就是题目要求输入0 0 什么都不做,又把我难住了,这个问题到现在我还没有解决,还有输出,输出是啥,输出是一组数用空格分开,但是我的输出是一个list。哎呀!可以循环打印出列表元素啊,这校就是单个数了啊,看看,这有的时候脑子突然开窍拦都拦不住 。明天再改吧~
#encoding:utf8 #数列有序 #这道python做就很简单了,因为python有自带的排序函数,还可将列表相加,这道题的思路就是两个列表相加,然后排序。 #这道题对于输入 0 0就退出,什么都不做不太会表示 #还有这道题的输出还有些疑问,后续再考虑 l1=raw_input().split(' ') # if l1==['0','0']: # break #break 会报错 l2=raw_input().split(' ') s=l1+l2 s=sorted(list(set(s))) l=[] for i in s: l.append(int(i)) print l
相关文章推荐
- Python动态类型的学习---引用的理解
- Python3写爬虫(四)多线程实现数据爬取
- 垃圾邮件过滤器 python简单实现
- 下载并遍历 names.txt 文件,输出长度最长的回文人名。
- install and upgrade scrapy
- Scrapy的架构介绍
- Centos6 编译安装Python
- 使用Python生成Excel格式的图片
- 让Python文件也可以当bat文件运行
- [Python]推算数独
- Python中zip()函数用法举例
- Python中map()函数浅析
- Python将excel导入到mysql中
- Python在CAM软件Genesis2000中的应用
- 使用Shiboken为C++和Qt库创建Python绑定
- FREEBASIC 编译可被python调用的dll函数示例
- Python 七步捉虫法