Python语言程序设计基础(第二版)P180答案示例(更全)

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))


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

原创文章 27 获赞 34 访问量 2600

猜你喜欢

转载自blog.csdn.net/weixin_46313446/article/details/105749675
今日推荐