python习题实例(上)_update18/07/03
用以记录python学习过程中做过的小习题~ ヾ(◍°∇°◍)ノ゙
1.生成两个列表,分别存放将100以内的偶数&奇数
- odd_number=[]
- even_number=[]
- for i in range(1,101):
- if i%2==0:
- odd_number.append(i)
- else:
- even_number.append(i)
- print 'the odd number list is:','\n',odd_number
- print 'the even number list is:','\n',even_number
执行结果
- the odd number list is:
- [2, 4, 6, 8, 10, 12, 14, 16, 18, 20, 22, 24, 26, 28, 30, 32, 34, 36, 38, 40, 42, 44, 46, 48, 50, 52, 54, 56, 58, 60, 62, 64, 66, 68, 70, 72, 74, 76, 78, 80, 82, 84, 86, 88, 90, 92, 94, 96, 98, 100]
- the even number list is:
- [1, 3, 5, 7, 9, 11, 13, 15, 17, 19, 21, 23, 25, 27, 29, 31, 33, 35, 37, 39, 41, 43, 45, 47, 49, 51, 53, 55, 57, 59, 61, 63, 65, 67, 69, 71, 73, 75, 77, 79, 81, 83, 85, 87, 89, 91, 93, 95, 97, 99]
知识点
range()
创建一个整数列表,一般用在 for 循环中
range(start, stop[, step])
参数说明:
start: 计数从 start 开始。默认是从 0 开始。例如range(5)等价于range(0, 5);
stop: 计数到 stop 结束,但不包括 stop。例如:range(0, 5) 是[0, 1, 2, 3, 4]没有5
step:步长,默认为1。例如:range(0, 5) 等价于 range(0, 5, 1)
- >>> a=range(1,5)
- >>> print a
- [1, 2, 3, 4]
list.append()
在列表末尾添加新的对象, 该方法无返回值,但是会修改原来的列表。
list.append(obj)
obj -- 添加到列表末尾的对象
- >>> a=[1,2,3]
- >>> a.append(4)
- >>> a
- [1, 2, 3, 4]
‘\n’
换行符
- >>> print 'hello','\n','world'
- hello
- world
2.生成8位密码,需包含大小写字母,数字,下划线
- import random
- number=str(random.randint(0,9))
- lower=str(chr(random.randint(97,122)))
- capital=str(chr(random.randint(65,90)))
- underline='_'
- type=[number,lower,capital,underline]
- new_type=random.choice(type)
- password=[number,lower,capital,underline]
- i=1
- while i <=4:
- password.append(new_type)
- i+=1
- else:
- random.shuffle(password)
- print ''.join(password)
执行结果
_yyy5yyX
_xxx7xBx
……
知识点
random模块
获取随机数模块,使用前需导入,import random。
常用函数:
random.random
返回随机生成的一个实数,它在[0,1)范围内。
- >>> random.random()
- 0.005544345491154901
random.randint
生成一个指定范围内的整数,其中范围包含上下限
- >>> random.randint(1,10)
- 4
random.choice
从序列中获取一个随机元素,并返回
- >>> a=[1,2,3]
- >>> random.choice(a)
- 3
- >>> random.choice('hello')
- 'l'
random.shuffle
随机排列列表中的元素,会修改列表本身。
- >>> a
- [2, 1, 3]
- >>> a=[1,2,3]
- >>> random.shuffle(a)
- >>> a
- [3, 2, 1]
- >>> random.shuffle(a)
- >>> a
- [2, 3, 1]
join()
将序列中的元素以指定的字符连接生成一个新的字符串
str.join(sequence)
sequence -- 要连接的元素序列。
- >>> str='-'
- >>> seq=['a','b','c']
- >>> print str.join(seq)
- a-b-c
3.列表元素去重
方法一
- list_a=[1,1,1,2,2]
- list_b=[]
- for i in list_a:
- if i in list_b:
- continue
- else:
- list_b.append(i)
- print list_b
执行结果
[1, 2]
方法二
- >>> list_a=[1,1,1,2,2]
- >>> list(set(list_a))
- [1, 2]
知识点
set()
创建一个无序不重复元素集,可进行关系测试,删除重复数据,还可以计算交集、差集、并集等
set([iterable])
iterable -- 可迭代对象对象
- >>> x=set('hello')
- >>> y=set('good world')
- >>> x,y # 重复的被删除
- (set(['h', 'e', 'l', 'o']), set([' ', 'd', 'g', 'l', 'o', 'r', 'w']))
- >>> x&y # 交集
- set(['l', 'o'])
- >>> x|y # 并集
- set([' ', 'e', 'd', 'g', 'h', 'l', 'o', 'r', 'w'])
- >>> x-y # 差级
- set(['h', 'e'])
4.统计一个字符串,有多少个特定字符
统计这句话有几个字母‘a’
方法一
- s='i am a boy'
- count=0
- for i in s:
- if i =='a':
- count+=1
- print count
执行结果
2
方法二
- >>> s='i am a boy'
- >>> s.count('a')
- 2
知识点
count()
用于统计字符串里某个字符出现的次数。可选参数为在字符串搜索的开始与结束位置。
str.count(sub, start= 0,end=len(string))
- >>> s='i am a boy'
- >>> s.count('a')
- 2
- >>> s='i am a boy'
- >>> s.count('a',3,9)
- 1
对序列也可以使用
- >>> ss=['','a','a',''] #列表
- >>> ss.count('a')
- 2
- >>> ss=('','a','a','') #元祖
- >>> ss.count('a')
- 2
统计这句话有几个单词包含字母‘a’
- s='i am a boy'
- count=0
- a_word=[]
- new_dict=s.split(' ')
- for i in new_dict:
- if 'a' in i:
- count+=1
- a_word.append(i)
- print 'count is:',count
- print 'word list is:',a_word
运行结果
- count is: 2
- word list is: ['am', 'a']
知识点
split()
通过指定分隔符对字符串进行切片,如果参数 num 有指定值,则仅分隔 num 个子字符串
str.split(str="", num=string.count(str)).
str -- 分隔符,默认为所有的空字符,包括空格、换行(\n)、制表符(\t)等。
num -- 分割次数。
- >>> str='hello-good-world'
- >>> print str.split('-')
- ['hello', 'good', 'world']
5.判断一个数是不是质数
- # -*- coding: utf-8 -*-
- import math
- number=int(raw_input('please enter a number:'))
- for i in range(2,int(math.sqrt(number)+1)): #平方根方法
- #for i in range(2,number):
- if number % 2 != 0:
- print u'是质数'
- break
- else:
- print u'不是质数'
运行结果
- please enter a number:89
- 是质数
知识点
Math模块
math.sqrt
返回数字的平方根,使用前先导入math模块
- >>> import math
- >>> math.sqrt(6)
- 2.449489742783178
math.pow
返回 xy(x的y次方) 的值
math.pow( x, y )
- >>> math.pow(2,3)
- 8.0
math.ceil/floor
向上/下取整
- >>> math.ceil(1.1)
- 2.0
- >>> math.floor(1.1)
- 1.0
其他几个常见函数
abs
返回数值的取绝对值
- >>> abs(1)
- 1
- >>> abs(-1)
- 1
round
将数值四舍五入
- >>> round(1.1111)
- 1.0
- >>> round(1.5555)
- 2.0
cmp
比较两个数值的大小
- >>> cmp(1,1) #相等
- 0
- >>> cmp(2,1) #大于
- 1
- >>> cmp(1,2) #小于
- -1
max&min
找出序列中最大/最小的数值
- >>> max([1,2,3,4])
- 4
- >>> min([1,2,3,4])
- 1
6.输入一组数字,将每位数字加1后输出
- 方法一
- number=str(int(raw_input('enter a number:')))
- new_number=''
- for i in number:
- i_new=int(i)+1
- new_number+=str(i_new)
- print int(new_number)
- 方法二
- number=raw_input('enter a number:')
- list1=[]
- list2=[]
- for i in number:
- list1.append(i)
- for j in list1:
- list2.append(str(int(j)+1))
- print int(''.join(list2))
- 方法三
- >>> int(''.join(map(lambda x:str(int(x)+1),'123')))
- 234
运行结果
- enter a number:123
- 234
知识点
lambda
lambda表达式,通常是在需要一个函数,但是又不想命名一个函数的场合下使用,也就是指匿名函数。
创建语法:lambda parameters:express
parameters:可选,如果提供,通常是逗号分隔的变量表达式形式,即位置参数。
expression:不能包含分支或循环(但允许条件表达式),也不能包含return(或yield)函数。如果为元组,则应用圆括号将其包含起来。
- eg
- >>> s=lambda x:x+1 #传入一个参数
- >>> print s(1)
- 2
- >>> p=lambda x,y:x+y #传入多个参数
- >>> print p(1,2)
- 3
- >>> s=lambda x:'yes' if x==1 else 'no' #条件表达式
- >>> s(0)
- 'no'
- >>> s(1)
- 'yes'
PS:
Lambda函数返回值是一个地址,即函数对象
>>> lambda x:x+1
<function <lambda> at 0x0000000002E53CF8>
map()
根据提供的函数对指定序列做映射,并返回一个新的序列
函数语法:map(function, iterable, ...)
function -- 函数
iterable -- 一个或多个序列
eg.
- >>> def x(s):
- return s+1
- >>> map(x,[1,2,3]) #包含一个参数
- [2, 3, 4]
- >>> map(lambda x,y:x+y,[1,2,3],[10,20,30]) #包含两个参数
- [11, 22, 33]
7.阶乘函数
- def factorial(x):
- result=1
- if not isinstance(x,int):
- raise TypeError('bad operand type')
- if x> 0:
- for i in range(1,x+1):
- result*=i
- return result
- elif x==0:
- return '1'
- else:
- return 'please enter a positive number'
- print factorial('s')
- print factorial(3)
- print factorial(-1)
- print factorial(0)
运行结果
- print factorial('s') #非整数
- raise TypeError('bad operand type')
- TypeError: bad operand type
- print factorial(3) #正整数
- 6
- print factorial(-1) #负数
- please enter a positive number
- print factorial(0) #0
- 1
知识点
isinstance()
用来判断一个对象是否是一个已知的类型,类似 type()
isinstance() 与 type() 区别:
type() 不会认为子类是一种父类类型,不考虑继承关系。
isinstance() 会认为子类是一种父类类型,考虑继承关系。
如果要判断两个类型是否相同推荐使用 isinstance()。
语法:isinstance(object, classinfo)
object -- 实例对象。
classinfo -- 可以是直接或间接类名、基本类型或者由它们组成的元组。
如果对象的类型与参数二的类型(classinfo)相同则返回 True,否则返回 False。
eg
- >>> isinstance(1,int)
- True
- >>> isinstance(1,str)
- False
- >>> isinstance(1,(str,int,list)) # 如果是元组中的其中一个则返回True
- True
raise()
raise语句来引发一个异常。异常/错误对象必须有一个名字,且它们应是Error或Exception类的子类。
eg.
- >>> def ThrowErr():
- raise Exception('my name is error')
- >>> ThrowErr()
- Traceback (most recent call last):
- File "<pyshell#44>", line 1, in <module>
- ThrowErr()
- File "<pyshell#43>", line 2, in ThrowErr
- raise Exception('my name is error')
- Exception: my name is error
8.定义一个函数,可以设定不定个数的形参,返回形参中的乘方和
- def powersum(power,*args):
- total=0
- for i in args:
- total+=pow(i,power)
- return total
运行结果
- print powersum(2,3)
- 9
- print powersum(2,3,4)
- 25
- print powersum(2,3,4,5)
- 50
知识点
*args 和**args都可以接受可变长度的参数个数
*args :表示的是可变参数的元祖
**args:表示的是可变参数的字典
pow()
内置pow函数
语法:pow(x, y[, z])
计算x的y次方,如果z在存在,则再对结果进行取模
eg.
- >>> pow(2,3)
- 8
- >>> pow(2,3,4)
- 0
- >>> pow(2,3,5)
- 3
PS:
与math.pow的区别
pow() 通过内置的方法直接调用,内置方法会把参数作为整型,而 math 模块则会把参数转换为 float。
9.定义一个函数,使用可变参数字典,计算所有参数的key和value的长度,并返回结果
- def count_length(**args):
- result=0
- for key,value in args.items():
- result+=len(str(key))
- result+=len(str(value))
- return result
- print count_length(a='hello',b='world')
运行结果
12
知识点
dict.item()
以列表返回可遍历的(键, 值) 元组数组。
eg.
- >>> dict={'name':'hello','age':15}
- >>> print dict.items()
- [('age', 15), ('name', 'hello')]
- >>> for key,value in dict.items():
- print key,value
- age 15
- name hello
10.查询列表中元素是列表的个数
- 方法一:
- a=[1,[2],[3],'a']
- j=0
- for i in a:
- if isinstance(i,list):
- j+=1
- print j
- 运行结果:
- 2
- 方法二:
- >>> a=[1,[2],[3],'a']
- >>> len(filter(lambda x:isinstance(x,list),a))
- 2
知识点
Filter
用于过滤序列,过滤掉不符合条件的元素,返回由符合条件元素组成的新列表
语法:filter(function, iterable)
function -- 判断函数。
iterable -- 可迭代对象。
#过滤小写字母,返回大写字母
- 方法一
- def f(s):
- if s>='a' and s<='z':
- return
- else:
- return s
- print filter(f,'AABBaabb')
- 方法二:
- >>> import string
- >>> filter(lambda x:x in string.uppercase,'AABBaabb') # string.uppercase返回所有大写字母
- 'AABB'
- 注:
- Python2中filter返回一个列表,而python3中返回一个类,py 3代码如下:
- >>> a=[1,[2],[3],'a']
- >>> len(list(filter(lambda x:isinstance(x,list),a)))
- 2
#删除列表中等于4的元素
- 方法一
- a=[1,2,4,4,4,4,5,6]
- num=a.count(4)
- for i in a:
- if i == 4:
- while num>0:
- a.remove(i)
- num-=1
- print a
- 运行结果:
- [1, 2, 5, 6]
- 方法二:
- >>> a=[1,2,4,4,4,4,5,6]
- >>> filter(lambda x:x!=4,a)
- [1, 2, 5, 6]
11.按照列表的长度倒序排列
- list1=[(1,5,6),(1,2,3,4),(1,1,2,3,4,5),(1,9)]
- def l(tup):
- return len(tup)
- list1.sort(key=l,reverse=True)
- print list1
知识点
L.sort(cmp=None,key=None,reverse=False)
key:从每个元素提起一个用于比较的关键字
reverse:接受false或者true,表示是否逆序。True,表示逆序
#按照列表第一个元素的大小排序
- list1=[(1,5,6),(7,2,3,4),(8,1,2,3,4,5),(2,9)]
- def L(tup):
- return tup[0]
- list1.sort(key=L)
- print list1
- 运行结果:
- [(1, 5, 6), (2, 9), (7, 2, 3, 4), (8, 1, 2, 3, 4, 5)]
12.将两个list的对应位元素合并
- 方法一:
- list1=[1,2,3]
- list2=[4,5,6]
- list3=[]
- for i in range(len(list1)):
- for j in range(len(list2)):
- if i==j:
- tup=(list1[i],list2[j])
- list3.append(tup)
- print list3
- 方法二:
- >>> zip([1,2,3],[4,5,6])
- [(1, 4), (2, 5), (3, 6)]
知识点
zip()
用于将可迭代的对象作为参数,将对象中对应的元素打包成一个个元组,然后返回由这些元组组成的列表。
注意:python 3中zip返回的是一个地址,需要用list转化一下
- >>> zip([1,2,3],[4,5,6])
- <zip object at 0x000000000290FB88>
- >>> list(zip([1,2,3],[4,5,6]))
- [(1, 4), (2, 5), (3, 6)]
已经压缩过的列表,添加个*号,即为解压
- >>> a=[1,2,3]
- >>> b=[4,5,6]
- >>> s=zip(a,b)
- >>> zip(*s)
- [(1, 2, 3), (4, 5, 6)]
13.生成一个0~8的二维列表
- result=[]
- num=0
- for i in range(3):
- x=[]
- for j in range(3):
- x.append(num)
- num+=1
- result.append(x)
- print result
- 运行结果:
- [[0, 1, 2], [3, 4, 5], [6, 7, 8]]
14.二维列表转置
- 方法一:
- A=[[1,2,3],
- [4,5,6],
- [7,8,9],
- [10,11,12]]
- result=[]
- for i in range(3):
- L=[]
- for j in range(4):
- L.append(A[j][i])
- result.append(L)
- print result
- 方法二:
- >>> A=[[1,2,3],[4,5,6],[7,8,9],[10,11,12]]
- >>> print [ [ j [ i ] for j in A]for i in range(3) ]
- 运行结果:
- [[1, 4, 7, 10], [2, 5, 8, 11], [3, 6, 9, 12]]
知识点
推导列表
格式:[表达式 for 变量 in 列表] 或者 [表达式 for 变量 in 列表 if 条件]
PS:支持for if循环,但是不支持else
- >>> [x for x in range(5)]
- [0, 1, 2, 3, 4]
- >>> [x+1 for x in range(5)]
- [1, 2, 3, 4, 5]
- >>> [x+y for x in [1,2,3] for y in [4,5,6]]
- [5, 6, 7, 6, 7, 8, 7, 8, 9]
15.交换字典key与value的位置
- d={'a':1,'b':2}
- new_d={}
- for i,j in d.items():
- new_d[j]=i
- print new_d
上篇结束 ,撒花✿✿ヽ(°▽°)ノ✿
python习题实例(上)_update18/07/03的更多相关文章
- Python小白的数学建模课-03.线性规划
线性规划是很多数模培训讲的第一个算法,算法很简单,思想很深刻. 要通过线性规划问题,理解如何学习数学建模.如何选择编程算法. 『Python小白的数学建模课 @ Youcans』带你从数模小白成为国赛 ...
- 让python在hadoop上跑起来
duang~好久没有更新博客啦,原因很简单,实习啦-好吧,我过来这边上班表示觉得自己简直弱爆了.第一周,配置环境:第二周,将数据可视化,包括学习了excel2013的一些高大上的技能,例如数据透视表和 ...
- python基础——实例属性和类属性
python基础——实例属性和类属性 由于Python是动态语言,根据类创建的实例可以任意绑定属性. 给实例绑定属性的方法是通过实例变量,或者通过self变量: class Student(objec ...
- python 发送邮件实例
留言板回复作者邮件提醒 -----------2016-5-11 15:03:58-- source:python发送邮件实例
- python Cmd实例之网络爬虫应用
python Cmd实例之网络爬虫应用 标签(空格分隔): python Cmd 爬虫 废话少说,直接上代码 # encoding=utf-8 import os import multiproces ...
- 使用MethodType函数将方法绑定到类或实例上
在开始正文之前,需要了解下Python的绑定方法(bound method)和非绑定方法. 简单做个测试: 定义一个类,类中由实例方法.静态方法和类方法. class ClassA: def inst ...
- Python爬虫实例:爬取B站《工作细胞》短评——异步加载信息的爬取
很多网页的信息都是通过异步加载的,本文就举例讨论下此类网页的抓取. <工作细胞>最近比较火,bilibili 上目前的短评已经有17000多条. 先看分析下页面 右边 li 标签中的就是短 ...
- Python爬虫实例:爬取猫眼电影——破解字体反爬
字体反爬 字体反爬也就是自定义字体反爬,通过调用自定义的字体文件来渲染网页中的文字,而网页中的文字不再是文字,而是相应的字体编码,通过复制或者简单的采集是无法采集到编码后的文字内容的. 现在貌似不少网 ...
- Python基于Python实现批量上传文件或目录到不同的Linux服务器
基于Python实现批量上传文件或目录到不同的Linux服务器 by:授客 QQ:1033553122 实现功能 1 测试环境 1 使用方法 1 1. 编辑配置文件conf/rootpath_fo ...
随机推荐
- Improving Deep Neural Networks: Hyperparameter tuning, Regularization and Optimization(第一周)深度学习的实践层面 (Practical aspects of Deep Learning)
1. Setting up your Machine Learning Application 1.1 训练,验证,测试集(Train / Dev / Test sets) 1.2 Bias/Vari ...
- range和xrange的区别
range和xrange的区别 python3里面只有range,返回结果是一个生成器,官方文档是这样描述的 class range(object): """ range ...
- VS2017 15.6之后支持直接反编译了
在 15.6 预览版 2 中,增加了导航到反编译源功能. 启用后,在任何引用的类型或成员上调用转到定义或查看定义时,将显示其通过 ILSpy 反编译使用重新构造方法主体的定义. 要打开此功能,请转到“ ...
- 数据库设计理论与实践·<四>数据库基本术语及其概念
一.关系模型 关系模型是最重要的一种数据模型.关系数据库模型系统采用关系模型作为数据的组织方式. 关系模型的数据结构: 关系:一张表 元组:一行记录. 属性:一列 [码(键,key)]:表中的某个属性 ...
- steps/train_sat.sh
<<LDA_MLLT_fMLLR三音素HMM的训练流程图.vsdx>>
- Spark Streaming连接Kafka的两种方式 direct 跟receiver 方式接收数据的区别
Receiver是使用Kafka的高层次Consumer API来实现的. Receiver从Kafka中获取的数据都是存储在Spark Executor的内存中的,然后Spark Streaming ...
- Hive通过mysql元数据表删除分区
1 创建表 hive命令行操作 CREATE TABLE IF NOT EXISTS emp( name STRING, salary FLOAT, subordinates ARRAY<STR ...
- windows基本命令大全
1.DOS常用命令详解 dir 列文件名 deltree 删除目录树 cls 清屏 cd 改变当前目录. copy 拷贝文件 diskcopy 复制磁盘 del 删除文件 format 格式化磁盘. ...
- 【webpack】中clean-weabpack-plugin使用方法
在webpack中打包的文件通常是通过hash生成的,如果文件改动,那么打包的文件就会越来越多,如果想清除之前的文件,可以使用clean-weabpack-plugin插件来处理 注意版本号:我使 ...
- 【blog】SpringMVC返回RSS格式的XML数据
代码 import com.sun.syndication.feed.rss.Channel; import com.sun.syndication.feed.rss.Content; import ...