用以记录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=['1','a','a','3'] #列表 >>> ss.count('a') 2 >>> ss=('1','a','a','3') #元祖 >>> 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
上篇结束 ,撒花✿✿ヽ(°▽°)ノ✿