答案是可以!
string模块中find内建函数,string.find(str,beg=0,end=len(str)),在beg和end之间查找str字符串。
string模块中rfind内建函数,string.rfind(str,beg=0,end=len(str)),类似于find()函数,不过是从右边开始查找。
string模块中index内建函数,string.index(str,beg=0,end=len(str)),类似于find()函数,不过查找不存在会返回一个异常。
string模块中rindex内建函数,string.rindex(str,beg=0,end=len(str)),类似于index()函数,不过是从右边开始查找。
index和find函数的相同之处在于,包含要寻找的字符串时,均返回索引,区别在于,找不到要寻找的字符串时,index函数返回一个异常,find函数返回-1.
2.字符串标识符.修改例 6-1 的 idcheck.py 脚本,使之可以检测长度为一的标识符,并且可以识别 Python 关键字,对后一个要求,你可以使用 keyword 模块(特别是 keyword.kelist)来辅助
# -*- coding: utf-8 -*-
import string
import keyword
alphas = string.letters + '_'
nums = string.digits
keywords = keyword.kwlist
print 'welcome to the identifier checker v1.0'
print 'testees must be at least 2 chars long'
myinput = raw_input('identifier to test ? ')
if myinput in keywords:
print 'okay as an keyword'
else:
alphasnums = alphas + nums
if len(myinput) == 1:
if myinput in alphasnums:
print 'okay as an identifier'
else:
print 'invaild: remaining symbols must be alphanumeric '
else:
if myinput[0] not in alphas:
print '''invaild: first symbol must be
alphabetic'''
else:
for otherchar in myinput[1:]:
if otherchar not in alphasnums:
print '''invaild: remaining
symbols must be alphanumeric '''
break
else:
print 'okay as an identifier'
3.
排序
# -*- coding: utf-8 -*-
import string
num1 = []
num2 = []
num = raw_input()
for i in num:
num1.append(int(i))
num2.append(i)
num1.sort()
num1.reverse()
num2.sort()
num2.reverse()
print num1
print num2
略
5.字符串
(a)更新你在练习 2-7 里面的方案,使之可以每次向前向后都显示一个字符串的一个字符.
(b)通过扫描来判断两个字符串是否匹配(不能使用比较操作符或者 cmp()内建函数)。附加题:在你的方案里加入大小写区分。
(c)判断一个字符串是否重现(后面跟前面的一致).附加题:在处理除了严格的回文之外,加入对例如控制符号和空格的支持。
#-*- coding:utf-8 -*-
#2015-03-12
astring = raw_input()
for i in astring: #从前向后遍历
print i,
for i in astring[::-1]: #从后向前遍历
print i,
# -*- coding: utf-8 -*-
import string
str1 = raw_input()
str2 = raw_input()
for i,j in zip(str1,str2):
if i is not j:
print 'no'
break
else:
print 'yse'
# -*- coding: utf-8 -*-
import string
def huiwen(str):
if len(str)%2!=0:
print 'It is not a palindorom.'
else:
if cmp(str, str[::-1])==0:
print 'It is a palindorom.'
else:
print 'It is not a palindorom.'
if __name__=='__main__':
str = raw_input()
huiwen(str)
略
7.调试。看一下在例 6.5 中给出的代码(buggy.py)
(a)研究这段代码并描述这段代码想做什么,在所有的(#)处都要填写你的注释。
(b)这个程序有一个很大的问题,比如输入 6,12,20,30,等它会死掉,实际上它不能处理任何的偶数,找出原因。
(c)修正(b)中提出的问题.。
# -*- coding: utf-8 -*-
import string
# 输入
num_str = raw_input('enter a number')
# 转换为数字
num_num = int(num_str)
#生成列表
list = range(1,num_num+1)
print "BEFORE:",list
#初始化
i = 0
#循环
while i < len(list):
if num_num % list[i] ==0:
del list[i]
i=i-1
#计数器+1
i = i + 1
#输出
print "AFTER:",list
略
9.转换。为练习5-13写一个姊妹函数,接受分钟数,返回小时数和分钟数。总时间不变,并且要求小时数尽可能大。
n = int(raw_input('输入分钟数:'))
hour = n / 60
min = n % 60
print '%d : %d' % (hour, min)
10.字符串。写一个函数,返回一个跟输入字符串相似的字符串,要求字符串的大小写翻转。比如,输入“Mr.Ed”,应该返回“mR.eD”作为输出。
# -*- coding: utf-8 -*-
import string
from string import swapcase
str = raw_input()
print swapcase(str)
11.
转换。
(a)创建一个从整形到IP地址的转换程序,如下格式:WWW.XXX.YYY.ZZZ
(b)更新你的程序,使之可以逆转换。
def findchar(mystring,char):
for i,j in enumerate(mystring):
if j==char:
return i
else:
return -1
def rfindchar(mystring,char):
mystring = mystring[::-1]
for i,j in enumerate(mystring):
if j==char:
return len(mystring)-i-1
else:
return -1
def subchar(mystring,origchar,newchar):
newstring=''
for i in mystring:
if i!=origchar:
newstring += i
else:
newstring += newchar
return newstring
转换。
(a)给出两个可以识别的日期,比如MM/DD/YY或者DD/MM/YY格式,计算出这两个日期间的天数。
(b)给出一个人的生日,计算出此人出生到现在的天数,包括所有的闰月。
(c)还是上面的例子,计算出此人下次生日还有多少天。
# -*- coding: utf-8 -*-
import string
def sum(alist,blist):
sumlist = []
m = len(alist)
n = len(alist[0])
for i in range(m):
tmp = []
for j in range(n):
tmp.append(alist[i][j]+blist[i][j])
sumlist.append(tmp)
return sumlist
def matrix(alist,blist):
malist = [[0]*len(blist[0]) for i in range(len(alist))]
m = len(alist)
n = len(blist[0])
k = len(blist)
for i in range(m):
for j in range(n):
for k in range(k):
malist[i][j] += alist[i][k] * blist[k][j]
return malist
if __name__ == '__main__':
aalist = []
bblist = []
m = input()
n = input()
for i in range(m):
text = raw_input()
text = text.split()
aalist[i].append(text)
m = input()
n = input()
for i in range(m):
text = raw_input()
text = text.split()
bblist[i].append(text)
if (len(aalist)!=len(bblist)) or (len(aalist[0])!=len(bblist[0])):
print '行或列不等,无法相加'
else:
print sum(aalist,bblist)
if (len(bblist)!=len(aalist[0])):
print '行与列不等,无法相乘'
else:
print matrix(aalist, bblist)
def myPop(alist):
temp = alist[len(alist)-1]
del alist[len(alist)-1]
return temp
18.略
19.
略