[导读]:超平老师的Scratch蓝桥杯真题解读系列在推出之后,受到了广大老师和家长的好评,非常感谢各位的认可和厚爱。作为回馈,超平老师计划推出《Python蓝桥杯真题解析100讲》,这是解读系列的第48讲。
计算分数和,本题是2021年1月23日举办的第12届蓝桥杯青少组Python编程选拔赛真题,题目要求编程根据输入整数n的奇偶性,分别计算对应分数的总和。
先来看看题目的要求吧。
一.题目说明
编程实现:
输入一个正整数n,如果n为偶数,则计算1/2 + 1/4 + 1/6 … + 1/n的结果,如果n为奇数时,则计 算1/1 + 1/3 + 1/5 … + 1/n的结果,输出最后计算的结果。
例如:
输入为4,则计算1/2 + 1/4的结果,输出为0.75
输入为5,则计算1/1 + 1/3 + 1/5的结果,输出为1.53
输入描述:
输入一个正整数n
输出描述:
输出最后计算的结果(最后结果保留两位小数,不要在每次除法时保留小数)
样例输入:
7
样例输出:
1.68
02
二.思路分析
这是一道简单的计算题,考查的知识点包括循环和小数的格式化输出。
当输入的n为偶数时,分数的分母为偶数,如下:
2, 4, 6, 8, 10...
当输入的n为奇数时,分数的分母为奇数,如下:
1, 3, 5, 7, 9...
为了方便,我们可以先使用列表将这些数字存起来,然后再循环求和。
题目要求计算结果只保留两位小数,很多同学不太熟悉小数的格式化输出。
在Python中,控制小数的精度通常有如下三种方式:
1). 格式化说明符
2). 格式化字符串
3). round()函数
先介绍第一种,格式化说明符是通过使用 % 运算符来插入变量到字符串中,并通过格式化说明符(如 %.2f)来控制浮点数的显示精度,如下:
total = 3.14159
print('%.2f' % total) # 输出:3.14
在 '%.2f' 中,% 表示开始一个格式化说明符,.2 表示保留两位小数,f 表示格式化浮点数,然后通过 % 运算符将 total 变量的值插入到格式化字符串中。
这种方式在Python 2中非常常见,并且在Python 3中仍然有效。
再来说说第二种,从Python 3.6开始,引入了新的格式化方法——f-string或者format,它提供了一种更简洁、更易读的方式来格式化字符串。
使用如下:
num = 3.14159
print(f"{num:.2f}") # f-string
print("{:.2f}".format(num)) # format函数
f-string支持在{}内使用冒号后的格式说明符来控制类型、填充、对齐等格式化选项。
此外,在f-string中,还可以直接在{}内编写任何有效的Python表达式,包括算术运算、函数调用等,并且表达式的结果将被直接嵌入到字符串中。
注意,在使用f-string的时候,可以是小写的f,也可以是大写的F,效果完全一样。
第三种就是round()函数了,round()是Python内置的一个函数,它可以用来对浮点数进行四舍五入,并指定保留的小数位数。
用法如下:
num = 3.14159
rounded_num = round(num, 2) # 保留两位小数
print(rounded_num) # 输出:3.14
需要说明的,无论是使用%.nf的格式化方法,还是使用str.format()方法或者f-string,它们都遵循四舍五入的规则,以保留指定的小数位数。
思路有了,接下来,我们就进入具体的编程实现环节。
三.编程实现
根据上面的思路分析,我们编写程序如下:
代码比较简单,强调三点:
1). 在构造列表的时候,使用了列表推导式的编程技巧,这是Python独有的语法特性,超级好用;
2). 在循环求和的时候,直接迭代列表,获取列表中的元素,这样更方便,当然,你也可以使用下标来获取;
3). 注意f-string的格式,它不是函数,而是字符串,是单引号和双引号均可,然后是花括号,花括号分两部分,前面的是变量,后面的格式,中间使用冒号隔开。
至此,整个程序就全部完成了,你也可以输入不同的数字来测试效果。
四.总结与思考
本题代码在10行左右,涉及到的知识点包括:
-
循环语句,主要for...in循环;
-
条件语句,主要是双分支;
-
格式化输出;
本题难度一般,关键在于如何控制结果保留两位小数,注意是计算后的结果,而不是每次相除时保留两位小数,二者相差还是很大的。
和其他语言相比,Python最大的特点就是提供了大量好用的库函数,包括内置和第三方的。我们平时在学习的时候,一定要多用,确保在需要的时候,能立刻想起来,也避免了重复造轮子。
你还有什么好的想法和创意吗,也非常欢迎和超平老师分享探讨。
如果你觉得文章对你有帮助,别忘了点赞和转发,予人玫瑰,手有余香😄
需要源码的,可以移步至“超平的编程课”gzh。