尧图网站设计 尧图网站设计YAOTU DESIGN
ARTICLE DETAIL

资讯详情

深耕网站设计与一线实操的经验洞察。

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

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 天。整道题的精髓就是先查表把前面的整月天数累加再考虑闰年给二月多加一天最后补上当月日号——把一个看起来复杂的问题拆成了查表、判断、累加三个简单动作。以上就是这三题的全部内容加油
返回列表