当前位置: 首页 > news >正文

Python算法100例-4.6 歌星大奖赛

完整源代码项目地址,关注博主私信'源代码'后可获取

  • 1.问题描述
  • 2.问题分析
  • 3.算法设计
  • 4.确定程序框架
  • 5.完整的程序
  • 6.问题拓展
  • 7.知识点补充

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<max,则max中的值保持不变。重复上面的过程直到max与所有的数都比较完,则max中存储的就是最大值。若刚开始max的值就很大,那么在比较过程中,给定的数若都比当前max的值小,经过一轮比较结束时变量max中存储的仍然是最初所赋的初值,那么这样的比较是没有意义的。比较过程如表(以5个数为例进行说明)所示。

在这里插入图片描述

比较完之后max的值为83,正好是所给数中的最大值。对于变量min的比较与赋值过程同上,在最初赋值是为了保证给定的任意一个数都比min小,所以应该把min的初值赋得尽可能大。

对于10个评委的评分利用循环结构实现,循环变量i记录已经输入的评分的个数,初值为0,判定条件为i<10。评分的总和采用累加的方式存储到变量sum中,即循环体执行一次输入一个分数,接着将其累加到变量sum上,等到循环结束时,sum中即为所有评分的总和。求解最大值和最小值的过程与表4.4所示类似,每输入一个分数,就与当前的最大(小)值进行比较,若其大(小)于变量max(min)的值就把此分数赋值给max(min)。由上述过程可以看出,无论是输入分数、求解总和还是寻找最大(小)值,都可以在一个循环过程中实现,代码如下:

for i in range(1, 11):print("第%d个评委打分:" %i, end="")integer = int(input())                  # 输入评委的评分sum += integer                                  # 计算总分if integer > max:                    # 通过比较筛选出其中的最高分max = integerif integer < min:                    # 通过比较筛选出其中的最低分min = integer

4.程序框架

程序流程图如图所示。

在这里插入图片描述

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
最后得分:86

6.问题拓展

题目条件不变,但考虑同时对评委评分进行裁判,即在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[temp+1])))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" %((m+1), (n+1)))else:if (avg - min) > (max - avg):print("最不公平的评委就是:%d" %(n+1))else:print("最不公平的评委就是:%d" %(m+1))
10个评委的打分为: [86, 74, 34, 95, 11, 3, 95, 60, 61, 88]
最大的分数为:95
最小的分数为:3
去掉最高分和最低分,最后得分:63
最公平的评委是:9
最不公平的评委就是:6

7.知识点补充

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]

相关文章:

Python算法100例-4.6 歌星大奖赛

完整源代码项目地址&#xff0c;关注博主私信源代码后可获取 1.问题描述2.问题分析3.算法设计4.确定程序框架5.完整的程序6.问题拓展7.知识点补充 1&#xff0e;问题描述 在歌星大奖赛中&#xff0c;有10个评委为参赛的选手打分&#xff0c;分数为1&#xff5e;100分。选手最…...

静态路由表学习实验

实验要求&#xff1a;各个pc设备可以通信&#xff0c;并且可以访问外网&#xff0c;假设R1已连接外网 拓扑结构 思路&#xff1a;配置pc机ip地址&#xff0c;子网掩码&#xff0c;和网关&#xff08;网关地址是上层路由接口的地址&#xff09;&#xff0c;配置路由各个接口地址…...

客户端测试 可测性改进-学习记录

客户端测试面临的挑战 难点&#xff1a; 业务复杂&#xff0c;产品多&#xff0c;技术栈多样 测试过程的痛点&#xff1a; 配置-》执行-〉检查-》结果 手工测试前置配置操作极其繁琐&#xff1a;安装测试包-〉进入debug页面-》设置h-〉设置AB test-》锁定rn包-〉进入业务页…...

机器学习和神经网络9

通过前几次学习,相信对机器学习和神经网络已经有了较为深入的了解。 让我们从一些经典的机器学习算法和实际代码示例开始。: 线性回归:用于预测连续输出的基本算法。你可以从这里找到详细的原理和代码示例。 K-近邻算法 (k-Nearest Neighbors, kNN):一种简单但有效的分类和…...

http模块—http请求练习

题目要求&#xff1a;搭建如下http服务&#xff1a; 1.当浏览器向我们的服务器发送请求时&#xff0c;当请求类型是get请求&#xff0c;请求的url路径地址是/login。响应体结果是登录页面 2.当浏览器向我们的服务器发送请求时&#xff0c;当请求类型是get请求&#xff0c;请求…...

视频号原视频下载使用方法?新人都在用

视频号已经成为我们生活中不可或缺的一种方式&#xff0c;让更多人跃跃欲试&#xff0c;分享自己的生活瞬间或专业知识。然而&#xff0c;有时我们可能需要从视频号中提取原视频&#xff0c;无论是为了备份、编辑还是其他用途。本文将详细解析如何有效、安全地从视频号提取原视…...

用html画一个烟花特效

<!DOCTYPE html> <html lang"en"> <head><meta charset"UTF-8"><title>烟花特效</title><link rel"stylesheet" href"https://cdnjs.cloudflare.com/ajax/libs/font-awesome/5.15.2/css/fontawesom…...

SQL-CRUD-1

第一关任务描述 本关任务&#xff1a; 用insert给数据库添加数据 相关知识 有关系student(sno,sname,ssex,sage,sdept)&#xff0c;属性对应含义&#xff1a;学号&#xff0c;姓名&#xff0c;性别&#xff0c;所在系。现有的部分元组如下所示 insert 向数据库表插入数据的…...

linux 命令行下的计算器

!!! author 文章目录 1. echo 运算器, 推荐2. bc 计算器, 不推荐3. dc 计算器, 不推荐4. awk计算器. 推荐5. python. 推荐 1. echo 运算器, 推荐 限制是仅能在整数运算时使用 $ echo $((10534)) 70 优点,输入简洁, 支持运算表达式,支持16进制,10进制混合输入. 缺点,不支持浮点…...

Available platform plugins are: linuxfb, minimal, offscreen, vnc.

说明&#xff1a; buildroots根文件中已经移植好了QT的库&#xff0c;但是运行QT交叉编译之后的可执行文件报错&#xff1a; qt.qpa.plugin: Could not find the Qt platform plugin "eglfs" in "" This application failed to start because no Qt platf…...

C++中string容器的修改操作

目录 1.push_back() 尾插字符 2.append() 尾插字符串 3.operator 4.assign 覆盖 5.insert() 指定位置插入 6.erase() 删除 7.replace() 替换 8.swap() 交换 9.pop_back() 尾删 1.push_back() 尾插字符 void push_back (char c) string s("i miss gjj"); s…...

Elasticsearch:虚拟形象辅助和对话驱动的语音到 RAG 搜索

作者&#xff1a;来自 Elastic Sunile Manjee 搜索的演变 搜索已经从产生简单结果的简单文本查询发展成为容纳文本、图像、视频和问题等各种格式的复杂系统。 如今的搜索结果通过生成式人工智能、机器学习和交互式聊天功能得到增强&#xff0c;提供更丰富、更动态且与上下文相…...

测试开发工程师(QA)职业到底需要干些什么?part7:硬件测试工程师QA

概述 硬件测试工程师QA主要负责确保硬件产品在设计、制造和交付过程中的质量和性能。主要任务是进行测试、验证和分析硬件系统、组件和设备&#xff0c;以确保其符合规格和质量标准。下面是硬件测试工程师QA在其工作中常涉及的一些方面&#xff1a; 测试计划和策略&#xff1a…...

Python基础:标准库 -- pprint (数据美化输出)

1. pprint 库 官方文档 pprint --- 数据美化输出 — Python 3.12.2 文档 pprint — Data pretty printer — Python 3.12.2 documentation 2. 背景 处理JSON文件或复杂的嵌套数据时&#xff0c;使用普通的 print() 函数可能不足以有效地探索数据或调试应用程序。下面通过一…...

Visual Studio 小更新:改善变量的可见性

在 Visual Studio 2022 17.10 预览版 2 中&#xff0c;我们改善了一些小功能&#xff0c;例如&#xff1a;在调试版本中&#xff0c;变量窗口现已可以显示调用堆栈中任意帧的局部变量。 如需体验此功能&#xff0c;请直接安装最新预览版本&#xff0c;就可以知道是怎么一回事儿…...

C++自主点餐系统

一、 题目 设计一个自助点餐系统&#xff0c;方便顾客自己点餐&#xff0c;并提供对餐厅销售情况的统计和管理功能。 二、 业务流程图 三、 系统功能结构图 四、 类的设计 五、 程序代码与说明 头文件1. SystemMap.h #pragma once #ifndef SYSTEMMAP #define SYSTEMMAP #in…...

jconsole jvisualvm

jconsole 打开方式 命令行输入 jconsole双击想要连接的应用 界面展示 jvisualvm 打开方式 命令行输入 jvisualvm双击想要连接的应用 可以安装插件&#xff0c;比如 Visual GC 直观看到 GC 过程...

python vtkUnstructuredGrid 转 vtkAlgorithmOutput_

在VTK (Vtk.py)中&#xff0c;vtkUnstructuredGrid对象可以通过多种方式转换为vtkAlgorithmOutput_对象。这种转换通常在管道中使用&#xff0c;以将一个算法的输出传递给另一个算法作为其输入。 以下是一个简单的例子&#xff0c;展示如何将vtkUnstructuredGrid对象转换为 v…...

IS-IS路由

概览&#xff1a; Intermediate System-to-Intermediate System&#xff0c;中间系统到中间系统协议 IS-IS--IGP--链路状态协议--AD值&#xff1a;115 IS--中间系统&#xff08;路由器&#xff09; ES--终端系统&#xff08;PC&#xff09; 在早期IS-IS的开发并不是为了IP…...

打造新质生产力,亚信科技2024年如何行稳致远?

引言&#xff1a;不冒进、不激进&#xff0c;稳扎稳打&#xff0c; 一个行业一个行业地深度拓展。 【全球云观察 &#xff5c; 科技热点关注】 基于以往“一巩固、三发展”的多年业务战略&#xff0c;亚信科技正在落实向非通信行业、标准产品、软硬一体产品和国际市场的“四…...

练习(含atoi的模拟实现,自定义类型等练习)

一、结构体大小的计算及位段 &#xff08;结构体大小计算及位段 详解请看&#xff1a;自定义类型&#xff1a;结构体进阶-CSDN博客&#xff09; 1.在32位系统环境&#xff0c;编译选项为4字节对齐&#xff0c;那么sizeof(A)和sizeof(B)是多少&#xff1f; #pragma pack(4)st…...

云启出海,智联未来|阿里云网络「企业出海」系列客户沙龙上海站圆满落地

借阿里云中企出海大会的东风&#xff0c;以**「云启出海&#xff0c;智联未来&#xff5c;打造安全可靠的出海云网络引擎」为主题的阿里云企业出海客户沙龙云网络&安全专场于5.28日下午在上海顺利举办&#xff0c;现场吸引了来自携程、小红书、米哈游、哔哩哔哩、波克城市、…...

UDP(Echoserver)

网络命令 Ping 命令 检测网络是否连通 使用方法: ping -c 次数 网址ping -c 3 www.baidu.comnetstat 命令 netstat 是一个用来查看网络状态的重要工具. 语法&#xff1a;netstat [选项] 功能&#xff1a;查看网络状态 常用选项&#xff1a; n 拒绝显示别名&#…...

鱼香ros docker配置镜像报错:https://registry-1.docker.io/v2/

使用鱼香ros一件安装docker时的https://registry-1.docker.io/v2/问题 一键安装指令 wget http://fishros.com/install -O fishros && . fishros出现问题&#xff1a;docker pull 失败 网络不同&#xff0c;需要使用镜像源 按照如下步骤操作 sudo vi /etc/docker/dae…...

(转)什么是DockerCompose?它有什么作用?

一、什么是DockerCompose? DockerCompose可以基于Compose文件帮我们快速的部署分布式应用&#xff0c;而无需手动一个个创建和运行容器。 Compose文件是一个文本文件&#xff0c;通过指令定义集群中的每个容器如何运行。 DockerCompose就是把DockerFile转换成指令去运行。 …...

什么是Ansible Jinja2

理解 Ansible Jinja2 模板 Ansible 是一款功能强大的开源自动化工具&#xff0c;可让您无缝地管理和配置系统。Ansible 的一大亮点是它使用 Jinja2 模板&#xff0c;允许您根据变量数据动态生成文件、配置设置和脚本。本文将向您介绍 Ansible 中的 Jinja2 模板&#xff0c;并通…...

Python ROS2【机器人中间件框架】 简介

销量过万TEEIS德国护膝夏天用薄款 优惠券冠生园 百花蜂蜜428g 挤压瓶纯蜂蜜巨奇严选 鞋子除臭剂360ml 多芬身体磨砂膏280g健70%-75%酒精消毒棉片湿巾1418cm 80片/袋3袋大包清洁食品用消毒 优惠券AIMORNY52朵红玫瑰永生香皂花同城配送非鲜花七夕情人节生日礼物送女友 热卖妙洁棉…...

用机器学习破解新能源领域的“弃风”难题

音乐发烧友深有体会&#xff0c;玩音乐的本质就是玩电网。火电声音偏暖&#xff0c;水电偏冷&#xff0c;风电偏空旷。至于太阳能发的电&#xff0c;则略显朦胧和单薄。 不知你是否有感觉&#xff0c;近两年家里的音响声音越来越冷&#xff0c;听起来越来越单薄&#xff1f; —…...

Cilium动手实验室: 精通之旅---13.Cilium LoadBalancer IPAM and L2 Service Announcement

Cilium动手实验室: 精通之旅---13.Cilium LoadBalancer IPAM and L2 Service Announcement 1. LAB环境2. L2公告策略2.1 部署Death Star2.2 访问服务2.3 部署L2公告策略2.4 服务宣告 3. 可视化 ARP 流量3.1 部署新服务3.2 准备可视化3.3 再次请求 4. 自动IPAM4.1 IPAM Pool4.2 …...

C# winform教程(二)----checkbox

一、作用 提供一个用户选择或者不选的状态&#xff0c;这是一个可以多选的控件。 二、属性 其实功能大差不差&#xff0c;除了特殊的几个外&#xff0c;与button基本相同&#xff0c;所有说几个独有的 checkbox属性 名称内容含义appearance控件外观可以变成按钮形状checkali…...