python
# 例4-3 # 这道题练习使用 min(),max(),sum()函数 # score = eval(input('请输入十个学生的成绩:')) # mi = min(score) # mx = max(score) # n = len(score) # s = sum(score) # print('最高分',mx) # print('最低分',mi) # print('平均值',s/n) # score = eval(input('请输入十个学生的成绩:')) # mi = min(score) # mx = max(score) # print('最高分{},最低分{},平均值{}'.format(mx,mi,sum(score)/len(score))) # 例4-4 筛选法求素数(以300以内素数为例) 主要体会一下方法,因为求素数有其他简单的方法 # 通过验证 是否能被已知素数整除 的方法在指定范围内筛选出素数 # 使用长度为300的列表这300个数是连续变化的,与列表索引是一致的,换成其他若是不连续,可能就不行了 # 是素数用1标记,不是素数用0标记 # 把300个数先全部标记为1,即设全部为素数 '''primes = [1] * 300 primes[0:1+1] = [0,0] for i in range(2,300): # if primes[i] == 1: # 把这个注释掉也没影响,因为上一步都已经给后面都赋为1了 for j in range(i+1,300): if j % i == 0: # primes[j] != 0 and if条件加不加这个也没影响结果 primes[j] = 0 print('300以内的素数包括:') for i in range(2,300): if primes[i]: print(i,end=' ')''' # 例4-5 二分查找 体会一下方法 # 前提是适用于顺序排好的一个序列 '''ls = [34,64,72,75,86,90,96,100] x = eval(input('请输入要查找的数:')) left = 0 right = len(ls) - 1 # 长度-1 才是位置索引 while left < right: # 循环条件 mid = (left + right) // 2 # 求中间值 if ls[mid] > x: # 说明x在左半边,需要把右侧范围缩小 right = mid - 1 # elif ls[mid] < x: left = mid + 1 # else: print('找到{},索引{}'.format(x,mid)) break else: print('没有找到',x)''' # 例4-6 问卷调查 ‘满意不满意’ 用列表统计每个评语出现的次数并求最大值,找出出现最多的评语 '''result ="不满意,一般,很满意,一般,不满意,很满意,满意,一般,一般,"\ "不满意,满意,满意,满意,满意,满意,一般,很满意,一般,满意,"\ "不满意,满意,一般,不满意,满意,不满意,满意,很满意,很满意,"\ "满意,满意,不满意,满意,不满意,满意,一般,很满意,不满意,"\ "一般,很满意,满意,很满意,不满意,很满意,不满意,很满意,"\ "满意,满意,很满意,一般,很满意 ,满意,满意,很满意,不满意,"\ "很满意,满意,不满意,满意,不满意,满意,很满意,满意,很满意,"\ "一般,很满意,很满意,很满意,不满意,满意,一般,一般,一般,"\ "一般,不满意,不满意,满意,很满意,很满意,满意,满意,很满意,"\ "很满意,一般,一般,很满意,一般,一般,满意,很满意,一般," # print(result) comments = ['很满意','满意','一般','不满意'] resultList = result.split(',') # 把字符串转化为列表 # print(resultList) cCount = [0]*4 # 设置一个列表 用来放置 每个评价出现的 次数,占4位 # print(cCount) for i in range(4): cCount[i] = resultList.count(comments[i]) # 统计 评价列表 中各个评价的出现的次数,各个评价用comment[i]表示 # print(cCount) # [24, 28, 20, 17] 这每个位置与上面comments列表元素的索引位置是对应的 most = max(cCount) # 统计出现次数最多的 print(most) mostcomment = comments[cCount.index(most)] # 出现次数最多的那个评价赋给mostcomment # print(cCount.index(most)) # print(mostcomment) print('根据统计,大家对今天伙食感觉:') for i in range(4): print('{}的学生{}人'.format(comments[i],cCount[i])) print('调查的结果中,出现次数最多的是',mostcomment)'''
# 用字典来写这道题 result ="不满意,一般,很满意,一般,不满意,很满意,满意,一般,一般,"\ "不满意,满意,满意,满意,满意,满意,一般,很满意,一般,满意,"\ "不满意,满意,一般,不满意,满意,不满意,满意,很满意,很满意,"\ "满意,满意,不满意,满意,不满意,满意,一般,很满意,不满意,"\ "一般,很满意,满意,很满意,不满意,很满意,不满意,很满意,"\ "满意,满意,很满意,一般,很满意,满意,满意,很满意,不满意,"\ "很满意,满意,不满意,满意,不满意,满意,很满意,满意,很满意,"\ "一般,很满意,很满意,很满意,不满意,满意,一般,一般,一般,"\ "一般,不满意,不满意,满意,很满意,很满意,满意,满意,很满意,"\ "很满意,一般,一般,很满意,一般,一般,满意,很满意,一般"\ lss = result.split(',') # print(lss) # ['不满意', '一般', '很满意', '一般', '不满意', '很满意', '满意', '一般', '一般', '不满意', '满意', '满意', '满意', '满意', '满意', '一般', '很满意', '一般', '满意', '不满意', '满意', '一般', '不满意', '满意', '不满意', '满意', '很满意', '很满意', '满意', '满意', '不满意', '满意', '不满意', '满意', '一般', '很满意', '不满意', '一般', '很满意', '满意', '很满意', '不满意', '很满意', '不满意', '很满意', '满意', '满意', '很满意', '一般', '很满意', '满意', '满意', '很满意', '不满意', '很满意', '满意', '不满意', '满意', '不满意', '满意', '很满意', '满意', '很满意', '一般', '很满意', '很满意', '很满意', '不满意', '满意', '一般', '一般', '一般', '一般', '不满意', '不满意', '满意', '很满意', '很满意', '满意', '满意', '很满意', '很满意', '一般', '一般', '很满意', '一般', '一般', '满意', '很满意', '一般'] dic = {} for i in lss: dic[i] = dic.get(i,0) + 1 print('各个评语出现的次数') print(dic) # {'不满意': 17, '一般': 20, '很满意': 25, '满意': 28} ls2 = sorted(dic.items(),key = lambda x:x[1],reverse=True) print('出现评语最多的是\'{:}\',次数为{:}'.format(ls2[0][0],ls2[0][1])) # 出现评语最多的是'满意',次数为28
# 例4-7 模拟投掷两个骰子100 000次,统计各点数出现的概率 # 选择生成两个1-6的随机数 # 两个骰子最小为2,最大为12 # 出现点数的范围2-12 # 用一个列表储存各个点数总共出现的次数,列表长度设置为13,0-12 # 0 0 0 0 0 0 0 0 0 0 0 0 0 0 # 2 3 4 5 6 7 8 9 10 11 12 # 0 1 2 3 4 5 6 7 8 9 10 11 12 长度为13 # 这样设置 刚好索引下标就是对应的点数 '''from random import * faces = [0]*13 #设置每个点数出现的次数最开始都给初始化为0 for i in range(100000): face1 = randint(1,6) face2 = randint(1,6) faces[face1+face2] += 1 # 对应的点数之和出现一次 次数就加一次 print('模拟两个骰子100000次结果如下:') for i in range(2,12+1): print('点数{}出现了{}次,出现概率为{:.3%}'.format(i,faces[i],faces[i]/100000))''' # 例4-7 下午茶搭配套餐 A B C D 搭配 1 2 3 # 配对问题,可以设两个列表 # 用嵌套的二重for循环遍历配对 '''z = ['A','B','C','D'] n = [1,2,3] s = [] for item1 in z: for item2 in n: m = (item1,item2) # 用到了元组 s.append(m) # 往s空列表里追加元素 print('下午茶搭配套餐:') for item in s: print(item)''' # 使用列表生成式 '''z = ['A','B','C','D'] n = [1,2,3] s = [(item1,item2) for item1 in z for item2 in n] print('下午茶搭配套餐:') for item in s: print(item)''' # 例 4-9 对嵌套列表进行切块分析 # tables = [['萧峰',20,17,20,20,18,19], # ['杨过',18,19,17,20,18,18], # ['令狐冲',12,17,14,20,19,13], # ['张无忌',20,17,15,14,20,20], # ['郭靖',19,18,19,18,19,20]] # 统计每个项目的平均分并输出,统计每个人的总得分并输出,找到总分最高的大侠 '''tables = [['萧峰',20,17,20,20,18,19], ['杨过',18,19,17,20,18,18], ['令狐冲',12,17,14,20,19,13], ['张无忌',20,17,15,14,20,20], ['郭靖',19,18,19,18,19,20]] names = [item[0] for item in tables] # print(names) scores = [item[1:] for item in tables] # print(scores) totals = [sum(item) for item in scores] # print(totals) avgs = [] # 每个项目的平均分 为列,要提取列,外循环要先定列 for j in range(0,5+1): avgs.append(sum([scores[i][j] for i in range(0,4+1)])/5) # print(avgs) print('五位大侠的总分:') for i in range(5): print('{:<4}:{}'.format(names[i],totals[i])) print('不同属性的平均分:') for i in range(5): print('{:<4}:{:.2f}'.format(names[i],avgs[i])) print("总分最高的大侠是:",names[totals.index(max(totals))])'''