习题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()