正文之前
前两天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、 定义提供缺省值的求和函数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