一、简答题
1、36.时钟问题
小明上学时间是8:00,放学时间不固定,他很想知道从上学到放学,时钟的时针、分针和秒针一共有多少次指向了3点钟的位置。他尝试编写了如下程序,请你完善划线处的代码,计算出在h点s分放学时,三个时针分别经过3点位置的次数,用一个元组表示各指针经过3点位置的次数 (时针次数,分针次数,秒针次数) ,并输出。
def fn(h1, m1 ,h2 ,m2 ):
if(h2<15):
①
else:
hc=1
th= ②
if( ③ ):
mc= th+1
else:
mc=th
sc= ④
return (hc,mc,sc)
h=int(input("h="))
s=int(input("s="))
print(fn(8,0,h,s))
2、37.对称字符串
对称字符串是指从左往右读和从右往左读是一样的字符串。小方同学学习了递归思想后,利用递归思想来解决对称问题。在一串包含大小写字符和数字等字符组成的字符串中,他首先筛选出只包含大小写字符组成的字符串,然后判断该字符串是否是对称字符串。他编写的代码如下,请完善划线处的代码。
def getzf(yw): #筛选出原始字符串yw中大写小写字符组成的字符串
rst = ''
for i in yw:
if 'z'>=i >='a' or 'Z'>=i >='A':
①
return rst
def nxzf(data): #生成字符串data的逆序字符串
if len(data) == 1:
return data[0]
return ②
yw =input('请输入字符串')
yw = getzf(yw)
nxzfc = nxzf(yw)
if ③ :
print('原字符串中存在对称字符串',yw)
else:
print('不存在对称字符串')
解析:
首先,第一个函数getzf是用于筛选出原始字符串中只包含大小写字符的字符串。在遍历原始字符串时,如果字符是大写或小写字母,就将其添加到结果字符串rst中。因此,在①处,需要将满足条件的字符i添加到rst中。
第二个函数nxzf是用于生成字符串的逆序字符串。如果字符串只有一个字符,就直接返回该字符;否则,递归调用nxzf函数,将除了第一个字符以外的部分进行逆序,然后再将第一个字符添加到逆序字符串的后面。因此,在②处,需要返回nxzf(data[1:]) + data[0],即将除第一个字符外的部分逆序后再加上第一个字符。
最后,在主程序中,将筛选后的字符串与它的逆序字符串进行比较,如果相等则说明该字符串是对称的,否则不是。因此,在③处需要判断yw == nxzfc是否成立。
3、38.角谷猜想
所谓角谷猜想,是指对于任意一个正整数,如果是奇数,则乘3加1,如果是偶数,则除以2,得到的结果再按照上述规则重复处理,最终总能够得到1。如,假定初始整数为5,计算过程分别为16、8、4、2、1。程序要求输入一个整数,求经过多少次可得到自然数1。 根据题意,请完善划线处的代码。
def fun(n, cnt):
if ① :
print(cnt)
return
else:
if n % 2 == 0:
n //=2
②
else:
③
fun(n, cnt+1)
fun(5, ④ )
解析:
这是一个关于角谷猜想的编程题目。根据题目描述,我们需要完善一个递归函数,该函数接受一个整数n和一个计数器cnt,当n变为1时,打印计数器并返回,否则根据n的奇偶性进行相应的操作并递归调用函数。
对于划线处的代码解析如下:
① if n == 1:
:这是判断终止条件,当n变为1时,打印计数器并返回。因为题目要求得到自然数1时的计算次数,所以这里需要判断n是否等于1。
② fun(n, cnt)
:这是递归调用函数的部分,当n为偶数时,将n除以2后,需要再次调用函数并更新计数器。
③ else: n *= 3 + 1
:这是处理奇数n的部分,当n为奇数时,将其乘以3再加1后,再次递归调用函数。这是根据角谷猜想的规则进行的操作。
④ fun(5, 0)
:这是初始调用函数的部分,输入整数为5,初始计数器为0。因为初始时还没有计算次数,所以计数器初始值为0。
喵呜刷题:让学习像火箭一样快速,快来微信扫码,体验免费刷题服务,开启你的学习加速器!