news 2026/9/30 10:43:51

Python基础语法练习题(31-33)

作者头像

张小明

前端开发工程师

1.2k 24
文章封面图
Python基础语法练习题(31-33)

当前练习题如果每篇更新五题可能会导致某些文章篇幅过长,因此我决定后续每天更新三篇。

第三十一题,计算字典值总和:

#定义一个函数,该函数接收一个字典作为参数,并返回该字典中所有值的总和 #定义函数 def sum_of_dict_values(dictionary): """ 计算并返回字典中所有值的总和 :param dictionary:字典 :return: 字典中所有值的总和 """ #定义变量保存总和 result = 0 #获取字典中所有值 for values in dictionary.values(): result += values return result #给定字典 example_dict = {'a':100,'b':200,'c':300} #调用函数 total = sum_of_dict_values(example_dict) print(total)

下面是这个代码块开发出来的运行逻辑以及编写逻辑:

计算字典所有值的总和
字典可以理解成一本"账本",里面记的是一条条"名目 → 金额"的对应关系,比如 a 对应 100、b 对应 200、c 对应 300。这里的名目就是"键",金额就是"值"。
这道题要算的是所有金额的总和,也就是说,我们只关心"值",名目是什么并不重要。
思路其实很生活化,就像数钱:先准备一个空的存钱罐,初始是 0;然后把账本里的每一笔金额逐个取出来,取一笔就往存钱罐里丢一笔——100、再加 200、再加 300;等所有金额都数完,存钱罐里的总数就是答案,也就是 600。
换成程序的语言,就是三步:先准备一个从 0 开始的累加器,再遍历字典里所有的值,每遇到一个就加进累加器,最后把累加器的结果返回即可。
这里有个小关键:怎么"只取出值、不管键"?字典本身就提供了专门的能力,可以一次性把所有值单独拎出来(对应的还有"只取键"和"键值一起取"),我们需要的正是"只取值"这一种。
如果想更省事,Python 还内置了一个专门"求和"的工具,把取出来的所有值直接丢给它,一行就能得到总和,效果和手动一笔笔累加完全一样,只是写起来更清爽。

第三十二题,计算倒数序列和:

#定义一个函数,该函数用于根据传入的整数n返回对应的倒数序列和,若n是奇数,则计算1/1 + 1/3 + ... + 1/n,若n是偶数,则计算1/2 + 1/4 + ... + 1/n #用户输入数据 n = int(input('请填入n的值:')) #定义函数 def sum_of_reciprocal_series(n): """ 计算并返回倒数序列和 :param n: 正整数 :return: 倒数序列和(float类型) """ result = 0 if n % 2 == 1: for i in range(1, n + 1, 2): result += 1 / i else: for i in range(2, n + 1, 2): result += 1 / i return result #调用函数 result = sum_of_reciprocal_series(n) print(result)

下面是这个代码块开发出来的运行逻辑以及编写逻辑:

计算倒数序列和
这道题比前面多了个"分情况"的小机关,我们先把规则说清楚。
先解释"倒数":一个数的倒数,就是 1 除以它,比如 3 的倒数是 1/3、5 的倒数是 1/5。
题目要求根据传入的数字 n 来算一串倒数的和,而且分两种情况:
如果 n 是奇数,就算 1/1 + 1/3 + 1/5 + …… 一直到 1/n;
如果 n 是偶数,就算 1/2 + 1/4 + 1/6 + …… 一直到 1/n。
说白了,就是"n 是奇数就只挑奇数来取倒数,n 是偶数就只挑偶数来取倒数"。
思路分三步走:
第一步,先判断 n 是奇数还是偶数。办法很简单,看它除以 2 是不是余 1——余 1 就是奇数,否则就是偶数。
第二步,挑出对应的那串数。这里有个小技巧:不用一个个去筛,而是"每隔一个取一个"。奇数的情况就从 1 开始,1、3、5……一路跳到 n;偶数就从 2 开始,2、4、6……跳到 n。这样取出来的正好是我们要的数列。
第三步,累加。和之前"数钱"一样,准备一个从 0 开始的存钱罐,每挑到一个数,就先算出它的倒数(1 除以它),再丢进存钱罐里。等这串数都处理完,存钱罐里的总和就是答案。
举个例子:如果 n 填 4(偶数),就挑出 2 和 4,算 1/2 + 1/4 = 0.5 + 0.25,最后得到 0.75;如果 n 填 5(奇数),就挑出 1、3、5,算 1/1 + 1/3 + 1/5,结果约等于 1.53。
整道题的核心,其实就是"先分奇偶选对数列,再对每个数取倒数累加",比单纯的求和多了一层判断和挑选而已。

第三十三题,计算给定日期是年中的第几天:

#定义一个函数,该函数接收年月日作为参数,计算这一天是这一年的第几天 #接收用户输入 year = int(input("请输入年份:")) month = int(input("请输入月份:")) day = int(input("请输入日期:")) #定义函数 def is_leap_year(year): """ 判断给定的年份是否是闰年 :param year: 年 :return: 如果是闰年返回True,否则返回False """ return year % 4 == 0 and year % 100 != 0 or year % 400 == 0 def day_of_year(year, month, day): """ 计算并返回给定日期是这一年的第几天 :param year: 年 :param month: 月 :param day: 日 """ #定义变量保存平年每月的天数 days_in_month = [31,28,31,30,31,30,31,31,30,31,30,31] #判断是否是闰年 if is_leap_year(year): days_in_month[1] = 29 #计算累计天数 day_count = sum(days_in_month[:month - 1]) + day return day_count print(f'给定日期是这一年的第{day_of_year(year, month, day)}天')

下面是这个代码块开发出来的运行逻辑以及编写逻辑:

计算给定日期是这一年的第几天
这道题问的是:给一个日期,比如 3 月 15 日,它是这一年里从头算起的第几天。
核心思路:拆成两部分相加
想象一年是一本厚厚的日历,你要算某一天翻到了"第几页",最省事的办法就是——把前面已经翻完的整月天数全加起来,再加上当前这个月已经过了的天数。
而"当前这个月过了几天"其实就是那个"日号"。比如 3 月 15 日,到 15 号为止,3 月正好过了 15 天。所以:
答案 = 1 月的天数 + 2 月的天数 + 15
注意这里只加到上一个完整月份为止,当月不加整月,只加"日号",因为当月还没过完。
第一步:得先知道每个月有多少天
大月 31 天、小月 30 天,二月最特殊。可以先把平年 12 个月的天数记成一张"对照表",用的时候按月去查就行。
第二步:处理闰年这个变量
唯一的变数在二月——平年 28 天,闰年 29 天。所以在累加之前,得先判断这一年是不是闰年:如果是,就把对照表里二月那一格从 28 改成 29,其余月份不变。
至于闰年怎么判断,规则有点绕,用大白话说就是:能被 4 整除的一般是闰年;但碰到整百年(能被 100 整除的),必须能被 400 整除才算。比如 2024 能被 4 整除,是闰年;1900 能被 100 整除却不能被 400 整除,就不是;2000 能被 400 整除,是闰年。
第三步:累加求和
把当月之前所有月份的天数加起来,再补上当月的日号,总和就是答案。
举个例子:算 2024 年 3 月 15 日。2024 是闰年,二月按 29 天算,于是 1 月 31 天 + 2 月 29 天 + 15 = 75,也就是这一年的第 75 天。
整道题的精髓,就是"先查表把前面的整月天数累加,再考虑闰年给二月多加一天,最后补上当月日号"——把一个看起来复杂的问题,拆成了查表、判断、累加三个简单动作。

以上就是这三题的全部内容,加油!

版权声明: 本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如若内容造成侵权/违法违规/事实不符,请联系邮箱:809451989@qq.com进行投诉反馈,一经查实,立即删除!
网站建设 2026/9/30 10:43:21

Cherry Studio 接入 DeepSeek 全攻略:API 配置、知识库 RAG 与避坑指南

简介:这份文档面向希望快速上手桌面端 AI 工具的开发者、设计师与文字工作者,围绕 Cherry Studio 的安装流程及其与 DeepSeek 模型的集成展开,帮助读者在 Windows、macOS、Linux 等平台上搭建统一的多模型交互环境,解决模型切换繁…

作者头像 李华
网站建设 2026/9/30 10:40:46

ESP32在线开发工具全指南:浏览器即开即用,十分钟点亮LED

/* MD / 富文本中的 .toc(含博客园搬家等嵌套结构);.toc-box 在侧栏,不受影响 */#content_views .toc,/* 编辑器常在目录前后插入空 p(:empty 仍占 20px),一并去掉避免顶空隙 */#content_views.markdown_views > p:empty:has(+ .toc),#content_views.markdown_views …

作者头像 李华
网站建设 2026/9/30 10:39:27

罗尔定理推论与辅助函数构造:考研中值定理证明题的核心思路

/* MD / 富文本中的 .toc(含博客园搬家等嵌套结构);.toc-box 在侧栏,不受影响 */#content_views .toc,/* 编辑器常在目录前后插入空 p(:empty 仍占 20px),一并去掉避免顶空隙 */#content_views.markdown_views > p:empty:has(+ .toc),#content_views.markdown_views …

作者头像 李华
网站建设 2026/9/30 10:39:07

FPGA学习路径全解析:从数字电路到系统级项目实战

/* MD / 富文本中的 .toc(含博客园搬家等嵌套结构);.toc-box 在侧栏,不受影响 */#content_views .toc,/* 编辑器常在目录前后插入空 p(:empty 仍占 20px),一并去掉避免顶空隙 */#content_views.markdown_views > p:empty:has(+ .toc),#content_views.markdown_views …

作者头像 李华
网站建设 2026/9/30 10:37:36

智能呼叫中心建设实施方案:从技术选型到上线运维

/* MD / 富文本中的 .toc(含博客园搬家等嵌套结构);.toc-box 在侧栏,不受影响 */#content_views .toc,/* 编辑器常在目录前后插入空 p(:empty 仍占 20px),一并去掉避免顶空隙 */#content_views.markdown_views > p:empty:has(+ .toc),#content_views.markdown_views …

作者头像 李华
网站建设 2026/9/30 10:37:24

工业安全回路三要素:输入逻辑输出物理隔离设计

/* MD / 富文本中的 .toc(含博客园搬家等嵌套结构);.toc-box 在侧栏,不受影响 */#content_views .toc,/* 编辑器常在目录前后插入空 p(:empty 仍占 20px),一并去掉避免顶空隙 */#content_views.markdown_views > p:empty:has(+ .toc),#content_views.markdown_views …

作者头像 李华