# Python 学习记录:GESP 一级练习题——四舍五入、商店折扣和幸运数

📅 2026/8/16 5:35:13
# Python 学习记录:GESP 一级练习题——四舍五入、商店折扣和幸运数
前言前天我完成了 GESP 一级题单选了三道印象比较深的题来记录第 20 题“四舍五入”、第 23 题“商店折扣”、第 8 题“小明的幸运数”。这三道题难度不大但非常考验读题和细节。一、第 20 题四舍五入题目要求把整数四舍五入到最接近的整十数比如 43 变成 4058 变成 60。我的思路先给原数加 5再整除 10最后乘 10就能得到四舍五入后的整十数。演示代码nint(input())for_inrange(n):aint(input())print((a5)//10*10)运行结果输入 2 43 58 输出 40 60踩坑一开始我想用round(a, -1)但 Python 对 0.5 采用的是“银行家舍入”45可能会变成40。用(a 5) // 10 * 10更符合题目的四舍五入规则。二、第 23 题商店折扣题目给出了两种优惠满 x 元减 y 元或者直接打 n 折也就是价格变成原来的 n/10。两种方案只能选一种要算出最少要付多少钱。我的思路分别算出两种方案的价格再取最小值。演示代码xint(input())yint(input())nint(input())pint(input())plan1p-yifpxelsep plan2p*n/10print(f{min(plan1,plan2):.2f})运行结果输入 10 3 7 33 输出 23.10解释满减方案需要付33 - 3 30元打七折需要付33 * 7 / 10 23.1元所以最少付23.10元。要点满减必须满足“满 x 元”才能使用而且只能用一次输出要保留两位小数用f{...:.2f}最方便。三、第 8 题小明的幸运数个位数是 k 的正整数以及所有 k 的倍数都叫“幸运数”。题目要求计算 L 到 R 之间包含两端所有幸运数的和。我的思路遍历 L 到 R 的每一个数只要满足“个位是 k”或“能被 k 整除”任意一个条件就累加。演示代码kint(input())Lint(input())Rint(input())total0fornuminrange(L,R1):ifnum%10kornum%k0:totalnumprint(total)运行结果题目样例输入 7 10 20 输出 31解释10 到 20 中幸运数是 147 的倍数和 17个位是 7和为 31。要点判断幸运数用的是“或”的关系满足一个条件就可以循环范围要包含 R所以写成range(L, R 1)。四、复盘GESP 一级的题重点就是输入输出、循环、条件判断和格式化输出每道题都要先读清楚条件比如“只能用一次”“包含两端”这些细节最容易丢分写完代码后一定要拿样例手算一遍确认结果一致。结尾留言前天做的这三道题让我把基础语法练得更扎实了。接下来我会继续刷完 GESP 一级题单把每道题都整理成自己能讲清楚的笔记。