python核心编程第七章答案 7.10—7.15

初学python 不足之处请指正


7.10
写了加密解密字典,加密解密函数,然后发现其实不用,加密字典和解密字典是一样的~那么我们的解密字典也变成无用功了
贴出代码以警惕世人,写代码之前的分析是必要的
#!/usr/bin/env python
#Filename: rot13.py
import string
string1 = string.letters
string2 = 'nopqrstuvwxyzabcdefghijklm'
string2 += string2.upper()
encoding = dict(zip(string1, string2))
decipher = dict(zip(string2, string1))
print encoding
print decipher
def encrypt(string):
    outstring = ''
    for each_char in string:
        outstring += encoding[each_char]
    return outstring
def deciptheing(string):
    outstring1 = ''
    for each_char in string:
        outstring1 += decipher[each_char]
    return outstring1
while True:
    myinput = raw_input("please input the string you want to encrypt:")
    encrypt1 = encrypt(myinput)
    print encrypt1
    print deciptheing(encrypt1)

第二种方法比较简介, 效率应该也比较高,再加密的时候 a ~ m +13 加密为 n~ z 而 n~z - 13加密为 a~m
解密时也是如此 加了一个处理不在字母表范围的情况
def transform(string):
    outstring = ''
    for each_char in string:
        if ( each_char >= 'a' and each_char <= 'm') or (each_char >= 'A' and each_char <= 'M'):
            outstring += chr(ord(each_char) + 13)
        elif ( each_char >= 'n' and each_char <= 'z') or (each_char >= 'N' and each_char <= 'Z'):
            outstring += chr(ord(each_char) - 13)
        else:
            outstring += each_char
    return outstring

7.11比较简单~
#!/usr/bin/env python
import random
a = random.randint(1, 10)
b = random.randint(1, 10)
A = set('')
B = set('')
for i in range(0, a):
    A.add(random.randint(0, 9))
for i in range(0, b):
    B.add(random.randint(0, 9))
print A
print B
print A | B
print A & B

7.12
有一个问题, 创建的时候set里边是整形, 而如果你输入的如果不经过类型转换的话是字符型,你可以把集合里的整形改成字符型,也可以把输入的字符型改成整形,我的程序采用前者
#!/usr/bin/env python
import random
a = random.randint(1, 10)
b = random.randint(1, 10)
A = set('')
B = set('')
for i in range(0, a):
    A.add(chr(random.randint(0, 9) + ord('0')))
for i in range(0, b):
    B.add(chr(random.randint(0, 9) + ord('0')))
print A
print B
for i in range(0, 3):
    answer1 = raw_input("please input you answer of  A | B:")   
    answer1 = set(answer1.split())
    if answer1 == (A | B):
        print "you are right"
        break
    else:
        print "no you are wrong, try again"
print "the right answer\n", A | B
for i in range(0, 3):
    answer1 = raw_input("please input you answer of  A & B:")   
    answer1 = set(answer1.split())
    if answer1 == (A & B):
        print "you are right"
        break
    else:
        print "no you are wrong, try again"
print "the right answer\n", A & B

7.15一堆 if有点麻烦~
A = set(raw_input('please type in set A:').split())
B = set(raw_input('please type in set B:').split())
while True:
    op= raw_input('please type in operator[in,not in,&,|,^,<,<=,>,>=,==,!=]:').strip()
    if op not in ['in', 'not in', '&', '|', '^', '<', '<=', '>','>=','==','!=']:
        print "the operator you input is invalid"
        continue
    else:
        break
if op == 'in':print 'A in B is %s' % (A in B)
elif op == 'not in':print 'A not in B is %s' % (A not in B)
elif op == '&':print 'A&B is %s' %(A&B)
elif op == '|':print 'A|B is %s' %(A|B)
elif op == '^':print 'A^B is %s' %(A^B)
elif op == '<':print 'A<B is %s' %(A<B)
elif op == '>':print 'A>B is %s' %(A>B)
elif op == '<=':print 'A<=B is %s' %(A<=B)
elif op == '>=':print 'A>=B is %s' %(A>=B)
elif op == '==':print 'A==B is %s' %(A==B)
elif op == '!=':print 'A!=B is %s' %(A!=B)


  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值