7.4.1 计算四个中的次大值
假设有四个整型变量,该怎么计算四个中的次大值?
初学者解出这道题并不困难,但是将代码写得简洁优雅却是一个不小的挑战。
直接通过if来逐一比较,这样的思路显然是错的,最终写出的只是一坨又长又臭的代码。比较好的思路是先计算三个变量中的最大值以及中值,将其大小关系确定下来:
然后将第四个变量分别与最大值,中值进行比较,如果比三个中的最大值要大,那么次大值肯定就是三个中的最大值,如果比最大值小但比中值要大,那么次大值肯定就是第四个值。否则次大值一定是三个中的中值,为什么呢?因为次大值一定不是三个中的最小值,所以只能是三个中的中值。
先将三个变量的大小关系确定下来,这样才方便进行比较。
代码实例:
# __author__ = 薯条老师 import random x = random.randint(0, 1000) y = random.randint(0, 1000) z = random.randint(0, 1000) k = random.randint(0, 1000) # 计算三个中的最大值 max_ = x if x > y else y if z > max_: max_ = z # 计算三个中的最小值 min_ = x if x < y else y if z < min_: min_ = z # 将三个变量相加再减去最大值和最小值,结果一定是中值 median = x+y+z-max_-min_ # 假设三个中的中值为次大值 max_k2 = median if k > max_: # 比三个中的最大值max_要大,次大值就是max_ max_k2 = max_ elif k > median: # 比max_小但比median大,那么次大值就是k max_k2 = k print("次大值:{}".format(max_k2))
7.4.2 使用循环计算次小值
在for循环中计算最小值的逻辑很简单,如果需要计算出次小值,又该怎么实现呢?
许多初学者将这个问题想得过于复杂,要学会将复杂的问题简化处理,这样才能更好地理解事物的本质。
可将问题简化为循环只执行两次:如果第一次遍历出来的值比最小值要小,那么就更新为最小值。如果第二次遍历出来的比最小值要小,那么此时的次小值就一定是上一次的最小值。
在实现的过程中,还需注意当遍历出来的值大于最小值且小于次小值的情况,以及对最小值和次小值初始化时,二者刚好为最小值的特殊情况。
代码实例:
Python
# __author__ = 薯条老师 import random # 通过列表推导式来生成一个包含10个随机整数的列表 numbers = [random.randint(0, 100) for _ in range(10)] # min_表示最小值,min_k2表示次小值 min_, min_k2 = numbers[0], numbers[1] for number in numbers[1:]: if nummber < min_: # 如果遍历出来的值比min_要小,那么次小值一定是上次的最小值 min_k2 = min_ min_ = number elif min_ < number < min_k2: # 如果遍历出来的比min_要大,但比次小值小,那么次小值就为当前遍历出来的值 min_k2 = number elif min_ == min_k2: # 如果min_与min_k2刚好为最小值,且相等,就将次小值更新为当前值 min_k2 = number else: print("次小值:{}".format(min_k2))
7.4.3 最具实力的小班培训
薯条老师在广州有开设线下培训班,小班授课模式,一班最多6个人。也可一对一授课,全程帮助你学好计算机,实现高薪就业。不在广州的同学可提供住宿,也可以报名线上小班,用腾讯会议上直播课。
(1) Python后端工程师高薪就业班,月薪11K-18K,免费领取课程大纲
(2) Python中高级爬虫逆向工程师就业班,月薪15K-25K,包拿Offer
(3) Python数据分析+商业分析+数据科学就业班,企业级项目实战,月薪10K-20K
(4) Python量化交易就业班,A股+期货+数字货币量化,月薪10K-40K
(5) Python机器学习+深度学习算法工程师,月薪20-50K
跟薯条老师学习的学生有拿到花生日记,林氏家居,南方电网,京东, 阿里等公司的offer, 学生的最低薪资有6K,最高薪资有18K, 平均就业薪资有11000。
扫码咨询薯条老师:
已有3位薯条发表了看法:
访客 评论于 2024-09-24 16:15:51 回复
"_"未定义报错
薯条老师 评论于 2024-10-15 16:37:07 回复
谢谢,已经修改代码
访客 评论于 2024-09-24 16:15:58 回复
"_"未定义报错