python核心编程 第六章 字符串,元组,列表 字符串元组只读不可变。列表可变。
range() 、切片
#列表的切片操作
s = 'abcdefg' #列表的切片操作 print s[1:3] #截取i,j-1 print s[::-1] #翻转操作 print s[::2] #隔一个取一个 print s[:-3] #从0到-3,不包括-3 abcd print s[2:-3] #列出2到-3的,不包括-3 cd print s[-2:-4] #为空
#正负索引的区别在于正索引以序列
#的开始为起点,负索引以序列的结束为起点
#正序 0 1 2 3 4 5 6
#反序-7-6-5-4-3-2-1
print range(1,5) #从1到5不包括5 print range(1,5,2) #从1到5不包括5 间隔2 print range(5) #从0到5不包括5 print range(6,1,-1) #正序的从6到1不包括1=倒序的从2到7不包括7 #或者理解为,1234567,-1从后面开始,从6到1不包括1 -1代表最终从大到小 print range(-1,-3) print range(-1,-6,-1) #-6 -5 -4 -3 -2 -1 从-1开始到-6,不包括-6 for i in [None] + range(-1, -len(s), -1): print i print s[:i] for i in range(6, 0, -1): print i #6,5,4,3,2,1 从6到0,不包括0,从后面开始
join(),split(),enumerate
s = 'abcdef' for i ,t in enumerate(s): #输出序列号,遍历字符串 print i,t for i in s: #遍历字符串 print i s = 'wyt is beautiful' t = ':'.join(s.split()) print t
#字符串是不可变的,不能单独修改它某个值
#比如s[3]=C error s=s[:2]+'C'+s[3:]
'---------------------列表---------------------------'
#列表可以添加或减少元素
#元组类型在很多操作上都跟列表一样,许多用在列表上的例子在元组上照样能跑,我们有一
#节内容专门讲解元组类型.它们的主要不同在于元组是不可变的,或者说是只读的,所以那些用
#于更新列表的操作,比如用切片操作来更新一部分元素的操作,就不能用于元组类型.
#更新列表用append()方法,删除remove()
#列表元素可以是任意类型,比如列表
#列表解析
print [i * 2 for i in [8,-2,5]] print [i for i in range(8) if i % 2 == 0] s = ['they','stamp','them'] for t in reversed(s): print t, print sorted(s)
#元组是不可变类型()
#元组包含的可变对象是可变的
('xyx',)#单元素元组
list() #将元组或者列表转变成列表
列表元素变为字符串
#encoding=utf-8
# 6–1. 字符串.string 模块中是否有一种字符串方法或者函数可以帮我鉴定一下一个字符串
# 是否是另一个大字符串的一部分?
string = 'what a nice day' str = 'a' print string.count(str,0,30) #返回str在string中出现的次数,0-30是范围 print string.find(str) print string.index(str) #如果str不在string中报异常
# 6–3. 排序
# (a) 输入一串数字,从大到小排列之.
# (b) 跟 a 一样,不过要用字典序从大到小排列
# 6–8. 列表.给出一个整数值,返回代表该值的英文,比如输入 89 返回"eight-nine"。附加题:
# 能够返回符合英文语法规则的形式,比如输入“89”返回“eighty-nine”。本练习中的值限定在家 0
# 到 1,000.
num = str(raw_input()) l = len(num) list = ['zero','one','two','three','four','five','six','seven','eight','nine'] list2 = ['ten','eleven','twelve','thirteen','fourteen','fifteen','sixteen','seventeen','eighteen','nineteen'] list3 = ['twenty','thirty','forty','fifty','sixty','seventy','eighty','ninety'] s = [] s2 = [] for i,j in enumerate(num): j = int(j) s.append(list[j]) if l == 4: print 'one thousand' elif l == 3: #后两位11-19 if num[1] == '1': k = int(num[2]) print '%s hundred and %s' % (s[0],list2[k]) elif int(num[1]) > 1: #后两位20-99 k = int(num[1]) print '%s hundred and %s-%s'%(s[0],list3[k-2],s[2]) if num[1] == '0': if num[2] == '0': #后两位00 print '%s hurdred' % s[0] else: #后两位0x print '%s hurdred and %s' % (s[0],s[2]) elif l == 2: #10-19 20-99 if num[0] == '1': k = int(num[1]) print list2[k] else: k = int(num[0]) print '%s-%s'%(list3[k-2],s[1]) else: print s[0]
# 6–10.字符串.写一个函数,返回一个跟输入字符串相似的字符串,要求字符串的大小写反转.
# 比如,输入"Mr.Ed",应该返回"mR.eD"作为输出.
str = raw_input('input string:') s = [] for i in str: if i.isupper(): i = i.lower() s.append(i) elif i.islower(): i = i.upper() s.append(i) else: s.append(i) str = ('').join(s) #以‘’作为分隔符,将s中元素拼接成一个字符串 print str
# # ord()#求ASCII码,A-Z:65-106 a-z:97-122
# # chr()#由ascii求字母
# 6–14.随机数.设计一个"石头,剪子,布"游戏,有时又叫"Rochambeau",你小时候可能玩过,下面
# 是规则.你和你的对手,在同一时间做出特定的手势,必须是下面一种手势:石头,剪子,布.胜利者从
# 下面的规则中产生,这个规则本身是个悖论.
# (a) the paper covers the rock,
# 布包石头.
# (b)石头砸剪子,
# (c)剪子剪破布.在你的计算机版本中,用户输入她/他的选项,计算机找一个随机选项,然后由你
# 的程序来决定一个胜利者或者平手.注意:最好的算法是尽量少的使用 if 语句
from __future__ import unicode_literals #运行时中文编码正确 import random A = random.randint(1,3) B = random.randint(1,3) list = ['','石头','剪刀','布'] print 'A is %s,B is %s' % (list[A],list[B]) if A == B: print '平局' #pytrhon 布尔比较 and or not elif (A == 1 and B == 2) or (A == 2 and B == 3) or (A == 3 and B == 1): print 'A is win' else: print 'B is win'
# 6–16.矩阵.处理矩阵 M 和 N 的加和乘操作
#计算一行乘一列的和 import random s1 = [1,2,3] s2 = [1,2,3] def M(s1,s2): s3 = 0 for i in range(0,3): s3 += s1[i]*s2[i] return s3 M(s1,s2) #随机数产生原始矩阵 s =[] s2 = [] for i in range(0,9): s.append(random.randint(1,10)) s2.append(random.randint(1,10)) # s = [1,2,3,4,5,6,7,8,9] # s2 = [1,2,3,4,5,6,7,8,9] s3 = [] si = [] sj = [] #求和 for i in range(0,9): s3.append(s[i]+s2[i]) print s3 #分行 for i in range(0,3): #print s[3*i:3*i+3] si.append(s[3*i:3*i+3]) print si #分列 for i in range(0,3): #print s2[i::3] sj.append(s2[i::3]) print sj S = [] for i in range(0,3): for j in range(0,3): # print si[i] # print sj[j] M(si[i],sj[j]) S.append(M(si[i],sj[j])) print S #打印M print 'M is' for i in range(0,3): print s[3*i:3*i+3] #打印和 print 'N is' for i in range(0,3): print s2[3*i:3*i+3] #打印和 print 'M+N is' for i in range(0,3): print s3[3*i:3*i+3] #打印乘 print 'M*N is' for i in range(0,3): print S[3*i:3*i+3]