6.1序列
6.1.2序列类型操作符
1.成员关系操作符:in、not in
2.连接操作符 +
3.重复操作符 *
4.切片操作符[] [:] [;;]
5.步长索引[::1]
6.切片索引
>>> s = 'abcde'
>>> i = -1
>>> for i in range(-1, -len(s), -1)
...print s[:i]
...
abcd
abc
ab
a
>>> s = 'abcde'
>>> for i in [None] + range(-1,-len(s),-1):
...print s[i]
...
abcde
6.1.3内建函数
1.类型转换
list(iter)
str(iter)
unicode(obj)
basestring()
tuple(iter)
2.可操作
len(seq)
max(iter,key = none)
min(iter, key = none)
reversed(seq)逆序访问
sort()有序
6.2字符串
6.3字符串和操作符
1.提示:把重复操作作为参数 放到循环里面非常低效如:
while i < len(my string):
print 'character %d is:', myString[i]
2.连接符+
3.字符串连接符
字符串分成几部分来写可以用 ' ',而不用加反斜杠
6.4只适用字符串的操作符
1.格式化操作符
6.5 内建函数
cmp
>>>str1 = 'abc'
>>>str2 = 'lmn'
>>>cmp(str1, str2)
-11
6.6字符串内建函数
6.11列表
列表元素算法比较
1.对两个列表的元素进行比较
2元素是同类型的,则比较其值返回结果
3.元素不同类型,则 检查它们是否是数字
1.如果是数字,执行 必要的数字强制转换, 然后比较
2. 一方是数字,另一方元素大,(数字是最小的)
4.长一的列表大
5.用尽两个列表的元素,且都相等,则返回0
6.16元组
元组本身不 可变,但这并不意味着元组包含的可变对象也不可变了。
默认集合类型
6.22 练习
6-1字符串.string 模块中是否有一种字符串方法或者函数可以帮我鉴定一下一个字符串是否是另一个大字符串的一部分?
# -*-coding:utf-8 -*-
str1 = "I love python, I will learn it!"
str2 = raw_input("input some words")
# index函数也可以
if str1.find(str2) != -1:
print "I get it!"
else:
print "sorry,I don't find it."
if str1.count(str2) != 0:
print "I also get it."
else:
print "I don't find it."
6-2 字符串标识符.修改例6-1 的idcheck.py 脚本,使之可以检测长度为一的标识符,并且可以识别Python 关键字,对后一个要求,你可以使用keyword 模块(特别是keyword.kelist)来帮你.
# -*-coding:utf-8 -*-
import string
import keyword
alphas = string.letters + '_'
nums = string.digits
print 'Welcome to the Identifier Checker v1.0'
print 'Testees must be at least 1 chars long.'
myInput = raw_input('Identifier to test?')
if len(myInput) >=1:
if myInput in keyword.kwlist:
print "这是关键词!"
else:
if myInput[0] not in alphas:
print '''invalid: first symbol must be alphabetic'''
else:
for otherChar in myInput[1:]:
if otherChar not in alphas + nums:
print '''invalid: remaining
symbols must be alphabetic'''
berak
else:
print "okay as an identifierh"
6-3
6–3. 排序
(a) 输入一串数字,从大到小排列之.
(b) 跟a 一样,不过要用字典序从大到小排列之.
a 和 b的主要区别在于,a要先int,给出数据类型,再按大小排序
a1.
# -*-coding:utf-8 -*-
num = []
numstr = raw_input("分开输入一串数字")
num = numstr.split(' ')
L = len(num)
for i in range(0,L):
for j in range(0,L-1 ):
if int(num[j]) < int(num[j+1]):
num[j],num[j+1] = num[j+1],num[j]
print num
a2.
# -*-coding:utf-8 -*-
def new_sort(nums):
numlist = []
for i in nums.split(' '):
numlist.append(int(i))
numlist.sort()
numlist.reverse()
return numlist
numstr = raw_input("分开输入一串数字")
print new_sort(numstr)
b.
# -*-coding:utf-8 -*-
def new_sort(nums):
numlist = []
numlist = nums.split(' ')
numlist.sort()
numlist.reverse()
return numlist
numstr = raw_input("分开输入一串数字")
print new_sort(numstr)
6-5
b.
def compare(str1,str2):
if len(str1) != len(str2):
print "not equal"
else:
for i in range (0, len(str1)):
if str1[i] != str2[i]:
print "not equal"
break
else:
print "equal"
str1 = raw_input("Enter a string")
str2 = raw_input("Enter another string")
compare(str1,str2)
c.
# -*-coding:utf-8 -*-
str = raw_input("Enter a string")
l = len(str)
if l % 2 == 0:
for i in range(l/2):
if str[i]!=str[l-1-i]:
print "not repeat"
break
else:
print "repeat"
elif l % 2 != 0:
for i in range(l/2):
if str[i]!=str[l-i-1]:
print "not repeat"
break
else:
print "repeat"
d.
# -*-coding:utf-8 -*-
# join连接的是两个字符串的内容,要加一个括号,变成一个参数
def make_palindrome(str):
str_new = "".join((str,str[::-1]))
print str_new
str = raw_input("Enter a string")
make_palindrome(str)
6-6
字符串.创建一个string.strip()的替代函数:接受一个字符串,去掉它前面和后面的空格(如果使用string.*strip()函数那本练习就没有意义了)
# -*-coding:utf-8 -*-
def str_strip(str):
i = 0
j = len(str)-1
while 1:
if str[i] == ' ':
i+=1
else:
break
while 1:
if str[j] == ' ':
j-=1
else:
break
return str[i:j+1]
str =raw_input("Enter a string")
print str_strip(str)
6-7 调试.看一下在例 6.5 中给出的代码(buggy.py)
(a)研究这段代码并描述这段代码想做什么.在所有的(#)处都要填写你的注释.
(b)这个程序有一个很大的问题,比如输入 6,12,20,30,等它会死掉,实际上它不能处理任何的偶数,找出原因.
(c)修正(b)中提出的问题.
# -*-coding:utf-8 -*-
num_str = raw_input('Enter a number:')
#把输入的数字变成整型
num_num = int(num_str)
#规定列表范围
fac_list = range(1, num_num+1)
print "BEFORE:", fac_list
#全局变量
i = 0
#循环到num_num -1 结束
while i < len(fac_list):
#判断能否整除,去除列表所有能被它整除的因子
if num_num % fac_list[i] ==0:
del fac_list[i]
else:
# 判断下一个元素
i = i+1
#输出删除后的列表
print "AFTER:", fac_list
6-8列表.给出一个整数值,返回代表该值的英文,比如输入89 返回"eight-nine"。附加题:能够返回符合英文语法规则的形式,比如输入“89”返回“eighty-nine”。本练习中的值限定在家0到1,000.
# -*-coding:utf-8 -*-
def one_num(num):
return list1[num]
def two_num(num):
if num_str[0] =='1':
return list2[int(num_str[1])]
else:
return "-".join((list3[int(num_str[0])-2],list1[int(num_str[1])]))
def three_num(num):
# 1是字符,要加引号
if num_str[1]=='1':
temp = list2[int(num_str[1])]
elif num_str[1] == '0':
temp = list1[int(num_str[0])]
else:
temp = "-".join((list3[int(num_str[0])-2],list1[int(num_str[1])]))
return list1[int(num_str[0])] + ' ' + 'hunderd' + ' ' + temp
def four_num(num):
return "one thousand"
# 字符要加引号
list1 = ['zero','one','two','three','four','five','six','seven','eight','nine']
list2 = ['ten', 'eleven', 'tweleve', 'thirteen','fourteen', 'fifteen','sixteen', 'seventeen','eighteen','nineteen']
list3 = ['twenty', 'thirty', 'forty', 'fifty','sixty', 'seventy','eighty','ninty']
num_str = raw_input("Please enter a num 0-1000:")
num = int(num_str)
l = len(num_str)
if l == 1:
print one_num(num)
if l == 2:
print two_num(num)
if l ==3:
print three_num(num)
if l == 4:
print four_num(num)
妈蛋,没保存,我、、、、
写下思路吧
6-9
用%,/
6-10
用string.swapcase()函数
6-12
a. for in range in(0,len(string):
if string[i] =char:
b.
if string[-1-i] = char:
return len(string)-1-i
c.
if string[i]= originchar:
string[:i]+newchar+string[i+1:-1]
6-13
#这题逆序查找目的是防止第一个字符为符号
for i in range(0,len(string):
if string[-1-i]=='+' or '-'
op1 =string[:-1-i]
op2 =string[-1-i:-1]
complex(float(op1),float(op2))
6-14
print 规则
i =int(raw_input))
j = random.randint(0,2)
list=[]
if i - j <
6-15
a. 用datetime
days_count = abs(day1-day2)
#需要转换日期格式
date_input = date_input.split('/')
month = int(date_input[0])
...
b.
days_count = abs(datetime.date.today - day1)
c.
# -*-coding:utf-8 -*-
import datetime
import time
def converdate(date_input):
date_input = date_input.split('/')
month = int(date_input[0])
day = int(date_input[1])
year = int(date_input[2])
return year, month, day
date1 = raw_input('Enter your birthday like "MM/DD/YY":')
next_year = int(time.strftime('%Y',time.localtime(time.time())))+1
#如果今年生日没过就是错的
next_birthday = datetime.date(next_year,converdate(date1)[1],converdate(date1)[2])
days_count = next_birthday - datetime.date.today()
print days_count.days
6-16
a.
# -*-coding:utf-8 -*-
def add(list1,list2):
row = len(list1)
col = len(list1[0])
for i in range(row):
for j in range(col):
#错误的写法 list3=list1[i,j]+list2[i,j]
list1[i][j]=list1[i][j]+list2[i][j]
return list1
list1 = [[1,2,3,4],[5,6,7,8],[9,10,11,12]]
list2 = [[13,14,15,16],[17,18,19,20],[21,22,23,24]]
print add(list1,list2)
b.
6-17
# -*-coding:utf-8 -*-
def myPop(list):
list = list[:-1]
list_del = list[-1]
print list
print list_del
list = raw_input('please enter a list')
myPop(list)
6-18
元组
6-19