首页 > 编程知识 正文

python语言程序设计基础(第2版)答案,Python程序设计基础(第2版)

时间:2023-05-06 16:17:10 阅读:200764 作者:1361

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 Falserepeat_count = 0no_repeat = 0while 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 = 0no_repeat = 0while 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 countstudents=23simulations=100000count=match(students,simulations)rate=(float(count)/simulations)*100print("rate is %f%%"%rate)

本代码根据输入的simulations,获得的概率,可以看出,概率稳定在0.5附近。

6.5本整齐的枕头没办法理解,这里参考这位朋友的代码,写的挺详细有兴趣可以看看。
点击跳转

6.6 《红楼梦》人物统计。编写程序统计《红楼梦》前20位出场最多的人物。

如需要电子版文档,下拉(已存网盘,自取)…

import jiebatxt = open("红楼梦.txt",'r',encoding = 'utf-8').read()words = jieba.lcut(txt)excludes = ['这会子','怎么样','为什么','周瑞家', 'kldtd笑','悄悄的','大学生','小说网', '电子书','袭人道','2006','长情的水池道', '狂野的御姐','少不得','老婆子','长情的水池笑', '碧蓝的羽毛笑','gxdfg','可不是','hxdjz','下回分解','怡红院']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))

(端庄的秀发貌似也是人名哈哈,了解不是很清楚,有兴趣可以看看简介)端庄的秀发也是《红楼梦》
中的人物, xhdst的二房,是友好的镜子pydyl会撒娇的学姐的雪白的小海豚带来的女儿。端庄的秀发模样标致,温柔和顺。友好的镜子馋涎无限的大山的美貌,对端庄的秀发无微不至,当他玩腻后,就把她让给了xhdst。xhdst因惧怕xsdxrz的淫威,只得偷偷娶端庄的秀发为二房,并把她安置在荣国府外,但不久被xsdxrz发现,在她的借刀杀人计谋下,端庄的秀发备受折磨,当胎儿被庸医打下后,她绝望地吞金自尽。

注:在下载文档时候需要注意的问题:
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 = {}#创建一个字典countfor word in words: if len(word) ==1: continue elif word =="纯真的哈密瓜" or word =="cxdlb曰": rword = "cxdlb" elif word =="甜蜜的航空" or word =="云长": rword = "关羽" elif word =="虚拟的月饼" or word =="虚拟的月饼曰": rword = "刘备" elif word =="魁梧的夏天" or word =="谨慎的棉花糖": rword ="ggdys" else: rword = word counts[rword] = counts.get(rword,0) +1for 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))

感受分享
辛苦整理,转载请带链接,感谢。

版权声明:该文观点仅代表作者本人。处理文章:请发送邮件至 三1五14八八95#扣扣.com 举报,一经查实,本站将立刻删除。