Python由浅入深编程(概念)实战

正文之前

前两天Python这门课上机,本来没太认真听课的,但是Python我是真的有爱的,所以上机哪怕是风里来雨里去我也从西边到东边风雨无阻的准时上机了。结果一上就发现还挺有意思,由浅入深,蛮好的。所以就发一下,有兴趣的可以自己跟着做下,大概一两个小时吧!

正文

1. 字符串

1、 使用input或raw_input从屏幕接受一个字符串输入,使得word=“abcdefg”;
>>> str=raw_input('Please input some word:  ')
Please input some word:  abcdefg
>>> str
'abcdefg'
复制代码
2、 用print输出字符串word的长度(len);
>>> print(len(str))
7
复制代码
3、 使用print分别打印出word第一个字符、第二和倒数第三个字符;
>>> print str[0],str[1],str[-3]
a b e
复制代码
4、 输出word的后三个字符;
>>> str[-3:]
'efg'
复制代码
5、 判断字符串“cd”是否是word的子串;
>>> str.find('cd')
2
>>> 'cd' in str
True
复制代码
6、 将word字符串转换为列表wordlist(split);
>>> strlist=list(str)
>>> strlist
['a', 'b', 'c', 'd', 'e', 'f', 'g']
复制代码
7、 将wordlist转为以空格分隔的字符串“a b c d e f g”(join);
>>> ' '.join(strlist)
'a b c d e f g'
复制代码
8、 将word字符串在大小字母转换(upper,lower);
>>> str.upper()
'ABCDEFG'
复制代码
>>> str.lower()
'abcdefg'
>>> 
复制代码

2. 列表和元组

1、 用print输出列表shoplist=['apple','mango','carrot','banana']长度;
>>> shoplist=['apple','mange','carrot','banana']
>>> shoplist
['apple', 'mange', 'carrot', 'banana']
>>> print(len(shoplist))
4
复制代码
2、 使用for循环在同一行输出列表的每一项;
>>> for i in range(len(shoplist)):
...     print shoplist[i],
... 
apple mange carrot banana
复制代码
3、 使用for循环输出每一项的字符串长度;
>>> for i in range(len(shoplist)):
...     print len(shoplist[i])
... 
5
5
6
6
复制代码
4、 在shoplist结尾使用append追加一项‘rice’,并查看引用(id);
>>> shoplist.append('rice')
>>> id(shoplist)
4529253048
复制代码
5、 对shoplist重新排序(sort),并查看其引用;
>>> shoplist.sort()
>>> id(shoplist)
4529253048
复制代码
6、 删除列表第一项(del),并查看其引用;
>>> del shoplist[0]
>>> id(shoplist)
4529253048
复制代码
7、 将列表转换为元组shoptuple(tuple);
>>> shoptuple=tuple(shoplist)
>>> shoptuple
('banana', 'carrot', 'mange', 'rice')
>>> 
复制代码

3. 字典

1、 使用dict函数构造字典dt={‘a’:‘aaa’,‘b’:‘bbb’,‘c’:12};
>>> dt=dict((('a','aaa'),('b','bbb'),('c',12)))
>>> dt
{'a': 'aaa', 'c': 12, 'b': 'bbb'}
复制代码
2、 增加一项’d’:100;
>>> dt['d']=100
>>> dt
{'a': 'aaa', 'c': 12, 'b': 'bbb', 'd': 100}
复制代码
3、 将’d’的值改为200;
>>> dt['d']=200
>>> dt
{'a': 'aaa', 'c': 12, 'b': 'bbb', 'd': 200}
复制代码
4、 输出dt的键列表和值列表;
>>> dt.keys()
['a', 'c', 'b', 'd']
复制代码
>>> dt.values()
['aaa', 12, 'bbb', 200]
复制代码
5、 使用for循环输出dt键和对应的值;
>>> for i in range(len(dt)):
...     print dt.popitem()
... 
('a', 'aaa')
('c', 12)
('b', 'bbb')
('d', 200)
>>> 
复制代码

4. Mutable和Immutable对象

1、 操作课件“数据类型”的P40试验,理解内存简图;
>>> x=[1,2,3]
>>> x
[1, 2, 3]
>>> L=['a',x,'b']
>>> L
['a', [1, 2, 3], 'b']
>>> D={'x':x,'y':2}
>>> D
{'y': 2, 'x': [1, 2, 3]}
>>> L[1] is x
True
>>> x[1]=10086
>>> x
[1, 10086, 3]
>>> L
['a', [1, 10086, 3], 'b']
>>> D
{'y': 2, 'x': [1, 10086, 3]}
复制代码
2、 把shoplist及shoptuple分别赋值给shoplist2和shoptuple2变量,验证列表与元组的可变性(id);
>>> shoplist1=shoplist
>>> shoptuple1=shoptuple
>>> shoplist1
['banana', 'carrot', 'mange', 'rice']
>>> shoplist1[1]="Watermelon"
>>> shoplist
['banana', 'Watermelon', 'mange', 'rice']
>>> 
复制代码
3、 设计试验证明数字是Immutable对象;
>>> i=5
>>> id(i)
140542734251144
>>> i=6
>>> id(i)
140542734251120
复制代码
4、 设计试验证明字典是Mutable对象;
>>> dt=dict((('a','aaa'),('b','bbb'),('c',12)))
>>> id(dt)
4529472688
>>> dt['b']=10086
>>> id(dt)
4529472688
>>> shoptuple
('banana', 'carrot', 'mange', 'rice')
>>> id(shoptuple)
4529297552
>>> shoptuple[0]
'banana'
>>> del shoptuple[0]
Traceback (most recent call last):
 File "<stdin>", line 1, in <module>
TypeError: 'tuple' object doesn't support item deletion
>>> shoptuple[0]=10086
Traceback (most recent call last):
 File "<stdin>", line 1, in <module>
TypeError: 'tuple' object does not support item assignment
>>> 
复制代码
5、 设计试验验证列表和字典的浅拷贝和深拷贝;
>>> data={'user':'admin','num':[1,2,3]}
>>> data1=data
>>> data1
{'num': [1, 2, 3], 'user': 'admin'}
>>> import copy
>>> data2=copy.deepcopy(data)
>>> data2
{'num': [1, 2, 3], 'user': 'admin'}
>>> data['user']='root'
>>> data
{'num': [1, 2, 3], 'user': 'root'}
>>> data1
{'num': [1, 2, 3], 'user': 'root'}
>>> data2
{'num': [1, 2, 3], 'user': 'admin'}
>>> id(data)
4529376064
>>> id(data1)
4529376064
>>> id(data2)
4529383976
复制代码

5. 文件

1、 在c盘创建一个文本文件“t.txt”,里面保存两个向量1,2,3\n4,5,6 (open write);
>>> file=open('/Users/zhangzhaobo/program/python/t.txt','w+')
>>> s='1,2,3\n4,5,6'
>>> file.write(s)
>>> file.close()
复制代码

2、 打开上述文件,跳转文件指针到末尾,输出位置得到文件长度(seek tell);
>>> file.seek(0,2)
>>> file.tell()
11
复制代码
3、 跳转文件指针到文件开头,读取一行 (readline)到字符串变量中;
>>> file.seek(0)
>>> s=file.readline(5)
>>> s
'1,2,3'
复制代码
4、 解析字符串变量,获得float类型的向量;
>>> sl=s.split(',')
>>> sl
['1', '2', '3']
>>> map(float,sl)
[1.0, 2.0, 3.0]
>>> 
复制代码

6. 表达式

1、 理解并解释1 or 2, 1 or 0, 1 and 2, 1 and 0;1 and 2 or 3, 0 and 2 or 3, 0 and 0 or 3, 1 and 0 or 3的返回值;

or有一个为真就返回为真的第一个数,否则返回0

  • 1 or 2 ,此处为1
  • 同理 1 or 0 返回1

and 同时为真那么返回最后一个为真的数,为假就返回0

  • 1 and 2 返回2
  • 1 and 0 返回 0

三目运算

  • 1 and 2 or 3 1 and 2 返回2,2 or 3 返回2
  • 0 and 2 or 3 0 and 2 返回0 ,0 or 3 返回3
  • 0 and 0 or 3 0 and 0 返回0,0 or 3 返回3
  • 1 and 0 or 3 1 and 0 返回0,0 or 3 返回3(三目陷阱)
>>> 1 or 2
1
>>> 1 or 0
1
>>> 1 and 2
2
>>> 1 and 0
0
>>> 1 and 2 or 3
2
>>> 0 and 2 or 3
3
>>> 0 and 0 or 3
3
>>> 1 and 0 or 3
3
>>> 
复制代码
2、 实现3目运算符,用例子解释三目陷阱及解决办法;

三目运算通过and or 的组合形式实现,但是会存在三目陷阱,比如 1 and 0 or 3 模拟的是 1?0:3 就是第二个数如果是0的话会产生三目陷阱,所以采用列表形式作为输出数,即 1 and [0] or [3]

>>> 1 and [0] or [3]
[0]
>>> 
复制代码
3、 使用lambda、apply计算XX+YY在(3,4)的值;
>>> f=lambda x,y:x*x+y*y
>>> f(3,4)
25
>>> apply(f,(3,4))
25
>>> 
复制代码
  1. 函数
1、 定义提供缺省值的求和函数add(a,b=2),分别用1个或两个形参调用该函数;
>>> def add(a,b=2):
...     return a+b
... 
>>> add(3)
5
>>> add(3,4)
7
复制代码
2、 用元组可变参数,编写函数求shoptuple元组的字母交集(结果为{’a’})并用打印语句显示代码执行过程;
>>> shoplist=['apple','mango','carrot','banana']
>>> shoptuple=tuple(shoplist)
>>> 
>>> def Find_Unit(shoptuple):
...     size=len(shoptuple)
...     Unit=[]
...     for i in range(len(shoptuple[0])):
...         count=0
...         s=shoptuple[0][i]
...         # print s
...         for x in range(size):
...             if shoptuple[x].find(s)!=-1 and x!=0:
...                 print 'In \'%s\', We have find the \'%s\' '%(shoptuple[x],s) 
...                 count=count+1
...         if count==size:
...             print s
...             Unit.append(s)
... 
>>> Find_Unit(shoptuple)
In 'mango', We have find the 'a' 
In 'carrot', We have find the 'a' 
In 'banana', We have find the 'a' 
复制代码
、 编写包括位置匹配、关键字匹配、缺省参数、元组和字典可变参数等要素的函数,并显示全局和局部作用域的内容(dir,globals,locals);
>>> def f(a,b,v):
...     print a,b,v
... 
>>> f(v=2,a=1,b=10086)
1 10086 2
>>> f(10,v=100,b=10086)
10 10086 100
>>> def f(*arg):
...     for i in args:
...             print i
... 
>>> def f(*args):
...     for i in args:
...             print i
... 
>>> f(1,2,3,4,5)
1
2
3
4
5
>>> def f(**args):
...     print args
... 
>>> f(a=1,b='zhangzhaobo')
{'a': 1, 'b': 'zhangzhaobo'}
>>> 
>>> dir(f)
['__call__', '__class__', '__closure__', '__code__', '__defaults__', '__delattr__', '__dict__', '__doc__', '__format__', '__get__', '__getattribute__', '__globals__', '__hash__', '__init__', '__module__', '__name__', '__new__', '__reduce__', '__reduce_ex__', '__repr__', '__setattr__', '__sizeof__', '__str__', '__subclasshook__', 'func_closure', 'func_code', 'func_defaults', 'func_dict', 'func_doc', 'func_globals', 'func_name']
>>> 
复制代码
3、 使用map实现试验5.4的内容,并完成两个向量的加法和点积;
>>> a=[1,2,3]
>>> b=[4,5,6]
>>> map(float,a)
[1.0, 2.0, 3.0]
>>> map(float,b)
[4.0, 5.0, 6.0]
>>> b1map(float,b)
Traceback (most recent call last):
  File "<stdin>", line 1, in <module>
NameError: name 'b1map' is not defined
>>> b1=map(float,b)
>>> a1=map(float,a)
>>> map(lambda x,y:x+y,a1,b1)
[5.0, 7.0, 9.0]
>>> map(lambda x,y:x*y,a1,b1)
[4.0, 10.0, 18.0]
>>> reduce(lambda x,y:x+y,map(lambda x,y:x*y,a1,b1))
32.0
复制代码
4、 使用map、open、write,把正弦函数在0--2Pi周期上的横纵坐标存储在一个文本文档中(sint.txt);

>>> import math
>>> def sinx(x):
...     return float(x)/1000,math.sin(float(x)/1000)
... 
>>> file=open('/Users/zhangzhaobo/program/python/sint.txt','w+')
>>> s=map(sinx,range(0,6281))
>>> file.write(str(s))
>>> file.close()
>>> 
复制代码
5、 用函数编程求word字符串的每个ASCII码值(map,ord函数);
>>> s='abcdefg'
>>> map(lambda x:ord(x),s)
[97, 98, 99, 100, 101, 102, 103]
>>> 
复制代码
6、 生成1到10的整数序列,用函数编程求累加和阶乘(range,reduce);
>>> reduce(lambda x,y:x+y,range(1,11))
55
>>> reduce(lambda x,y:x*y,range(1,11))
3628800
>>> 
复制代码
7、 用函数编程求2,100内的素数(reduce),并打印执行过程;

~这个不太会,实在没法用reduce,就这样先写着吧,有大神路过请留下足迹~

>>> ra=range(2,101)
>>> su=map(SuShu,ra)
>>> map(lambda x,y:x*(not y),ra,su)
[2, 3, 0, 5, 0, 7, 0, 0, 0, 11, 0, 13, 0, 0, 0, 17, 0, 19, 0, 0, 0, 23, 0, 0, 0, 0, 0, 29, 0, 31, 0, 0, 0, 0, 0, 37, 0, 0, 0, 41, 0, 43, 0, 0, 0, 47, 0, 0, 0, 0, 0, 53, 0, 0, 0, 0, 0, 59, 0, 61, 0, 0, 0, 0, 0, 67, 0, 0, 0, 71, 0, 73, 0, 0, 0, 0, 0, 79, 0, 0, 0, 83, 0, 0, 0, 0, 0, 89, 0, 0, 0, 0, 0, 0, 0, 97, 0, 0, 0]
>>> 
复制代码

正文之后

Python 是真的很强啊。希望以后有更多机会接触吧!生活不易,我用python

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值