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

Python 核心编程第七章练习题

2016-10-27 14:25 295 查看
7–1. 字典方法。哪个字典方法可以用来把两个字典合并到一起? update

def updateDict():
dict1 = {'name': 'John', 'Age': 20}
dict2 = {'address': 'Beijing road'}
dict1.update(dict2)
print(dict1)


7–3. 字典和列表的方法。

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

def sortDict():
dict1 = {'name': 'John', 'age': 20}
print(sorted(dict1))


(b) 现在根据已按照字母顺序排序好的键,显示出这个字典中的键和值。

def sortDict():
dict1 = {'name': 'John', 'age': 20}
sort_dict1 = sorted(dict1.items(), key = lambda dict1:dict1[0])
print(sort_dict1)


(c)同(b),但这次是根据已按照字母顺序排序好的字典的值,显示出这个字典中的键和值。(注

意:对字典和哈希表来说,这样做一般没有什么实际意义,因为大多数访问和排序(如果需要)都是

基于字典的键,这里只把它作为一个练习。)

def sortDict():
dict1 = {'name': 'John', 'age': '20', 'num': '10'}
value_sort_dict1 = sorted(dict1.items(), key = lambda dict1:dict1[1])
print(value_sort_dict1)


7-4. 建立字典。给定两个长度相同的列表,比如说,列表[1, 2, 3,...]和['abc', 'def','ghi',...],用这两个列表里的所有数据组成一个字典,像这样:{1:'abc', 2: 'def', 3: 'ghi',...}

def listToDict():
list1 = [1, 2, 3]
list2 = ['abc', 'def','ghi']
dict1 = dict(zip(list1,list2))
print(dict1)


7–5. userpw2.py. 下面的问题和例题7.1 中管理名字-密码的键值对数据的程序有关。

(a)修改那个脚本,使它能记录用户上次的登录日期和时间(用time 模块),并与用户密码一起

保存起来。程序的界面有要求用户输入用户名和密码的提示。无论户名是否成功登录,都应有提示,

在户名成功登录后,应更新相应用户的上次登录时间戳。如果本次登录与上次登录在时间上相差不

超过4 个小时,则通知该用户: “You already logged in at: <last_ login_timestamp>.”

(b) 添加一个“管理”菜单,其中有以下两项:(1)删除一个用户 (2)显示系统中所有用户的名

字和他们的密码的清单。

(c) 口令目前没有加密。请添加一段对口令加密的代码(请参考crypt, rotor, 或其它加密模块)

(d) 为程序添加图形界面,例如,用Tkinter 写。

(e) 要求用户名不区分大小写。

(f) 加强对用户名的限制,不允许符号和空白符。

(g)合并“新用户”和“老用户”两个选项。如果一个新用户试图用一个不存在的用户名登录,

询问该用户是否是新用户,如果回答是肯定的,就创建该帐户。否则,按照老用户的方式登录。

7-6. 列表和字典。创建一个简单的股票证券投资数据系统。其中应至少包含四项数据:股市

行情显示器符号,所持有的股票,购买价格及当前价位 - 你可以随意添加其他数据项,比如收益率,

52 周最高指数、最低指数,等等。

用户每次输入各列的数据构成一个输出行。每行数据构成一个列表。还有一个总列表,包括了

所有行的数据。数据输入完毕后,提示用户选择一列数据项进行排序。把该数据项抽取出来作为字

典的键,字典的值就是该键对应行的值的列表。提醒读者:被选择用来排序的数据项必须是非重复

的键,否则就会丢失数据,因为字典不允许一个键有多个值。

你还可以选择其他计算输出,比如,盈亏比率,目前证券资产价值等。

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

def keyToValue():
d1 = {'name': 'John', 'age': 20, 'num': 10}
d2 = {}
for key in d1:
v = d1.get(key)
d2[v] = key
print(d2)


7-8. 人力资源。创建一个简单的雇员姓名和编号的程序。让用户输入一组雇员姓名和编号。

你的程序可以提供按照姓名排序输出的功能,雇员姓名显示在前面,后面是对应的雇员编号。附加

题:添加一项功能,按照雇员编号的顺序输出数据。

def systemHR():
print('please input the 3 employee name and number:')
i = 0
name = []
number = []
while i < 3:
na,no = str(input()).split()
name.append(na)
number.append(int(no))
i += 1
#print(name)
dictHR = dict(zip(name,number))
sortName = sorted(dictHR)
print('the result is :')
for i in sortName:
print('%s %s' %(i, dictHR[i]))


7-9. 翻译

(a) 编写一个字符翻译程序(功能类似于Unix 中的tr 命令)。我们将这个函数叫做tr(),它有

三个字符串做参数: 源字符串、目的字符串、基本字符串,语法定义如下:

def tr(srcstr, dststr, string)

srcstr 的内容是你打算“翻译”的字符集合,dsrstr 是翻译后得到的字符集合,而string 是

你打算进行翻译操作的字符串。举例来说,如果srcstr == 'abc', dststr == 'mno', string ==

'abcdef', 那么tr()的输出将是'mnodef'. 注意这里len(srcstr) == len(dststr).

在这个练习里,你可以使用内建函数chr() 和 ord(), 但它们并不一定是解决这个问题所必不

可少的函数。

def tr(srcstr, dststr, string):
count = string.count(srcstr)
print(count)
if count > 0:
for i in range(1,count+1):
id = string.index(srcstr)
le = len(srcstr)
string = string[:id]+ dststr + string[id+le:]
print(string)


或者用 replace 方法:

def tr(srcstr, dststr, string):
count = string.count(srcstr)
print(count)
if count > 0:
string = string.replace(srcstr,dststr)
print(string)
else:
print(string)

tr('mor','eve','good morning morning')


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

def tr(srcstr, dststr, string, case = 1):
if case == 1:
count = string.count(srcstr)
print(count)
if count > 0:
string = string.replace(srcstr,dststr)
print(string)
else:
print(string)

else:
srcstr = srcstr.lower()
string = string.lower()
count = string.count(srcstr)
print(count)
if count > 0:
string = string.replace(srcstr,dststr)
print(string)
else:
print(string)

tr('mor','eve','good morning Morning',0)


(c)修改你的程序,使它能够处理删除字符的操作。字符串srcstr 中不能够映射到字符串dststr

中字符的多余字符都将被过滤掉。换句话说,这些字符没有映射到dststr 字符串中的任何字符,因

此就从函数返回的字符里被过滤掉了。举例来说:如果 srcstr == 'abcdef', dststr == 'mno',

string == 'abcdefghi', 那么tr()将输出'mnoghi'. 注意这里len(srcstr) >= len(dststr).

def tre(srcstr, dststr, string):
count = string.count(srcstr)
print(count)
if count > 0:
string = string.replace(srcstr,dststr)
print(string)
else:
print(string)

tre('morning','eve','good morning morning')


7–10. 加密。

(a) 用上一个练习的思路编写一个"rot13"翻译器。"rot13"是一个古老而又简单的加密方法,

它把字母表中的每个字母用其后的第13 个字母来代替。字母表中前半部分字母将被映射到后半部分,

而后半部分字母将被映射到前半部分,大小写保持不变。举例来说,'a'将被替换为'n','X'将被替

换为'K'; 数字和符号不进行翻译。

(b)在你的解决方案的基础上加一个应用程序,让它提示用户输入准备加密的字符串(这个算法

同时也可以对加密后的字符串进行解密),如下所示:

% rot13.py

Enter string to rot13: This is a short sentence. Your string to en/decrypt was: [This

is a short sentence.].

The rot13 string is: [Guvf vf n fubeg fragrapr.].

%

% rot13.py

Enter string to rot13: Guvf vf n fubeg fragrapr. Your string to en/decrypt was: [Guvf

vf n fubeg fragrapr.].

The rot13 string is: [This is a short sentence.].

def rot13(string):
'''''
将一个字符串变为rot13加密
'''
lens=len(string)
newstring=''
for i in range(0,lens):
if 64<ord(string[i])<78 or 96<ord(string[i])<110:
newstring=newstring+chr(ord(string[i])+13)
elif 91>ord(string[i])>77 or 123>ord(string[i])>109:
newstring=newstring+chr(ord(string[i])-13)
else:
newstring=newstring+string[i]
print(newstring)

rot13('Guvf vf n fubeg fragrapr')
内容来自用户分享和网络整理,不保证内容的准确性,如有侵权内容,可联系管理员处理 点击这里给我发消息
标签:  python