一、简答题
1、36.日期问题
小明同学学习Python的函数后,想动手利用函数来解决生活中的问题。于是他突发奇想,输入日期,统计这一天是这一年的第几天。其中,闰年指年份能被4整除但不能被100整除,或者仅能够被400整除。编写的代码如下,请完善划线处的代码。
def isRn(year): #判断year是否闰年
if ① or year % 400 == 0:
return 1
return 0
def jsDays(data): #计算日期data在这一年是第几天
s = 0
year = int(data[:4])
month = int(data[4:6])
day = int(data[6:])
for i in range( ② ):
s += days[i]
s += day
if month > 2 and ③ :
s += 1
return s
def checkRq(data): #判断输入的日期是否正确
month = int(data[4:6])
day = int(data[6:])
if month <1 or month >12:
return 0
if days[month-1]<day or day <1:
return 0
return 1
days = [31,28,31,30,31,30,31,31,30,31,30,31] #定义每个月的天数
rq = input('输入年月日,格式如:20240102\n')
if checkRq(rq):
d = ④
print(rq,'是这一年的第',d,'天')
else:
print(rq,'输入的日期有错误')
解析:
题目是关于日期处理和闰年的判断问题。首先,我们需要明确闰年的判断条件,即能被4整除但不能被100整除的年份,或者能被400整除的年份。在代码中,划线处①应填入判断闰年的条件。
接下来,函数jsDays
用于计算日期在这一年中是第几天。这需要遍历年份中的每个月份并累加天数,最后加上日期的日数。在代码中,划线处②应填入月份的范围,即从1到12的整数序列或基于days列表的长度。
在函数jsDays
中,如果输入的日期在二月之后并且这一年是一个闰年(即二月有29天),则需要额外加一天。因此,划线处③应填入判断是否为闰年的条件。
最后,划线处④应该调用函数jsDays
来计算输入的日期在这一年中是第几天,并将结果输出。因此,这里应填入调用函数的代码。
2、37.数学游戏
校园里流行一种新的数学游戏:每次邀请两个同学参加,第一个同学先从1和2中挑一个数字,第二个同学可以在对方的基础上选择加1或者加2,然后又轮到第一个同学,他也可以选择加1或者加2,之后再把选择权交给对方,就这样交替地选择加1或者加2,谁先加到20,谁就赢了。小智编写了以下程序,分析总共存在多少种可能出现的情形。请补充完成该程序。
def act(n):
if n == 1 or ① :
return 1
sn = ②
return ③
tn = act( ④ )
解析:
这个问题是一个递归问题,通过编写程序来模拟数学游戏的流程。首先,当游戏结束(即其中一个玩家达到或超过 20 分)时,游戏结束。此时只有一种情况,即返回当前玩家赢得游戏的分数(即累积得分)。如果游戏尚未结束,我们需要考虑两种情况:当前玩家选择加 1 或加 2。因此,我们需要递归地调用函数两次,分别模拟这两种情况。然后我们需要计算这两种情况的得分总数,并将它们存储在一个列表中(这就是 sn)。接下来我们需要返回两种情况的数量(即返回 len(sn))。最后,我们需要根据当前玩家的选择(即当前轮到的玩家是第一个还是第二个)来决定下一个玩家应该选择哪个数字(即 n-1 或 n-2)。通过这种方式,我们可以模拟整个游戏过程并计算出所有可能的情形数量。
3、38.乘客问题
某路公共汽车,总共有八站,从一号站发车时车上已有n位乘客,到了第二站先下一半乘客,再上来了六位乘客,到了第三站也先下一半
乘客,再上来了五位乘客,以后每到一站都先下车上已有的一半乘客,再上来了乘客比前一站少一个.....到了终点站车上还有乘客6人,
问发车时车上的乘客有多少?根据递归思想,编写自定义函数完成该程序功能,完善空白处代码。
def num(i):
if i==8:
return ①
else:
return ②
print( ③ )
解析:
根据题目描述,这是一个典型的递归问题。我们需要编写一个递归函数来解决这个问题。函数num(i)表示在第i站时车上的乘客数量。当到达第8站(即最后一站)时,车上的乘客数量已知为6人,所以①处应返回6。对于其他站点,车上的乘客数量是下一站(即第i+1站)的乘客数量乘以2再减1(因为先下一半乘客,再上来比前一站少一个乘客)。因此,②处应返回(num(i+1)*2-1)
if i!=7
else num(i+1)*2
。最后,我们需要从第一站开始计算乘客数量,所以应该调用print(num(1))
来启动递归过程,③处应填入此内容。
喵呜刷题:让学习像火箭一样快速,快来微信扫码,体验免费刷题服务,开启你的学习加速器!