image

编辑人: 人逝花落空

calendar2025-05-31

message6

visits171

2024月03月Python四级实操答案及解析

一、编程题

1、数的分解

给出一个正整数 a,要求分解成若干个正整数的乘积,即 a=a1×a2×a3×... ×an,并且 1<a1≤a2≤a3≤...≤an,问这样分解的种类有多少。注意到 a=a 也是一种分解。

例如,8 可以分解成 8=2*2*2,8=2*4,8=8 总共 3 种。

代码如下,完善划线处的代码:

def fun(x, y=2):

    if x == 1:

        global ans

       

    for i in range(y, x+1):

        if :

            fun(x//i,i)

lst = [2, 8, 9, 20] #测试数据

for i in lst:

    ans = 0

   

    print(ans)

程序运行结果如下:

1

3

2

4

参考答案:1. 在①处填写的代码为:`ans += 1`。2. 在②处填写的代码为:`x % i == 0`。3. 在③处填写的代码为:`fun(i)`。

解析:【喵呜刷题小喵解析】:

1. 对于①处,当x等于1时,表示已经找到了一个分解方式,所以需要将ans加1。
2. 对于②处,我们需要判断i是否是x的因子,即x能否被i整除。所以填写`x % i == 0`。
3. 对于③处,我们需要调用函数`fun(i)`来计算i的分解种类数。

另外,需要注意的是,由于题目要求分解的乘积中的正整数要从小到大排列,所以我们在循环中从y开始,而不是从1开始。y的初始值为2,是因为1和x本身都是x的因子,但我们只关心大于1的因子。

在测试数据lst中,每个数都分别调用函数`fun(i)`来计算分解种类数,并将结果存储在ans中,最后打印ans。

所以,完善后的代码应为:

```python
def fun(x, y=2):
if x == 1:
global ans
ans += 1
else:
for i in range(y, x+1):
if x % i == 0:
fun(x//i,i)

lst = [2, 8, 9, 20]
for i in lst:
ans = 0
fun(i)
print(ans)
```

程序运行结果与题目给出的结果一致,证明我们的解答是正确的。

2、购物组合

小明单位发了 100 元的购物卡,小明到超市买三类洗化用品:洗发水(15 元)、香皂(2 元)、牙刷(5 元)。要把 100 元正好花掉,可有哪些购买组合?

def gouwu(money):

    for i in range(0,money//15+1):

        for j in range(0,money//2+1):

            for k in range(0, ):

                if :

                    print('可选择的购买组合:\t 购买洗发水 {} 瓶,香皂 {} 块,牙刷 {}个。'.format( ))

gouwu(100)

参考答案:① 25② i*15 + j*2 + k*5 <= 100③ i, j, k

解析:【喵呜刷题小喵解析】:
这是一个购物组合的问题,我们需要找出所有可能的购买组合,使得小明能用100元正好买完这三类洗化用品。

首先,我们定义三个变量i、j、k,分别表示洗发水、香皂、牙刷的购买数量。

然后,我们有三类洗化用品的价格,分别是15元、2元、5元。我们需要遍历所有可能的购买组合,使得总价不超过100元。

在给出的代码中,我们使用了三重循环来遍历所有可能的购买组合。对于每一个购买组合,我们需要检查是否满足总价不超过100元的条件。如果满足,就打印出这个购买组合。

在代码中,①处应该填写25,因为牙刷的价格是5元,所以最大可以购买20个(100元除以5元),但是范围要包括0,所以是0到20,即21个元素,也就是25。

②处应该填写i*15 + j*2 + k*5 <= 100,表示洗发水、香皂、牙刷的总价不超过100元。

③处应该填写i, j, k,表示打印出洗发水、香皂、牙刷的购买数量。

3、回文素数

回文素数是指一个不小于 11 的自然数 n 从左向右和从右向左读,其结果值相同且是素数,即称 n 为回文素数。一种求解的方法是先判断一个自然数是否为回文数,再判断它是否为素数。如果两个判断都成立,则该自然数是回文素数。请补全代码,找出自然数 1000 以内的所有回文素数。

#判断是否为素数

def  (n):

    for i in range(2,n):

        if  :

            break

    else:

        return True

#判断是否为回文数

def HuiWenShu(n):

    n=str(n)

    if n==  :

        return True

    else:

        return False

for i in range(11,1001):

    if ZhiShu(i)==True  :

        print('{}是回文素数!'.format(i))

参考答案:1. 函数①应命名为`ZhiShu`,表示判断是否为素数。2. 在函数①中,条件②应为`n % i == 0`,表示判断n是否能被i整除。3. 函数③中,应使用`n==n[::-1]`,表示判断n是否为回文数。4. 在for循环中,条件④应为`and HuiWenShu(i)`,表示只有当i既是素数又是回文数时,才输出i是回文素数。因此,完整的代码为:```pythondef ZhiShu(n):for i in range(2, n):if n % i == 0:breakelse:return Truedef HuiWenShu(n):n = str(n)return n == n[::-1]for i in range(11, 1001):if ZhiShu(i) and HuiWenShu(i):print('是回文素数!'.format(i))```

解析:【喵呜刷题小喵解析】:

首先,我们需要补全代码以找出自然数1000以内的所有回文素数。根据题目要求,我们需要先判断一个自然数是否为回文数,再判断它是否为素数。如果两个判断都成立,则该自然数是回文素数。

1. 判断一个自然数是否为回文数,我们可以将其转换为字符串,然后比较字符串和其反转字符串是否相同。在Python中,我们可以使用切片操作`[::-1]`来反转字符串。
2. 判断一个自然数是否为素数,我们需要遍历从2到该数的前一个数,判断该数是否能被其中的任何一个数整除。如果不能被整除,则该数是素数。

因此,我们可以定义两个函数:`ZhiShu(n)`表示判断n是否为素数,`HuiWenShu(n)`表示判断n是否为回文数。在for循环中,我们遍历自然数1000以内的所有数,判断其是否为回文素数,如果是,则输出。

根据以上分析,我们可以补全代码,得到最终的答案。

喵呜刷题:让学习像火箭一样快速,快来微信扫码,体验免费刷题服务,开启你的学习加速器!

创作类型:
原创

本文链接:2024月03月Python四级实操答案及解析

版权声明:本站点所有文章除特别声明外,均采用 CC BY-NC-SA 4.0 许可协议。转载请注明文章出处。
分享文章
share