个人电影网站做APP违法吗,网站怎样设计网址大全,手机网页及网站设计,电商网店培训完整源代码项目地址#xff0c;关注博主私信源代码后可获取
1.问题描述2.问题分析3.算法设计4.确定程序框架5.完整的程序6.问题拓展7.知识点补充
1#xff0e;问题描述
在歌星大奖赛中#xff0c;有10个评委为参赛的选手打分#xff0c;分数为1#xff5e;100分。选手最…完整源代码项目地址关注博主私信源代码后可获取
1.问题描述2.问题分析3.算法设计4.确定程序框架5.完整的程序6.问题拓展7.知识点补充
1问题描述
在歌星大奖赛中有10个评委为参赛的选手打分分数为1100分。选手最后得分为去掉一个最高分和一个最低分后其余8个分数的平均值。请编写一个程序实现。
2问题分析
求一组数中的最大值和最小值是Python语言中比较常见的一类问题这类问题的算法十分简单定义两个变量max、min分别存储最大值、最小值利用两个变量与给定的数依次比较的方法求出最大值和最小值。但是要注重在程序中判定最大值和最小值的变量是如何赋值的。
3算法设计
确定变量初值。变量max和min要分别与每个数进行比较因此在第一次比较时要用到两变量的初值那么max和min的初值赋多少合适呢一般情况可按照下面的方法赋值最大值max的初值尽量小最小值min的初值尽量大。对于变量max来说只有其初值尽可能小的时候在第一次与给定的数比较时数1才会大于max才能把数1赋给max作为变量max的新值接着与数2比较若数2max同样把数2的值作为新值赋给max若数2max则max中的值保持不变。重复上面的过程直到max与所有的数都比较完则max中存储的就是最大值。若刚开始max的值就很大那么在比较过程中给定的数若都比当前max的值小经过一轮比较结束时变量max中存储的仍然是最初所赋的初值那么这样的比较是没有意义的。比较过程如表以5个数为例进行说明所示。 比较完之后max的值为83正好是所给数中的最大值。对于变量min的比较与赋值过程同上在最初赋值是为了保证给定的任意一个数都比min小所以应该把min的初值赋得尽可能大。
对于10个评委的评分利用循环结构实现循环变量i记录已经输入的评分的个数初值为0判定条件为i10。评分的总和采用累加的方式存储到变量sum中即循环体执行一次输入一个分数接着将其累加到变量sum上等到循环结束时sum中即为所有评分的总和。求解最大值和最小值的过程与表4.4所示类似每输入一个分数就与当前的最大小值进行比较若其大小于变量maxmin的值就把此分数赋值给maxmin。由上述过程可以看出无论是输入分数、求解总和还是寻找最大小值都可以在一个循环过程中实现代码如下
for i in range(1, 11):print(第%d个评委打分 %i, end)integer int(input()) # 输入评委的评分sum integer # 计算总分if integer max: # 通过比较筛选出其中的最高分max integerif integer min: # 通过比较筛选出其中的最低分min integer4程序框架
程序流程图如图所示。 5完整的程序
根据上面的分析编写程序如下
# 歌星大奖赛if __name__ __main__:max 0min 100sum 0 # sum存放10个评委打分的总分数for i in range(1, 11):print(第%d个评委打分 %i, end)integer int(input()) # 输入评委的评分print(integer)if integer 0 or integer 100: # 对分数值进行验证print(输入的分数错误)exit()sum integer # 计算总分if integer max: #通过比较筛选出其中的最高分max integerif integer min: #通过比较筛选出其中的最低分min integerprint(去掉一个最高分%d % max)print(去掉一个最低分%d % min)print(最后得分%d % ((sum - max - min) // 8))
第1个评委打分99
第2个评委打分98
第3个评委打分97
第4个评委打分6
第5个评委打分94
第6个评委打分34
第7个评委打分95
第8个评委打分92
第9个评委打分91
第10个评委打分93
去掉一个最高分99
去掉一个最低分6
最后得分866问题拓展
题目条件不变但考虑同时对评委评分进行裁判即在10个评委中找出最公平即评分最接近平均分和最不公平即与平均分的差距最大的评委程序应该怎样实现
要找出最公平与最不公平的评委需要在求出平均值后将该值与所有分数进行比较求出与平均值差值的绝对值最大和最小的两个评分该评分所对应的评委即为所求。因有一比较过程因此在输入完评委的评分后需要将其存储若在上述代码基础上进行改进则需要另外定义10个变量来存储评委评分。此算法虽然可以满足题目要求但是写起来麻烦为解决这个问题可以利用数组来实现这样便可不必定义10个变量只需要定义一个包含10个元素的数组第1到第10个评委的评分分别存储到数组score[0]score[10]。
最公平的评委即求出的与平均值差值最小的评分所对应的评委若有一个评分正好等于平均分则此分数对应的评委即为最公平的若都不相同则需要将差值进行比较选出最小值算法与求一组数中最小值的思路相同。最不公平的评委一定在所求的最大值和最小值对应的评委中产生。
代码如下
# 歌星大奖赛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,nif __name____main__:sum 0 # 记录10个评委打分的总分数score [0]*10for 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 iprint(最公平的评委是%d, 打分%d % ((temp 1),(score[temp1])))temp 0for i in range(10):if abs(score[i] - avg) ! 0:if s abs(score[i] - avg):s abs(score[i] - avg)temp iprint(最公平的评委是%d %(temp 1))if (avg - min) (max - avg):print(最不公平的评委是%d %d %((m1), (n1)))else:if (avg - min) (max - avg):print(最不公平的评委就是%d %(n1))else:print(最不公平的评委就是%d %(m1))
10个评委的打分为 [86, 74, 34, 95, 11, 3, 95, 60, 61, 88]
最大的分数为95
最小的分数为3
去掉最高分和最低分最后得分63
最公平的评委是9
最不公平的评委就是67知识点补充
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()该函数具有两个参数第一个参数表示指定序列第二个参数是需获取的指定长度用于从指定序列中随机获取指定长度的片段原有的序列不会改变。序列可以是字符串、列表、元组等。
代码实例如下
# random函数import randomif __name__ __main__:# 生成一个0到1之间的随机小数赋值给aa random.random()print(a , a)# 生成一个[0,101)之间的随机整数赋值给bb random.randint(0, 101)print(b , b)# 生成一个[0,10)之间的随机小数赋值给cc random.uniform(0, 10)print(c , c)# 随机生成[0, 101)之间的偶数递增数为2d 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)
a 0.5761180882798892
b 96
c 8.111252459197054
d 26
e e
f apple
g [d, a, j]
num [4, 3, 1, 2, 5, 8, 0, 7, 9, 6]
num1 [7, 1, 6, 3, 2, 8, 10, 5, 4, 9]