python核心编程学习笔记-2016-08-05-01-习题9-19

习题9-19

代码:

#-*-coding: utf-8-*-

# 本题较难,也是参考网上别人的思路,自己写的。

import random

def getInputChar():
    while True:
        try:
            num = int(raw_input("Enter a integer between 0 and 255: "))
        except ValueError, e:
            print e
        else:
            if 0 <= num <= 255:
                return chr(num)
            else:
                 print "Invalid enter."

def getInputNumber():
    while True:
        try:
            num = int(raw_input("Enter a positive integer: "))
        except ValueError, e:
            print e
        else:
            if 0 <= num:
                return num
            else:
                print "Invalid enter."

def create_lst(char, count, tot_len):
    if tot_len < count:
        return "Your file length should be larger than the occurence times of {0}.".format(char)
    else:
        str_tmp = []
        for i in range(tot_len - count): # 先生成不含指定字符的列表
            string = chr(random.randint(0, 255))
            if string != char:
                str_tmp.append(string)
        for j in range(count): # 再在列表中随机插入指定个数的指定字符
            index = random.randint(0, tot_len - count - 1 + j) # 增加元素,列表的长度会变化,所以索引的随机取值范围也应相应改变
            str_tmp.insert(index, char)
    return str_tmp

def create_file(str_tmp):
    filename = raw_input("Enter a filename: ")
    f = open(filename, 'wb')
    for w in str_tmp:
        f.write(bin(ord(w)))
    return f

def getInputFile():
    while True:
        try:
            filename = raw_input("Enter a filename: ")
            f = open(filename, 'rb')
        except IOError, e:
            print e
        else:
            return f

if __name__ == "__main__":
    char = getInputChar()
    count = getInputNumber()
    tot_len = getInputNumber()
    str_tmp = create_lst(char, count, tot_len)
    f = create_file(str_tmp)
    f.close()
    f = getInputFile()
    print "You pick {0}, its binary expression is {1}.".format(char, bin(ord(char)))
    for eachLine in f:
        print eachLine,
    f.close()


评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值