P180第六章 程序练习题
6.1 随机密码生成。编写程序,在26个字母大小写和9个数字组成的列表中随机生成10个8位数的密码。代码示例如下:
import random #引入随机库
ls = "123456789ABCDEFGHIJKLMNOPQRSTUVWXYZabcdefghijklmnopqrstuvwxyz"
for i in range(10):
for i in range(8):
password = random.choice(ls)
print("{}".format(password),end="")
print()
6.2 重复元素判定。编写一个函数,接受列表作为参数,如果一个元素在列表中出现不止一次,返回True,但不要改变原来列表的值。同时调用并输出结果:代码示例如下:
def repeat(ls):
for i in range(1,len(ls)):#对每个元素遍历
for j in range(i):#对遍历的元素判断是否出现第二次
if ls[i] == ls[j]:
return True
return False
repeat_count = 0
no_repeat = 0
while True:
ls = input("请输入一个(以空格分隔)序列:")
result = repeat(ls)
print(result)
if result == True:
repeat_count += 1
elif result == False:
no_repeat += 1
print("重复序列为{}次,非重复序列为{}次".format(repeat_count,no_repeat))
6.3 重复元素判定续。利用集合的数据去重,改上面代码。完整如下:
#方法一:
def repeat(ls):#定义一个判断元素函数
ls = ls.split(' ')
if len(ls) == len(set(ls)):
return True#无重复
else:
return False#重复序列
repeat_count = 0
no_repeat = 0
while True:
ls = input("请输入一个(以空格分隔)序列:")
result = repeat(ls)
print(result)
if result == True:
repeat_count += 1
elif result == False:
no_repeat += 1
print("重复序列为{}次,非重复序列为{}次".format(repeat_count,no_repeat))
6.4 文本字符分析。编写程序接受字符串,按字符串出现频率的降序打印字母。分别尝试输入一些中英文片段,比较不同语言之间字符频率的差别。
#文本字符分析
#统计输入的字符串,按字符出现频率并按照降序方式打印字母
text = input("请输入一段文本(回车退出):")
while text != '':#如果为空则退出循环
d = {}
for word in text:
d[word] = d.get(word,0) + 1
#转为列表类型对其排序
ls = list(d.items())
ls.sort(key=lambda x:x[1],reverse = True)#以记录第二列排序
for i in range(len(ls)):
word, count = ls[i]
print("{0:<10}{1:>5}".format(word,count))
text = input("请输入一段文本(回车退出):")
6.5生日悖论分析。生日悖论指如果一个房间里有23人或以上,那么至少有两个人生日相同的概率大于50%。编写程序,输出在不同随机样本数量下,23个人中至少有两个人生日相同的概率。
def match(students,samples):
count=0
birthday=[]
for i in range(samples):
birthday=generate(students)
if duplicate(birthday):
count+=1
return count
students=23
simulations=100000
count=match(students,simulations)
rate=(float(count)/simulations)*100
print("rate is %f%%"%rate)
本代码根据输入的simulations,获得的概率,可以看出,概率稳定在0.5附近。
6.5本小白没办法理解,这里参考这位朋友的代码,写的挺详细有兴趣可以看看。
点击跳转
6.6 《红楼梦》人物统计。编写程序统计《红楼梦》前20位出场最多的人物。
如需要电子版文档,下拉(已存网盘,自取)…
import jieba
txt = open("红楼梦.txt",'r',encoding = 'utf-8').read()
words = jieba.lcut(txt)
excludes = ['这会子','怎么样','为什么','周瑞家',
'贾母笑','悄悄的','大学生','小说网',
'电子书','袭人道','2006','宝钗道',
'小丫头','少不得','老婆子','宝钗笑',
'黛玉笑','姨太太','可不是','林妹妹','下回分解','怡红院']
counts = {}
for word in words:
if len(word) == 1 or len(word) == 2:
continue
else:
counts[word] = counts.get(word,0) + 1 #计数
for word in excludes:
del counts[word]
items = list(counts.items())
items.sort(key=lambda x:x[1],reverse=True)#以降序 排序
for i in range(15):
word,count = items[i]
print('{0:<10}{1:>5}'.format(word,count))
(尤二姐貌似也是人名哈哈,了解不是很清楚,有兴趣可以看看简介)尤二姐也是《红楼梦》
中的人物, 贾琏的二房,是贾珍夫人尤氏的继母带来的女儿。尤二姐模样标致,温柔和顺。贾珍馋涎妻妹的美貌,对尤二姐无微不至,当他玩腻后,就把她让给了贾琏。贾琏因惧怕王熙凤的淫威,只得偷偷娶尤二姐为二房,并把她安置在荣国府外,但不久被王熙凤发现,在她的借刀杀人计谋下,尤二姐备受折磨,当胎儿被庸医打下后,她绝望地吞金自尽。
注:在下载文档时候需要注意的问题:
1:将文档放到程序的同目录下。
2: 文档保存格式更改:如图
链接:https://pan.baidu.com/s/1lYVEZos0B3CMliG1zd7BRQ
提取码:vcs1
有兴趣可以看看三国演义人物统计如下:
import jieba#完整出场顺序版
txt = open("红楼梦.txt","r",encoding="utf-8").read()
excludes = {"将军","军马","大喜","次日","引兵","却说","荆州","二人","不可","不能",\
"如此","如何","军士","商议","左右","主公","天下","东吴","今日","于是",\
"魏兵","不敢","一人","陛下","都督","人马","不知"}#创建一个集合
words = jieba.lcut(txt)#分词处理,返回一个列表类型带有所有word的列表
counts = {}#创建一个字典count
for word in words:
if len(word) ==1:
continue
elif word =="诸葛亮" or word =="孔明曰":
rword = "孔明"
elif word =="关公" or word =="云长":
rword = "关羽"
elif word =="玄德" or word =="玄德曰":
rword = "刘备"
elif word =="孟德" or word =="丞相":
rword ="曹操"
else:
rword = word
counts[rword] = counts.get(rword,0) +1
for word in excludes:
del counts[word]
items = list(counts.items())
items.sort(key=lambda x:x[1],reverse=True)#排序
for i in range(10):
word,count = items[i]
print("{0:<10}{1:>5}".format(word,count))
感受分享
辛苦整理,转载请带链接,感谢。