python第15周(python学习题集)

29 篇文章 19 订阅
12 篇文章 24 订阅

这周题目难度可以,有一个题涉及深搜,但是由于前几天老师刚讲过深搜,我就不多赘述,还有最后两个题目是同类问题,我觉得后一个比前一个简单,建议从后往前做,一定要思考这道题,很有意思,算是一个小竞赛题目了,如果有问题可以私聊我,如果问的人多,我就会单独出解析,麻烦大家点点赞。


6-1 jmu-python-杨辉三角 (10 分)

根据输入的n打印n行杨辉三角型。

函数接口定义:

printYanghui(n):#打印n行杨辉三角型

裁判测试程序样例:

/* 请在这里填写答案 */
n = int(input())        
printYanghui(n)

输入格式:

输入n,转化为整数

输出格式:

每个数后面均有一个空格。

输入样例:

5

结尾无空行

输出样例:

    1 
   1 1 
  1 2 1 
 1 3 3 1 
1 4 6 4 1 

结尾无空行

答案:

# Description: 命里有时终须有,命里无时莫强求
# Autor: Neptune
# Date: 2021/12/7 10:19
def printYanghui(n):  # 打印n行杨辉三角型
    lis = [[1], [1, 1]]
    for i in range(n - 1, n - 3, -1):
        for q in range(i):
            print(' ', end='')
        for q in range(0, n - i):
            print('1', end=' ')
        print()
    for i in range(2, n):
        lis1 = [1]
        for q in range(1, i):
            lis1.append(int(lis[i - 1][q - 1] + lis[i - 1][q]))
        lis1.append(1)
        lis.append(list(lis1))
        for q in range(n - i - 1):
            print(' ', end='')
        for q in lis1:
            print(q, end=' ')
        print()
        lis1.clear()

6-2 python函数:对字符串数值类型判断 (10 分)

实现isNum()函数,参数为一个字符串,如果这个字符串属于整数(十进制)、浮点数或复数的表示,返回True,否则返回False。

函数接口定义:

函数接口:
isNum(x)

x是个字符串

裁判测试程序样例:


/* 请在这里填写答案 */
在这里给出函数被调用进行测试的例子。例如:
x=input()
print(isNum(x))

输入样例:

在这里给出一组输入。例如:

12.345

结尾无空行

输出样例:

在这里给出相应的输出。例如:

True

结尾无空行

输入样例:

在这里给出一组输入。例如:

abc*

结尾无空行

输出样例:

在这里给出相应的输出。例如:

False

结尾无空行

答案:

# Description: 命里有时终须有,命里无时莫强求
# Autor: Neptune
# Date: 2021/12/7 10:54
def isNum(x):
    try:
        x = float(x)
        return True
    except:
        try:
            complex(x)
            return True
        except:
            return False

6-3 使用函数求余弦函数的近似值 (20 分)

本题要求实现一个函数,用下列公式求cos(x)近似值,精确到最后一项的绝对值小于eps(绝对值小于eps的项不要加):

cos(x)=0!x0​−2!x2​+4!x4​−6!x6​+...

函数接口定义:funcos(eps,x ),其中用户传入的参数为eps和x;函数funcos应返回用给定公式计算出来,保留小数4位。

函数接口定义:

函数接口:
funcos(eps,x ),返回cos(x)的值。

裁判测试程序样例:

在这里给出函数被调用进行测试的例子。例如:


/* 请在这里填写答案 */

eps=float(input())
x=float(input())
value=funcos(eps,x )
print("cos({0}) = {1:.4f}".format(x,value))

输入样例:

0.0001 -3.1

输出样例:

cos(-3.1) = -0.9991

答案:

# Description: 命里有时终须有,命里无时莫强求
# Autor: Neptune
# Date: 2021/12/7 11:07
def funcos(eps, x):  # 返回cos(x)的值。
    xn, sum, i = 1, 0, 0
    while abs(xn) > eps:
        l = 1
        for i in range(1, i+1):
            l = l * i
        xn = (x ** i) / l * ((-1) ** int(i / 2))
        if abs(xn) > eps:
            sum += xn
        i = i + 2
    return sum

7-1 求完全数的字典集 (30 分)

本题目要求读入2个正整数m和n,且m<n,求[m,n]之间所有的完全数,并形成字典。完全数:除了自己本身以外所有因子的和等于本身的数。例如6的因子为1,2,3,1+2+3=6,6即为完全数。

输入格式:

以空格分隔输入m,n两个数。

输出格式:

输出得到的字典。

输入样例1:

6 80

结尾无空行

输出样例1:

{6: [1, 2, 3], 28: [1, 2, 4, 7, 14]}

结尾无空行

输入样例2:

-8 -5

结尾无空行

输出样例2:

wrong input

结尾无空行

答案:

# Description: 命里有时终须有,命里无时莫强求
# Autor: Neptune
# Date: 2021/12/7 11:07
def yin(x):
    lis = []
    for i in range(1, int(x / 2) + 1):
        if x % i == 0:
            lis.append(int(i))

    return lis


n1, n2 = map(int, input().split())
if n1<1 or n2<1 or n1>n2:
    print('wrong input')
else:
    dic = {}
    for i in range(n1, n2 + 1):
        s1 = yin(i)
        if sum(s1) == i:
            dic[i] = s1
    print(dic)

7-2 阶乘应用 (70 分)

输入大于1的正整数m,计算1×2×3×4×5...×n的积小于m时最大的n。

输入格式:

输入大于1的正整数m

输出格式:

输出n的值

输入样例:

20000

结尾无空行

输出样例:

n= 7

结尾无空行

答案:

# Description: 命里有时终须有,命里无时莫强求
# Autor: Neptune
# Date: 2021/12/7 14:25
m = int(input())
s1, i = 1, 1
while True:
    if s1 * i >= m:
        break
    else:
        s1 = s1 * i
        i = i + 1
print("n= %d" % (i-1))

7-3 数字螺旋方阵 (10 分)

已知n=5、6时的螺旋方阵如输出样例所示,请观察并得到其规律。输入一个正整数n,要求输出n×n个数字构成的螺旋方阵。

输入格式:

首先输入一个正整数T,表示测试数据的组数,然后是T组测试数据。每组测试输入一个正整数n(n≤20)。

输出格式:

对于每组测试,输出n×n的数字螺旋方阵。各行中的每个数据按4位字符宽度输出。

输入样例:

2
5
6

输出样例:

  25  24  23  22  21
  10   9   8   7  20
  11   2   1   6  19
  12   3   4   5  18
  13  14  15  16  17
  36  35  34  33  32  31
  17  16  15  14  13  30
  18   5   4   3  12  29
  19   6   1   2  11  28
  20   7   8   9  10  27
  21  22  23  24  25  26

答案:

# Description: 命里有时终须有,命里无时莫强求
# Autor: Neptune
# Date: 2021/12/7 14:32


def lis(n):  # 创建初始数组
    arr = [[0] * n for i in range(n)]
    return arr


def dfs(arr, x, y, num, n):  # 我的思路是和棋盘问题一样,用dfs因为有多种走向问题,但是不完全一样
    if n <= 0: return 0
    if n == 1:
        arr[x][y] = num
        return 0
    for i in range(n):  # 向右
        arr[x][y + i] = num
        num -= 1
    for i in range(n - 1):  # 向下
        arr[x + 1 + i][y + n - 1] = num
        num -= 1
    for i in range(n - 1):  # 向左
        arr[x + n - 1][y + n - 2 - i] = num
        num -= 1
    for i in range(n - 2):  # 向上
        arr[x + n - 2 - i][y] = num
        num -= 1
    dfs(arr, x + 1, y + 1, num, n - 2)


aaa = int(input())
for aaaa in range(aaa):
    n = int(input())
    arr = lis(n)
    a = dfs(arr, 0, 0, n * n, n)
    # 格式化输出print
    l = '%4d' * n
    for tmp in arr:
        print(l % tuple(tmp))

7-4 期末答疑安排 (70 分)

期末安排教师线上答疑,因作息不同,各教师的答疑时间不同,形成如下表格,编写程序当输入星期、小时和分钟,输出对应的答疑教师,如若时间不对,输出“时间错误“,若当时没安排教师则输出“此时无教师答疑”

捕获.JPG

输入格式:

第一行输入星期 第二行输入小时 第三行输入分钟

输出格式:

输出对应教师或“此时无教师答疑”或“时间错误“

输入样例1:

一
12
34

结尾无空行

输出样例1:

此时无教师答疑

结尾无空行

输入样例2:

二
20
34

结尾无空行

输出样例2:

B

结尾无空行

输入样例3:

一
23
89

结尾无空行

输出样例3:

时间错误

结尾无空行 

答案:

# Description: 命里有时终须有,命里无时莫强求
# Autor: Neptune
# Date: 2021/12/7 15:46
dic1 = {'一': 'A', '二': 'B', '三': 'C', '四': 'D', '五': 'E'}
dic2 = {'一': 9, '二': 20, '三': 13, '四': 20, '五': 13}
day = input()
h = int(input())
m = int(input())
if day not in dic2 or h > 24 or h < 0 or m >= 60 or (h == 24 and m > 0):
    print('时间错误')
else:
    if dic2[day] == h:
        print(dic1[day])
    elif h - dic2[day] == 1 and m <= 30:
        print(dic1[day])
    else:
        print('此时无教师答疑')

7-5 学生成绩分析 (10 分)

输入考试的成绩(可以有小数),求出各分数与平均分的差值绝对值(保留一位小数),输出按差值绝对值从小到大排列的(分数,差值绝对值)列表。

输入格式:

第一行输入同学们的考试成绩,以空格隔开。

输出格式:

输出排好序的(分数,差值绝对值)列表。

输入样例:

66 78 95 63 85 94 99

结尾无空行

输出样例:

[(85, 2.1), (78, 4.9), (94, 11.1), (95, 12.1), (99, 16.1), (66, 16.9), (63, 19.9)]

结尾无空行

答案:

# Description: 命里有时终须有,命里无时莫强求
# Autor: Neptune
# Date: 2021/12/7 17:45

str1 = input()
lis1 = list(map(str, str1.split()))
lis = list(map(float, str1.split()))
siv = round(sum(lis) / len(lis), 1)
dic = {}
for i in range(len(lis)):
    dic[eval(lis1[i])] = round(abs(siv - lis[i]), 1)
lis1 = sorted(dic.items(), key=lambda x: x[1], reverse=False)
print(lis1)


7-6 空心菱形* (10 分)

请编写程序,输出空心菱形。

输入格式

行数(正整数)

输出格式

若行数为奇数,则显示由星号勾勒出的空心菱形,否则显示错误信息。

输入样例1

5

输出样例1

  *
 * *
*   *
 * *
  *

输入样例2

8

输出样例2

Error

答案:

# Description: 命里有时终须有,命里无时莫强求
# Autor: Neptune
# Date: 2021/12/7 18:01
n = int(input())
if n % 2 == 0:
    print('Error')
else:
    for q in range(n):
        if q == 0 or q == n - 1:
            for i in range(n // 2):
                print(' ', end='')
            print('*', end='')
        elif q <= n // 2:
            for i in range(n // 2 - q):
                print(' ', end='')
            print('*', end='')
            for i in range(n - (n // 2 - q) * 2 - 2):
                print(' ', end='')
            print('*', end='')
        else:
            for i in range(n // 2 - (n - 1 - q)):
                print(' ', end='')
            print('*', end='')
            for i in range(n - (n // 2 - (n - 1 - q)) * 2 - 2):
                print(' ', end='')
            print('*', end='')
        print()


7-7 搬砖 (10 分)

某工地需要搬运砖块,已知男人一人搬3块,女人一人搬2块,小孩两人搬1块。如果想用n人正好搬n块砖,问有多少种搬法?(注意当某类人数为0时,也是合理的方案)

输入格式:

输入在一行中给出一个正整数n。

输出格式:

直接输出方案的数目。

输入样例1:

45

结尾无空行

输出样例1:

4

结尾无空行

输入样例2:

4

结尾无空行

输出样例2:

0

结尾无空行

答案:

# Description: 命里有时终须有,命里无时莫强求
# Autor: Neptune
# Date: 2021/12/7 18:21
n = int(input())

if n < 8 and (n != 3 or n != 5):
    print('0')
else:
    sum1 = 0
    for i in range(n // 5 + 1):
        if (n - i * 5) % 3 == 0:
            sum1 += 1
    print(sum1)

7-8 买玩具 (10 分)

某小学要购置文具。批发市场中A牌的铅笔卖5元一支,C牌的铅笔卖2元一支,D牌的简易铅笔卖1元2只(捆绑销售,只能买偶数只)。如果想用n元买n支笔,问有多少种买法?(注意当某牌的铅笔为0支时,也是合理的方案)

输入格式:

输入在一行中给出一个正整数n。

输出格式:

直接输出方案的数目。

输入样例1:

450

结尾无空行

输出样例1:

51

结尾无空行

输入样例2:

5

结尾无空行

输出样例2:

0

结尾无空行

答案:

# Description: 命里有时终须有,命里无时莫强求
# Autor: Neptune
# Date: 2021/12/7 18:45
n = int(input())
if n % 3 != 0:
    print('0')
else:
    sum1 = 0
    for i in range(n // 9 + 1):
        if (n - i * 9) % 3 == 0:
            sum1 += 1
    print(sum1)

  • 8
    点赞
  • 20
    收藏
    觉得还不错? 一键收藏
  • 2
    评论
评论 2
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值