您的位置:首页 > 编程语言 > Python开发

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

2015-05-01 10:49 197 查看
1.字典方法。哪些字典方法可以把两个字典合并到一起?

有个update()方法,不过如果key相同的话,会用后者的key-value覆盖前者的

2.略

3.字典和列表的方法。

(a) 建一个字典,并把字典中的键按照字母顺序显示出来。

(b) 在根据排好的键,显示出这个字典的键和值。

(c)这次按照值排序输出。

# -*- coding: utf-8 -*-
import string

dict = {'a':1,'c':3,'d':4,'b':2}

dict_key=sorted(dict.items(),key = lambda value:value[0])

for i,j in dict_key:
print '%s:%d'%(i,j)

dict_value=sorted(dict.items(),key = lambda value:value[1])

for i ,j in dict_value:
print '%s:%d'%(i,j)


4.建立字典。给定两个长度相同的列表,例如 [1,2,3......], ['abc','def','ghi'.....] ,利用这两个列表的数据建立一个字典,像这样:{1:'abc',2:'def',3:'ghi'......]。

# -*- coding: utf-8 -*-
import string

list1 = [1,2,3,4,5]
list2 = ['a','b','c','d','e']
mydict = {}

mydict = dict(zip(list1,list2))

print mydict


5.略

6.

列表和字典。创建一个简单的股票证券投资数据系统。其中应至少包括4项数据:股市行情显示器符号、所持有的股票、购买价格及当前价位----你可以添加其他数据项,比如收益率,52周最高指数、最低指数,等等。

用户每次输入各列的数据构成一个输出行。每行数据构成一个列表。还有一个总列表,包括了所有行的数据。数据输入完毕后,提示用户选择一列数据项进行排序。把该数据项抽取数来作为字典的键,字典的值就是该键对应行的值得列表。提醒读者:被选择用来排序的数据项必须是非重复的键,否则就会丢失数据,因为字典不允许一个键有多个值



7.颠倒字典中的键和值。用一个字典做输入,输出另一个字典,用前者的键做值,前者的值做键。

# -*- coding: utf-8 -*-
import string

dict1 = {1:'a',2:'b',3:'c'}
mydict = {}

for key in dict1:
mydict.setdefault(dict1[key],key)

print mydict


8.略

9.

翻译。

(a) 编写一个字符串翻译程序(功能类似于Unix中的tr命令)。我们将这个函数叫做tr(),他有三个字符串参数:源字符串、目的字符串、基本字符串,语法定义如下:

[java] view
plaincopy

def tr(srcstr,dststr,string)

srcstr 的内容是你打算“翻译”的字符集合,dsrtr是翻译后得到的字符集合,而string是你打算翻译操作的字符串。举例来说,如果srcstr=='abc',dststr=='mno',string=='abcdef',那么tr()的输出将是‘mnodef’。注意这里len(srcstr)==len(dststr)。在这个练习里你可以使用内建函数chr()和ord(),但他们并不一定时解决这个问题所必不可少的函数。

(b) 在这个函数里增加一个标志参数,来处理不区分大小写的翻译问题。

(c) 修改你的程序,使他们能够处理删除字符的操作。字符串srcstr中不能够映射到字符串dststr中字符的多余字符都将被过滤掉。换句话说,这些字符没有映射到dststr字符串中的任何字符,因此就从函数返回的字符串里被过滤掉了。举例来说:如果srcstr=='abcdef',dststr=='mno',string=='abcdefghi',那么tr()将输出'mnoghi'。注意这里len(srcstr)>=len(dststr)。

# -*- coding: utf-8 -*-
import string

def tr(stcstr,dststr,string,flag):
dict = {}
str = ''
if len(stcstr) == len(dststr):
if flag == 'y':
for i,j in zip(stcstr,dststr):
dict.setdefault(i,j)
for i in string:
if i in dict:
str += dict[i]
else:
str += i

else:
for i,j in zip(stcstr.lower(),dststr):
dict.setdefault(i,j)
for i in string:
if i.lower() in dict:
str += dict[i]
else:
str += i
else :
if flag == 'y':
for i,j in zip(stcstr[:len(dststr)],dststr):
dict.setdefault(i,j)
for i in string:
if i in dict:
str += dict[i]
elif i not in stcstr:
str += i

else:
for i,j in zip(stcstr.lower()[:len(dststr)],dststr):
dict.setdefault(i,j)
for i in string:
if i.lower() in dict:
str += dict[i]
elif i not in stcstr:
str += i
print str

if __name__ == '__main__':
stcstr = raw_input('input stcstr')
dststr = raw_input('input dststr')
string = raw_input('inout string')
print '是否区别大小写?y/n'
flag = raw_input()
tr(stcstr,dststr,string,flag)
10.

加密。

(a) 用上一个练习的思路编写一个”rot13“翻译器。”rot13“是一个古老而又简单的加密算法,它把字母表中的每个字母用其后的第13个字母代替。字母表中前半部分将被映像到后半部分,而后半部分将被映像到前半部分,大小写不变。举例来说,’a‘将被替换为'n',’X‘将被替换为'K';数字和符号不进行翻译。

(b) 在你的解决方案的基础上加上一个应用程序,让他提示用户输入准备加密的字符串(这个算法同时也可以对加密后的字符串进行解密)。
# -*- coding: utf-8 -*-
import string

def tr(string):
str = ''
for i in string:
if i <= 'z':
j = chr((ord(i)+13)%26+ord('a'))
else:
j = chr((ord(i)+13)%26+ord('A'))
str +=j
print str

if __name__ == '__main__':
string = raw_input('ipout string')
tr(string)


11.略

12.略

13.随机数。修改练习5-7的代码,用random中的randint()或者randrange()生成一个随机数集合,从0-9(包括9)中随机选择1到10个随机数,然后组成一个集合A,同理生成B,然后显示A|B 和 A&B。

#-*- coding:utf-8 -*-
#2015-04-06

import random

Aset = set()
Bset = set()
temp = random.randint(1,10)
for i in range(temp):
Aset.add(random.randint(0,9))
temp = random.randint(1,10)
for i in range(temp):
Bset.add(random.randint(0,9))

print Aset | Bset
print Aset & Bset
14.



15.



.
内容来自用户分享和网络整理,不保证内容的准确性,如有侵权内容,可联系管理员处理 点击这里给我发消息
标签: