《python核心编程第二版》第六章练习解析

1.字符串 .string 模块中是否有一种字符串方法或者函数可以帮我鉴定一下一个字符串是否是另一个大字符串的一部分? 

    答案是可以!

   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. 排序
(a) 输入一串数字,从大到小排列之。
(b) 跟 a 一样,不过要用字典序从大到小排列之.。

# -*- 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

4.   算术. 更新上一章里面你的得分测试练习方案,把测试得分放到一个列表中去.你的代码应该可以计算出一个平均分,见练习 2-9 和练习 5-3.

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)

6. 字符串.创建一个 string.strip()的替代函数:接受一个字符串,去掉它前面和后面的空格(如果使用 string.*strip()函数那本练习就没有意义了)

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

8. 列表。给出一个整形值,返回代表该值的英文,比如输入89返回“eight-nine”。附加题:能够返回符合英文语法规则形式,比如输入“89”返回“eighty-nine”。本练习中的值限定在0~1000。

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)更新你的程序,使之可以逆转换。

12.
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
13. 字符串string模块包含三个函数,atoi()、atol()、和atof(),他们分别负责把字符串转换成整形、长整形和浮点型数字。从Python1.5起,Python的内建函数int()、long()、float()也可以做同样的事情了,complex()函数可以把字符串转换成复数(然而1.5之前这些函数只能工作于数字之上)。string模块并没有实现一个atoc()函数,那么你来实现一个atoc(),接受单个字符串做参数输入,一个表示复数的字符串,例如‘-1.23+4-5.6j’,返回相应的复数对象。你不能用eval()函数,但可以用cmplex()函数,而且你只能在如下的限制下使用:complex():complex(real,imag)的real和imag都必须是浮点值。
14.
15.

转换。

(a)给出两个可以识别的日期,比如MM/DD/YY或者DD/MM/YY格式,计算出这两个日期间的天数。

(b)给出一个人的生日,计算出此人出生到现在的天数,包括所有的闰月。

(c)还是上面的例子,计算出此人下次生日还有多少天。

16. 矩阵。处理矩阵M和N的加和乘的操作
 
# -*- 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)

17.
def myPop(alist):
    temp = alist[len(alist)-1]
    del alist[len(alist)-1]
    return temp

18.略

19.

评论 1
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值