100个python算法超详细讲解:歌星大奖赛 |
您所在的位置:网站首页 › popq评分详细讲解图c和d › 100个python算法超详细讲解:歌星大奖赛 |
1.问题描述 在歌星大奖赛中,有10个评委为参赛的选手打分,分数为1~100分。选手最后得 分为:去掉一个最高分和一个最低分后其余8个分数的平均值。请编写一个程序实 现。 2.问题分析 求一组数中的最大值和最小值是Python语言中比较常见的一类问题,这类问题的 算法十分简单,定义两个变量max、min分别存储最大值、最小值,利用两个变量与给 定的数依次比较的方法求出最大值和最小值。但是要注重在程序中判定最大值和最小 值的变量是如何赋值的。 3.算法设计 确定变量初值。变量max和min要分别与每个数进行比较,因此在第一次比较时要 用到两变量的初值,那么max和min的初值赋多少合适呢?一般情况可按照下面的方法 赋值,最大值max的初值尽量小,最小值min的初值尽量大。对于变量max来说,只有 其初值尽可能小的时候,在第一次与给定的数比较时数1才会大于max,才能把数1赋 给max,作为变量max的新值;接着与数2比较,若数2>max,同样把数2的值作为新值 赋给max,若数2 100: # 对分数值进行验证 print("输入的分数错误") exit() sum += integer # 计算总分 if integer > max: #通过比较筛选出其中的最高分 max = integer if integer < min: #通过比较筛选出其中的最低分 min = integer print("去掉一个最高分:%d" % max) print("去掉一个最低分:%d" % min) print("最后得分:%d" % ((sum - max - min) // 8)) 6.运行结果 在PyCharm下运行程序,按照屏幕提示输入10个分数,程序运行结果如图4.14所 示。
代码如下: #!/usr/bin/python3 # -*- coding: utf-8 -*- # @author : liuhefei # @desc: 歌星大奖赛 import random # 求出最大分数值 def maxScore(score): max = score[0] # 给max赋初值 m = 0 # m记录最大值的下标 for j in range(1, 10): if max < score[j]: max = score[j] m = j # 记录最大值的下标 print("最大的分数为:%d" % max) return max,m # 求出最小分数值 def minScore(score): min = score[0] # 给min赋初值 n = 0 # n记录最小值的下标 for j in range(1, 10): if min > score[j]: min = score[j] n = j # 记录最小值的下标 print("最小的分数为:%d" % min) return min,n if __name__=="__main__": sum = 0 # 记录10个评委打分的总分数 score = [0]*10 for i in range(10): score[i] = random.randint(0, 101) # 生成10个随机分数 sum = sum + score[i] print("10个评委的打分为:", score) max,m = maxScore(score) min,n = minScore(score) avg = (sum - max - min) // 8 # 计算平均分 print("去掉最高分和最低分,最后得分:%d" %avg) temp = 0 # temp用来记录最公平与最不公平评委给出的评分存储的下标 s = abs(score[0] - avg) # s记录评分与平均值差值的绝对值 for i in range(10): if abs(score[i] - avg) == 0: temp = i print("最公平的评委是:%d, 打分:%d" % ((temp + 1),(score[temp+1]))) temp = 0 for i in range(10): if abs(score[i] - avg) != 0: if s > abs(score[i] - avg): s = abs(score[i] - avg) temp = i print("最公平的评委是:%d" %(temp + 1)) if (avg - min) == (max - avg): print("最不公平的评委是:%d %d" %((m+1), (n+1))) else: if (avg - min) > (max - avg): print("最不公平的评委就是:%d" %(n+1)) else: print("最不公平的评委就是:%d" %(m+1))在PyCharm下运行程序,运行结果如图4.15所示。 8.知识点补充 random()是随机数库函数,它返回随机生成的一个实数,其值在[0,1)范围内。 random()函数是不能直接访问的,访问它需要导入random模块,然后通过random 静态对象调用该方法。 使用如下语句导入random模块: import random在程序中导入random模块后,就可以通过random静态对象来调用random模块提供 的随机函数了。 下面介绍random模块提供的常用随机函数。 ·random.random():该函数生成一个0到1之间的随机小数。 ·random.randint():该函数具有两个参数,一个是范围上限,一个是范围下限,用 于随机生成指定范围内的整数,其中下限必须小于上限。 ·random.uniform():该函数具有两个参数,一个是范围上限,一个是范围下限, 用于随机生成指定范围内的浮点数(小数),其中下限必须小于上限。 ·random.randrange():该函数具有三个参数,前面两个参数表示范围的上限和下 限,第三个参数是一个递增值,用于生成指定范围内,以指定基数递增的随机数。 ·random.choice():该函数用于从给定的序列中随机获取一个元素返回。序列可以 是字符串、列表、元组等。 ·random.shuffle():该函数用于将一个给定的列表元素打乱,随机排序。 ·random.sample():该函数具有两个参数,第一个参数表示指定序列,第二个参数 是需获取的指定长度,用于从指定序列中随机获取指定长度的片段,原有的序列不会 改变。序列可以是字符串、列表、元组等。 代码实例如下: #!/usr/bin/python3 # -*- coding: utf-8 -*- # @author : liuhefei # @desc: random函数 import random if __name__ == "__main__": # 生成一个0到1之间的随机小数,赋值给a a = random.random() print("a = ", a) # 生成一个[0,101)之间的随机整数,赋值给b b = random.randint(0, 101) print("b = ", b) # 生成一个[0,10)之间的随机小数,赋值给c c = random.uniform(0, 10) print("c = ", c) # 随机生成[0, 101)之间的偶数,递增数为2 d = random.randrange(0, 101, 2) print("d = ", d) # 随机生成一个字符 e = random.choice('abcdefg%^*f') print("e = ", e) # 随机返回一个字符串 f = random.choice(['apple', 'pear', 'peach', 'orange', 'lemon']) print("f = ", f) # 从给定的多个字符中,随机生成3个字符 g = random.sample('abcdefghijklmnopqrstuvwxyz',3) print("g = ", g) # 将一个列表中的元素打乱,随机排序 num = [9, 6, 4, 0, 2, 5, 3, 7, 1, 8] num1 = [1, 2, 3, 4, 5, 6, 7, 8, 9, 10] random.shuffle(num) print("num = ", num) random.shuffle(num1) print("num1 = ", num1)在PyCharm中运行程序,运行结果如图4.16所示。
|
今日新闻 |
推荐新闻 |
CopyRight 2018-2019 办公设备维修网 版权所有 豫ICP备15022753号-3 |