用以记录python学习过程中做过的小习题~ ヾ(◍°∇°◍)ノ゙

1.生成两个列表,分别存放将100以内的偶数&奇数

  1. odd_number=[]
  2. even_number=[]
  3. for i in range(1,101):
  4. if i%2==0:
  5. odd_number.append(i)
  6. else:
  7. even_number.append(i)
  8. print 'the odd number list is:','\n',odd_number
  9. print 'the even number list is:','\n',even_number

执行结果

  1. the odd number list is:
  2. [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]
  3. the even number list is:
  4. [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)

  1. >>> a=range(1,5)
  2. >>> print a
  3. [1, 2, 3, 4]

list.append()

在列表末尾添加新的对象, 该方法无返回值,但是会修改原来的列表。

list.append(obj)

obj -- 添加到列表末尾的对象

  1. >>> a=[1,2,3]
  2. >>> a.append(4)
  3. >>> a
  4. [1, 2, 3, 4]

‘\n’

换行符

  1. >>> print 'hello','\n','world'
  2. hello
  3. world

2.生成8位密码,需包含大小写字母,数字,下划线

  1. import random
  2.  
  3. number=str(random.randint(0,9))
  4. lower=str(chr(random.randint(97,122)))
  5. capital=str(chr(random.randint(65,90)))
  6. underline='_'
  7.  
  8. type=[number,lower,capital,underline]
  9. new_type=random.choice(type)
  10. password=[number,lower,capital,underline]
  11.  
  12. i=1
  13. while i <=4:
  14. password.append(new_type)
  15. i+=1
  16. else:
  17. random.shuffle(password)
  18.  
  19. print ''.join(password) 

执行结果

_yyy5yyX

_xxx7xBx

……

知识点

random模块

获取随机数模块,使用前需导入,import random。

常用函数:

random.random

返回随机生成的一个实数,它在[0,1)范围内。

  1. >>> random.random()
  2. 0.005544345491154901

random.randint

生成一个指定范围内的整数,其中范围包含上下限

  1. >>> random.randint(1,10)
  2. 4

random.choice

从序列中获取一个随机元素,并返回

  1. >>> a=[1,2,3]
  2. >>> random.choice(a)
  3. 3
  4. >>> random.choice('hello')
  5. 'l'

random.shuffle

随机排列列表中的元素,会修改列表本身。

  1. >>> a
  2. [2, 1, 3]
  3. >>> a=[1,2,3]
  4. >>> random.shuffle(a)
  5. >>> a
  6. [3, 2, 1]
  7. >>> random.shuffle(a)
  8. >>> a
  9. [2, 3, 1]

join()

将序列中的元素以指定的字符连接生成一个新的字符串

str.join(sequence)

sequence -- 要连接的元素序列。

  1. >>> str='-'
  2. >>> seq=['a','b','c']
  3. >>> print str.join(seq)
  4. a-b-c

3.列表元素去重

方法一

  1. list_a=[1,1,1,2,2]
  2. list_b=[]
  3.  
  4. for i in list_a:
  5. if i in list_b:
  6. continue
  7. else:
  8. list_b.append(i)
  9.  
  10. print list_b

执行结果

[1, 2]

方法二

  1. >>> list_a=[1,1,1,2,2]
  2. >>> list(set(list_a))
  3. [1, 2]

知识点

set()

创建一个无序不重复元素集,可进行关系测试,删除重复数据,还可以计算交集、差集、并集等

set([iterable])

iterable -- 可迭代对象对象

  1. >>> x=set('hello')
  2. >>> y=set('good world')
  3. >>> x,y # 重复的被删除
  4. (set(['h', 'e', 'l', 'o']), set([' ', 'd', 'g', 'l', 'o', 'r', 'w']))
  5. >>> x&y # 交集
  6. set(['l', 'o'])
  7. >>> x|y # 并集
  8. set([' ', 'e', 'd', 'g', 'h', 'l', 'o', 'r', 'w'])
  9. >>> x-y # 差级
  10. set(['h', 'e'])

4.统计一个字符串,有多少个特定字符

统计这句话有几个字母‘a’

方法一

  1. s='i am a boy'
  2. count=0
  3. for i in s:
  4. if i =='a':
  5. count+=1
  6. print count

执行结果

2

方法二

  1. >>> s='i am a boy'
  2. >>> s.count('a')
  3. 2

知识点

count()

用于统计字符串里某个字符出现的次数。可选参数为在字符串搜索的开始与结束位置。

str.count(sub, start= 0,end=len(string))

  1. >>> s='i am a boy'
  2. >>> s.count('a')
  3. 2
  4.  
  5. >>> s='i am a boy'
  6. >>> s.count('a',3,9)
  7. 1

对序列也可以使用

  1. >>> ss=['','a','a',''] #列表
  2. >>> ss.count('a')
  3. 2
  4. >>> ss=('','a','a','') #元祖
  5. >>> ss.count('a')
  6. 2

统计这句话有几个单词包含字母‘a’

  1. s='i am a boy'
  2. count=0
  3. a_word=[]
  4. new_dict=s.split(' ')
  5. for i in new_dict:
  6. if 'a' in i:
  7. count+=1
  8. a_word.append(i)
  9. print 'count is:',count
  10. print 'word list is:',a_word

运行结果

  1. count is: 2
  2. word list is: ['am', 'a']

知识点

split()

通过指定分隔符对字符串进行切片,如果参数 num 有指定值,则仅分隔 num 个子字符串

str.split(str="", num=string.count(str)).

str -- 分隔符,默认为所有的空字符,包括空格、换行(\n)、制表符(\t)等。

num -- 分割次数。

  1. >>> str='hello-good-world'
  2. >>> print str.split('-')
  3. ['hello', 'good', 'world']

5.判断一个数是不是质数

  1. # -*- coding: utf-8 -*-
  2. import math
  3. number=int(raw_input('please enter a number:'))
  4. for i in range(2,int(math.sqrt(number)+1)): #平方根方法
  5. #for i in range(2,number):
  6. if number % 2 != 0:
  7. print u'是质数'
  8. break
  9. else:
  10. print u'不是质数'

运行结果

  1. please enter a number:89
  2. 是质数

知识点

Math模块

math.sqrt

返回数字的平方根,使用前先导入math模块

  1. >>> import math
  2. >>> math.sqrt(6)
  3. 2.449489742783178

math.pow

返回 xy(x的y次方) 的值

math.pow( x, y )

  1. >>> math.pow(2,3)
  2. 8.0

math.ceil/floor

向上/下取整

  1. >>> math.ceil(1.1)
  2. 2.0
  3. >>> math.floor(1.1)
  4. 1.0

其他几个常见函数

abs

返回数值的取绝对值

  1. >>> abs(1)
  2. 1
  3. >>> abs(-1)
  4. 1

round

将数值四舍五入

  1. >>> round(1.1111)
  2. 1.0
  3. >>> round(1.5555)
  4. 2.0

cmp

比较两个数值的大小

  1. >>> cmp(1,1) #相等
  2. 0
  3. >>> cmp(2,1) #大于
  4. 1
  5. >>> cmp(1,2) #小于
  6. -1

max&min

找出序列中最大/最小的数值

  1. >>> max([1,2,3,4])
  2. 4
  3. >>> min([1,2,3,4])
  4. 1

6.输入一组数字,将每位数字加1后输出

  1. 方法一
  2. number=str(int(raw_input('enter a number:')))
  3. new_number=''
  4. for i in number:
  5. i_new=int(i)+1
  6. new_number+=str(i_new)
  7. print int(new_number)
  8.  
  9. 方法二
  10. number=raw_input('enter a number:')
  11. list1=[]
  12. list2=[]
  13. for i in number:
  14. list1.append(i)
  15.  
  16. for j in list1:
  17. list2.append(str(int(j)+1))
  18. print int(''.join(list2))
  19.  
  20. 方法三
  21. >>> int(''.join(map(lambda x:str(int(x)+1),'123')))
  22. 234

  

运行结果

  1. enter a number:123
  2. 234

  

知识点

lambda

lambda表达式,通常是在需要一个函数,但是又不想命名一个函数的场合下使用,也就是指匿名函数。

创建语法:lambda parameters:express

parameters:可选,如果提供,通常是逗号分隔的变量表达式形式,即位置参数。

expression:不能包含分支或循环(但允许条件表达式),也不能包含return(或yield)函数。如果为元组,则应用圆括号将其包含起来。

  1. eg
  2. >>> s=lambda x:x+1 #传入一个参数
  3. >>> print s(1)
  4. 2
  5.  
  6. >>> p=lambda x,y:x+y #传入多个参数
  7. >>> print p(1,2)
  8. 3
  9.  
  10. >>> s=lambda x:'yes' if x==1 else 'no' #条件表达式
  11. >>> s(0)
  12. 'no'
  13. >>> s(1)
  14. 'yes'

  

PS:

Lambda函数返回值是一个地址,即函数对象

>>> lambda x:x+1

<function <lambda> at 0x0000000002E53CF8>

map()

根据提供的函数对指定序列做映射,并返回一个新的序列

函数语法:map(function, iterable, ...)

function -- 函数

iterable -- 一个或多个序列

eg.

  1. >>> def x(s):
  2. return s+1
  3. >>> map(x,[1,2,3]) #包含一个参数
  4. [2, 3, 4]
  5.  
  6. >>> map(lambda x,y:x+y,[1,2,3],[10,20,30]) #包含两个参数
  7. [11, 22, 33]

  

7.阶乘函数

  1. def factorial(x):
  2. result=1
  3. if not isinstance(x,int):
  4. raise TypeError('bad operand type')
  5. if x> 0:
  6. for i in range(1,x+1):
  7. result*=i
  8. return result
  9. elif x==0:
  10. return '1'
  11. else:
  12. return 'please enter a positive number'
  13.  
  14. print factorial('s')
  15. print factorial(3)
  16. print factorial(-1)
  17. print factorial(0)

  

运行结果

  1. print factorial('s') #非整数
  2. raise TypeError('bad operand type')
  3. TypeError: bad operand type
  4. print factorial(3) #正整数
  5. 6
  6. print factorial(-1) #负数
  7. please enter a positive number
  8. print factorial(0) #0
  9. 1

  

知识点

isinstance()

用来判断一个对象是否是一个已知的类型,类似 type()

isinstance() 与 type() 区别:

type() 不会认为子类是一种父类类型,不考虑继承关系。

isinstance() 会认为子类是一种父类类型,考虑继承关系。

如果要判断两个类型是否相同推荐使用 isinstance()。

语法:isinstance(object, classinfo)

object -- 实例对象。

classinfo -- 可以是直接或间接类名、基本类型或者由它们组成的元组。

如果对象的类型与参数二的类型(classinfo)相同则返回 True,否则返回 False。

eg

  1. >>> isinstance(1,int)
  2. True
  3. >>> isinstance(1,str)
  4. False
  5. >>> isinstance(1,(str,int,list)) # 如果是元组中的其中一个则返回True
  6. True

  

raise()

raise语句来引发一个异常。异常/错误对象必须有一个名字,且它们应是Error或Exception类的子类。

eg.

  1. >>> def ThrowErr():
  2. raise Exception('my name is error')
  3. >>> ThrowErr()
  4. Traceback (most recent call last):
  5. File "<pyshell#44>", line 1, in <module>
  6. ThrowErr()
  7. File "<pyshell#43>", line 2, in ThrowErr
  8. raise Exception('my name is error')
  9. Exception: my name is error

  

8.定义一个函数,可以设定不定个数的形参,返回形参中的乘方和

  1. def powersum(power,*args):
  2. total=0
  3. for i in args:
  4. total+=pow(i,power)
  5. return total

  

运行结果

  1. print powersum(2,3)
  2. 9
  3. print powersum(2,3,4)
  4. 25
  5. print powersum(2,3,4,5)
  6. 50

  

知识点

*args 和**args都可以接受可变长度的参数个数

*args :表示的是可变参数的元祖

**args:表示的是可变参数的字典

pow()

内置pow函数

语法:pow(x, y[, z])

计算x的y次方,如果z在存在,则再对结果进行取模

eg.

  1. >>> pow(2,3)
  2. 8
  3. >>> pow(2,3,4)
  4. 0
  5. >>> pow(2,3,5)
  6. 3

  

PS:

与math.pow的区别

pow() 通过内置的方法直接调用,内置方法会把参数作为整型,而 math 模块则会把参数转换为 float。

9.定义一个函数,使用可变参数字典,计算所有参数的key和value的长度,并返回结果

  1. def count_length(**args):
  2. result=0
  3. for key,value in args.items():
  4. result+=len(str(key))
  5. result+=len(str(value))
  6. return result
  7. print count_length(a='hello',b='world')

  

运行结果

12

知识点

dict.item()

以列表返回可遍历的(键, 值) 元组数组。

eg.

  1. >>> dict={'name':'hello','age':15}
  2. >>> print dict.items()
  3. [('age', 15), ('name', 'hello')]
  4.  
  5. >>> for key,value in dict.items():
  6. print key,value
  7.  
  8. age 15
  9. name hello

  

10.查询列表中元素是列表的个数

  1. 方法一:
  2. a=[1,[2],[3],'a']
  3. j=0
  4. for i in a:
  5. if isinstance(i,list):
  6. j+=1
  7. print j
  8.  
  9. 运行结果:
  10. 2

  11. 方法二:
  12. >>> a=[1,[2],[3],'a']
  13. >>> len(filter(lambda x:isinstance(x,list),a))
  14. 2

  

知识点

Filter

用于过滤序列,过滤掉不符合条件的元素,返回由符合条件元素组成的新列表

语法:filter(function, iterable)

function -- 判断函数。

iterable -- 可迭代对象。

#过滤小写字母,返回大写字母

  1. 方法一
  2. def f(s):
  3. if s>='a' and s<='z':
  4. return
  5. else:
  6. return s
  7.  
  8. print filter(f,'AABBaabb')
  9.  
  10. 方法二:
  11. >>> import string
  12. >>> filter(lambda x:x in string.uppercase,'AABBaabb') # string.uppercase返回所有大写字母
  13. 'AABB'

  14. 注:
  15. Python2filter返回一个列表,而python3中返回一个类,py 3代码如下:
  16. >>> a=[1,[2],[3],'a']
  17. >>> len(list(filter(lambda x:isinstance(x,list),a)))
  18. 2

  

#删除列表中等于4的元素

  1. 方法一
  2. a=[1,2,4,4,4,4,5,6]
  3. num=a.count(4)
  4. for i in a:
  5. if i == 4:
  6. while num>0:
  7. a.remove(i)
  8. num-=1
  9. print a
  10.  
  11. 运行结果:
  12. [1, 2, 5, 6]
  13.  
  14. 方法二:
  15. >>> a=[1,2,4,4,4,4,5,6]
  16. >>> filter(lambda x:x!=4,a)
  17. [1, 2, 5, 6]

  

11.按照列表的长度倒序排列

  1. list1=[(1,5,6),(1,2,3,4),(1,1,2,3,4,5),(1,9)]
  2. def l(tup):
  3. return len(tup)
  4.  
  5. list1.sort(key=l,reverse=True)
  6. print list1

  

知识点

L.sort(cmp=None,key=None,reverse=False)

key:从每个元素提起一个用于比较的关键字

reverse:接受false或者true,表示是否逆序。True,表示逆序

#按照列表第一个元素的大小排序

  1. list1=[(1,5,6),(7,2,3,4),(8,1,2,3,4,5),(2,9)]
  2. def L(tup):
  3. return tup[0]
  4. list1.sort(key=L)
  5.  
  6. print list1
  7.  
  8. 运行结果:
  9. [(1, 5, 6), (2, 9), (7, 2, 3, 4), (8, 1, 2, 3, 4, 5)]

  

12.将两个list的对应位元素合并

  1. 方法一:
  2. list1=[1,2,3]
  3. list2=[4,5,6]
  4. list3=[]
  5.  
  6. for i in range(len(list1)):
  7. for j in range(len(list2)):
  8. if i==j:
  9. tup=(list1[i],list2[j])
  10. list3.append(tup)
  11. print list3
  12.  
  13. 方法二:
  14. >>> zip([1,2,3],[4,5,6])
  15. [(1, 4), (2, 5), (3, 6)]

  

知识点

zip()

用于将可迭代的对象作为参数,将对象中对应的元素打包成一个个元组,然后返回由这些元组组成的列表。

注意:python 3中zip返回的是一个地址,需要用list转化一下

  1. >>> zip([1,2,3],[4,5,6])
  2. <zip object at 0x000000000290FB88>
  3. >>> list(zip([1,2,3],[4,5,6]))
  4. [(1, 4), (2, 5), (3, 6)]

  

已经压缩过的列表,添加个*号,即为解压

  1. >>> a=[1,2,3]
  2. >>> b=[4,5,6]
  3. >>> s=zip(a,b)
  4. >>> zip(*s)
  5. [(1, 2, 3), (4, 5, 6)]

  

13.生成一个0~8的二维列表

  1. result=[]
  2. num=0
  3. for i in range(3):
  4. x=[]
  5. for j in range(3):
  6. x.append(num)
  7. num+=1
  8. result.append(x)
  9.  
  10. print result
  11.  
  12. 运行结果:
  13. [[0, 1, 2], [3, 4, 5], [6, 7, 8]]

14.二维列表转置

  1. 方法一:
  2. A=[[1,2,3],
  3. [4,5,6],
  4. [7,8,9],
  5. [10,11,12]]
  6. result=[]
  7.  
  8. for i in range(3):
  9. L=[]
  10. for j in range(4):
  11. L.append(A[j][i])
  12. result.append(L)
  13.  
  14. print result
  15.  
  16. 方法二:
  17. >>> A=[[1,2,3],[4,5,6],[7,8,9],[10,11,12]]
  18. >>> print [ [ j [ i ] for j in A]for i in range(3) ]
  19.  
  1. 运行结果:
  2. [[1, 4, 7, 10], [2, 5, 8, 11], [3, 6, 9, 12]]

  

知识点

推导列表

格式:[表达式 for 变量 in 列表]   或者  [表达式 for 变量 in 列表 if 条件]

PS:支持for if循环,但是不支持else

  1. >>> [x for x in range(5)]
  2. [0, 1, 2, 3, 4]
  3. >>> [x+1 for x in range(5)]
  4. [1, 2, 3, 4, 5]
  5. >>> [x+y for x in [1,2,3] for y in [4,5,6]]
  6. [5, 6, 7, 6, 7, 8, 7, 8, 9]

  

15.交换字典key与value的位置

  1. d={'a':1,'b':2}
  2. new_d={}
  3. for i,j in d.items():
  4. new_d[j]=i
  5. print new_d

  

上篇结束 ,撒花✿✿ヽ(°▽°)ノ✿

python习题实例(上)_update18/07/03的更多相关文章

  1. Python小白的数学建模课-03.线性规划

    线性规划是很多数模培训讲的第一个算法,算法很简单,思想很深刻. 要通过线性规划问题,理解如何学习数学建模.如何选择编程算法. 『Python小白的数学建模课 @ Youcans』带你从数模小白成为国赛 ...

  2. 让python在hadoop上跑起来

    duang~好久没有更新博客啦,原因很简单,实习啦-好吧,我过来这边上班表示觉得自己简直弱爆了.第一周,配置环境:第二周,将数据可视化,包括学习了excel2013的一些高大上的技能,例如数据透视表和 ...

  3. python基础——实例属性和类属性

    python基础——实例属性和类属性 由于Python是动态语言,根据类创建的实例可以任意绑定属性. 给实例绑定属性的方法是通过实例变量,或者通过self变量: class Student(objec ...

  4. python 发送邮件实例

    留言板回复作者邮件提醒 -----------2016-5-11 15:03:58-- source:python发送邮件实例

  5. python Cmd实例之网络爬虫应用

    python Cmd实例之网络爬虫应用 标签(空格分隔): python Cmd 爬虫 废话少说,直接上代码 # encoding=utf-8 import os import multiproces ...

  6. 使用MethodType函数将方法绑定到类或实例上

    在开始正文之前,需要了解下Python的绑定方法(bound method)和非绑定方法. 简单做个测试: 定义一个类,类中由实例方法.静态方法和类方法. class ClassA: def inst ...

  7. Python爬虫实例:爬取B站《工作细胞》短评——异步加载信息的爬取

    很多网页的信息都是通过异步加载的,本文就举例讨论下此类网页的抓取. <工作细胞>最近比较火,bilibili 上目前的短评已经有17000多条. 先看分析下页面 右边 li 标签中的就是短 ...

  8. Python爬虫实例:爬取猫眼电影——破解字体反爬

    字体反爬 字体反爬也就是自定义字体反爬,通过调用自定义的字体文件来渲染网页中的文字,而网页中的文字不再是文字,而是相应的字体编码,通过复制或者简单的采集是无法采集到编码后的文字内容的. 现在貌似不少网 ...

  9. Python基于Python实现批量上传文件或目录到不同的Linux服务器

    基于Python实现批量上传文件或目录到不同的Linux服务器   by:授客 QQ:1033553122 实现功能 1 测试环境 1 使用方法 1 1. 编辑配置文件conf/rootpath_fo ...

随机推荐

  1. 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 ...

  2. range和xrange的区别

    range和xrange的区别 python3里面只有range,返回结果是一个生成器,官方文档是这样描述的 class range(object): """ range ...

  3. VS2017 15.6之后支持直接反编译了

    在 15.6 预览版 2 中,增加了导航到反编译源功能. 启用后,在任何引用的类型或成员上调用转到定义或查看定义时,将显示其通过 ILSpy 反编译使用重新构造方法主体的定义. 要打开此功能,请转到“ ...

  4. 数据库设计理论与实践·<四>数据库基本术语及其概念

    一.关系模型 关系模型是最重要的一种数据模型.关系数据库模型系统采用关系模型作为数据的组织方式. 关系模型的数据结构: 关系:一张表 元组:一行记录. 属性:一列 [码(键,key)]:表中的某个属性 ...

  5. steps/train_sat.sh

    <<LDA_MLLT_fMLLR三音素HMM的训练流程图.vsdx>>    

  6. Spark Streaming连接Kafka的两种方式 direct 跟receiver 方式接收数据的区别

    Receiver是使用Kafka的高层次Consumer API来实现的. Receiver从Kafka中获取的数据都是存储在Spark Executor的内存中的,然后Spark Streaming ...

  7. Hive通过mysql元数据表删除分区

    1 创建表 hive命令行操作 CREATE TABLE IF NOT EXISTS emp( name STRING, salary FLOAT, subordinates ARRAY<STR ...

  8. windows基本命令大全

    1.DOS常用命令详解 dir 列文件名 deltree 删除目录树 cls 清屏 cd 改变当前目录. copy 拷贝文件 diskcopy 复制磁盘 del 删除文件 format 格式化磁盘. ...

  9. 【webpack】中clean-weabpack-plugin使用方法

    在webpack中打包的文件通常是通过hash生成的,如果文件改动,那么打包的文件就会越来越多,如果想清除之前的文件,可以使用clean-weabpack-plugin插件来处理   注意版本号:我使 ...

  10. 【blog】SpringMVC返回RSS格式的XML数据

    代码 import com.sun.syndication.feed.rss.Channel; import com.sun.syndication.feed.rss.Content; import ...