《python核心编程第二版第七章习题补充》

来源:互联网 发布:linux虚拟主机销售系统 编辑:程序博客网 时间:2024/05/19 02:23

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

# -*- coding:utf-8 -*-string1 = raw_input("please input a string you want to change: ") str1 = ''for i in string1:if i.isalnum():print ord(i)if  ord(i)>=65 and ord(i)<78:print '+'str1 = str1 + chr(ord(i)+13)if  ord(i)>=78 and ord(i)<90:print '-'str1 = str1 + chr(ord(i)-13)if  ord(i)>=97 and ord(i)<110:print '*'str1 = str1 + chr(ord(i)+13)if  ord(i)>=100 and ord(i) <=122:print '/'str1 = str1 + chr(ord(i)-13)else:str1 = str1 + iprint str1


(b)在你的解决方案的基础上加一个应用程序,让它提示用户输入准备加密的字符串(这个算法 同时也可以对加密后的字符串进行解密),如下所示:

# -*- coding:utf-8 -*-string1 = raw_input("please input a string you want to change: ") str1 = ''for i in string1:if i.isalnum():print ord(i)if  ord(i)>=65 and ord(i)<78:str1 = str1 + chr(ord(i)+13)if  ord(i)>=78 and ord(i)<90:str1 = str1 + chr(ord(i)-13)if  ord(i)>=97 and ord(i)<110:str1 = str1 + chr(ord(i)+13)if  ord(i)>=100 and ord(i) <=122:str1 = str1 + chr(ord(i)-13)else:str1 = str1 + iprint "the string you changed is :",str1

7–11.   定义。什么组成字典中合法的键? 举例说明字典中合法的键和非法的键。

字典中的键必须是可哈希的

7-12.   定义。 (a)在数学上,什么是集合?

数学上, 把 set 称做由不同的元素组成的集合,集合(set)的成员通常被称做集合元素

(b)在 Python 中,关于集合类型的定义是什么?

集合对象是一组无序排列的可哈希的值。 是的,集合成员可以做字典中的键。


7–13.   随机数。修改练习 5-17 的代码:使用 random 模块中的 randint()或 randrange()方 法生成一个随机数集合:从0到9(包括9)中随机选择,生成1到10个随机数。这些数字组成集合 A(A 可以是可变集合,也可以不是)。同理,按此方法生成集合 B。每次新生成集合 A 和 B 后,显示 结果 A | B 和 A & B 

# -*- coding:utf-8 -*-import randomnumList1 = []numAll = int(raw_input("please input a number you want to get: "))num1 = 0while num1 < numAll:number = random.randint(0,9)numList1.append(number)num1 = num1 + 1s1 = set(numList1)numAnother = int(raw_input("please input another number you want to get: "))num2 = 0numList2 = []while num2 < numAnother:number = random.randint(0,9)numList2.append(number)num2 = num2 + 1s2 = set(numList2)print s1,s2,s1|s2,s1&s2

7–14.   用户验证。修改前面的练习,要求用户输入 A | B 和 A & B 的结果,并告诉用户他(或 她)的答案是否正确,而不是将 A | B 和 A & B 的结果直接显示出来。如果用户回答错误,允许他(或 她)修改解决方案,然后重新验证用户输入的答案。如果用户三次提交的答案均不正确,程序将显示 正确结果。

# -*- coding:utf-8 -*-import randomnumList1 = []numAll = int(raw_input("please input a number you want to get: "))num1 = 0while num1 < numAll:number = random.randint(0,9)numList1.append(str(number))num1 = num1 + 1s1 = set(numList1)numAnother = int(raw_input("please input another number you want to get: "))num2 = 0numList2 = []while num2 < numAnother:number = random.randint(0,9)numList2.append(str(number))num2 = num2 + 1s2 = set(numList2)s3 = s1|s2s4 = s1&s2numYouInput = 0flag = 0while numYouInput < 3:s5 = set((raw_input("please input the | set:").split(' ')))if s5 == s3:flag = 1print s3,'you are right'breakelse:print "wrong answer,please try again: "numYouInput = numYouInput + 1if flag == 0:print s3

附加题:运用你关于集合的知识,创建某个集合的潜在子集,并询问用户此潜在子集是否真是 该集合的子集,要求和主程序一样有显示更正和答案的功能。

# -*- coding:utf-8 -*-import randomnumList1 = []numAll = int(raw_input("please input a number you want to get: "))num1 = 0while num1 < numAll:number = random.randint(0,9)numList1.append(str(number))num1 = num1 + 1s1 = set(numList1)numAnother = int(raw_input("please input another number you want to get: "))num2 = 0numList2 = []while num2 < numAnother:number = random.randint(0,9)numList2.append(str(number))num2 = num2 + 1s2 = set(numList2)print s1,s2if s2.issubset(s1) or s1.issubset(s2):print "true"else:print "wrong"
7–15.   编写计算器。 这个练习取材于 http://math.hws.edu/ 在线免费 Java 教材中的练习 12.2。编写一个程序允许用户选择两个集合:A 和 B, 及运算操作符。例如,in, not in, &, |, ^, <, <=, >, >=, ==, !=, 等. (你自己定义集合的输入语法,它们并不一定要像Java示例中那样用方括 号括住。)解析输入的字符串,按照用户选择的运算进行操作。你写的程序代码应该比 Java 版本的 该程序更简洁。  
# -*- coding:utf-8 -*-set1 = set(raw_input("please input a string: "))set2 = set(raw_input("please input another string: "))symbol = raw_input("please input the operator symbol: ")if symbol == 'in':print set2 in set1if symbol == 'not in':print set2 not in set1if symbol == '&':print set2 & set1if symbol == '|':print set1|set2if symbol == '^':print set1^set2if symbol == '<':print set1<set2if symbol == '<=':print set1<=set2if symbol == '>':print set1>set2if symbol == '==':print set1==set2if symbol == '!=':print set1!=set2

原创粉丝点击