python基础题库100题及答案,python基础题库及答案

大家好,给大家分享一下python基础题库100题及答案,很多人还不知道这一点。下面详细解释一下。现在让我们来看看!

4.【Python0002】排列组合序列(写到实验报告中)

【题目描述】

用户输入整数 n(1<=n<=26)和整数 m(m<=n),然后输入 n 个不同的字母,请编写 程序输出在这 n 个字母中选择 m 个字母的所有排列序列和组合序列python源码库

【练习要求】

请给出源代码程序和运行测试结果,源代码程序要求添加必要的注释。

【输入格式】

在第一行中输入整数 n 和整数 m 的值,数据之间以空格为间隔。 在第二行中输入 n 个不同字母,数据之间以空格为间隔

【输出格式】

首先输出所有的排列数列,每种情况一行,字母间以空格为间隔; 再者首先输出所有的组合数列,每种情况一行,在同一行中以字母增序顺序显示,字母 间以空格为间隔。

【输入样例】

3 2 a s d

【输出样例】

Permutation: a d d a a s s a d s s d Combination: a d a s d s

分析

看输出样例,感觉输出的规则是先把字符串排序好,然后combinations全组合,即ad as ds,然后permutation就是将这三个的顺序进行改变,没有用到permutations函数(一开始我也是用了那个函数,但是输出序列不知道怎么实现变成案例里面的顺序)

代码参考

import itertools

n, m = map(int, input().split())    # 这样可以实现一行里面输入两个数字
s = input().split(' ')  # 将输入的字符串拆开
s.sort()

print('Permutation')
# 可以知道i是一个元组类型的数据
for i in itertools.combinations(s, 2):
    print(' '.join(i))
    print(i[1], end=' ')
    print(i[0])
print('Combination')
for i in itertools.combinations(s, 2):
    print(' '.join(i))

5.【Python0003】蒙特·卡罗法计算圆周率(写到实验报告中)

【题目描述】

蒙特·卡罗方法是一种通过概率来得到问题近似解的方法,在很多领域都有重要的应用, 其中就包括圆周率近似值的计问题。假设有一块边长为 2 的正方形木板,上面画一个单位圆,然后随意往木板上扔飞镖,落点坐标(x,y)必然在木板上(更多的时候是落在单位圆内),如果扔的次数足够多,那么落在单位圆内的次数除以总次数再乘以 4,这个数字会无限逼近圆周率的值。这就是蒙特·卡罗发明的用于计算圆周率近似值的方法,如下图所示。编写程序,模拟蒙特·卡罗计算圆周率近似值的方法,输入掷飞镖次数,然后输出圆周率近似值。

【练习要求】

请给出源代码程序和运行测试结果,源代码程序要求添加必要的注释。

【输入格式】

在一行中输入掷飞镖的次数。

【输出格式】

输出采用蒙特·卡罗法模拟计算出的圆周率的值。

【输入样例】

100000

【输出样例】

3.13056

分析

一开始我考虑的一整个圆圈,但是其实只考虑四分之一即可,因为这4部分都是相同的,这样子随机函数也比较好调用,直接使用random()即可,生成[0,1)之间的随机数

代码参考

import random

n = int(input())
num = 0
for i in range(n):
    x = random.random()
    y = random.random()
    if pow(x * x + y * y, 0.5) < 1:
        num += 1

print(num*4/n)

6. 【Python0004】验证 6174 猜想(写到实验报告中)

【题目描述】

1955 年,卡普耶卡(D.R.Kaprekar)对 4 位数字进行了研究,发现一个规律:对任意各位数字不相同的 4 位数,使用各位数字能组成的最大数减去能组成的最小数,对得到的差重复这个操作,最终会得到 6174 这个数字,并且这个操作最多不会超过 7 次。请编写程序验证这个猜想。

【练习要求】

请给出源代码程序和运行测试结果,源代码程序要求添加必要的注释。

【输入格式】

在一行中输入一个任意各位数字不相同的 4 位数。

【输出格式】

验证 6174 猜想,输出过程中计算得到的各数,数据间以空格为间隔。

【输入样例】

2694

【输出样例】

2694 7173 6354 3087 8352 6174

分析

可以使用递归,注意join的使用,还有转list列表的使用。

代码参考

n = input()
print(n, end=' ')
n = list(n)
mmax, mmin = 0, 0
while (mmax - mmin) != 6174:
    mmin = int(''.join(sorted(n)))
    mmax = int(''.join(sorted(n, reverse=True)))
    print(mmax - mmin, end=' ')
    n = list(str(mmax - mmin))  # 要先转为字符串,才能转list,不能直接数字转list

7.【Python0005】模拟页面调度 LRU 算法(写到实验报告中)

【题目描述】

所谓 LRU 算法,是指在发生缺页并且没有空闲主存块时,把最近最少使用的页面换出主存块,腾出地方来调入新页面。 问题描述:一进程获得 n 个主存块的使用权,对于给定的进程访问页面次序,问当采用LRU 算法时,输出发生的缺页次数。

【练习要求】

请给出源代码程序和运行测试结果,源代码程序要求添加必要的注释。

【输入格式】

在第一行中输入进程获得使用权的主存块数量 n。 在第二行中输入进程访问页面的次序,各数据之间以空格为间隔。

【输出格式】

输出对于给定的 n 和进程访问页面的次序,输出采用 LRU 算法时的缺页次数。

【输入样例】

3 1 2 3 4 1 2 5 1 2 3 4 5

【输出样例】

7

分析

理解什么是页面调度LRU算法

参考代码

"""关键在于理解什么是页面调度LRU"""
my_list = []
n = int(input())
count = 0
process = input().split(' ')
my_list.append(process[0])
my_list.append(process[1])
my_list.append(process[2])  # my_list['1', '2', '3']
for i in range(3, len(process)):
    if my_list[0] != process[i]:
        count += 1
    (0)
    my_list.append(process[i])
print(count)

8.【Python0006】爬楼梯(写到实验报告中)

【题目描述】

假设一段楼梯共 n(n>1)个台阶,小朋友一步最多能上 3 个台阶,那么小朋友上这段楼梯一共有多少种方法。

【练习要求】

请给出源代码程序和运行测试结果,源代码程序要求添加必要的注释。

【输入格式】

在一行中输入楼梯台阶的数目 n。

【输出格式】

输出小朋友上这段楼梯的方法数。

【输入样例】

15

【输出样例】

5768

分析

假如在第10阶,他只有4种可能性:
    1.7阶+3步
    2.8阶+2步
    3.9阶+1步
    -->f(10)=f(7)+f(8)+f(9)
        f(1)=1(走1阶1种情况:1)
        f(2)=2(走2阶2种情况:1+1,2)
    ****f(3)=4(走3阶4种情况:1+1+1,1+2,2+1,3)

参考代码

"""
    假如在第10阶,他只有4种可能性:
        1.7阶+3步
        2.8阶+2步
        3.9阶+1步
        -->f(10)=f(7)+f(8)+f(9)
            f(1)=1(走1阶1种情况:1)
            f(2)=2(走2阶2种情况:1+1,2)
        ****f(3)=4(走3阶4种情况:1+1+1,1+2,2+1,3)
"""


def f(n):
    my_dict = {1:1, 2:2, 3:4}
    if 3 >= n >= 1:
        return my_dict[n]
    else:
        return f(n - 1) + f(n - 2) + f(n - 3)


num = int(input())
print(f(num))

9.【Python0007】杨辉三角形(写到实验报告中)

【题目描述】

输出 n(0<n)行杨辉三角形,n 由用户输入。

【练习要求】

请给出源代码程序和运行测试结果,源代码程序要求添加必要的注释。

【输入格式】

一行中输入 1 个整数 n。

【输出格式】

输出 n 行杨辉三角形,每个数的显示格式:占 5 位,右对齐。

【输入样例】

3

【输出样例】

1 1 1 2 1 1 3 3 1

分析

规律:每一行前后都是1
    第i行中间有i个(i+1),i是从0开始的。
    如:第0行中间有0个1,第1行中间有1个2,第2行中间有2个3

参考代码

"""
    规律:每一行前后都是1
        第i行中间有i个(i+1),i是从0开始的。
        如:第0行中间有0个1,第1行中间有1个2,第2行中间有2个3
"""
n = int(input())
for i in range(0, n):
    print("%5.d" % 1, end='')
    for j in range(0, i):
        print("%5.d" % (i + 1), end='')
    print("%5.d" % 1, end='')
    print()

10.【Python0008】筛法求素数(写到实验报告中)

【题目描述】

用户输入整数 n 和 m(1<n<m<1000),应用筛法求[n,m]范围内的所有素数。

【练习要求】

请给出源代码程序和运行测试结果,源代码程序要求添加必要的注释。

【输入格式】

在一行中输入整数 n 和 m,数据间以空格为间隔。

【输出格式】

按照一行 5 个的格式输出[n,m]范围内的所有素数,其中每个素数的显示格式为:占 5位,右对齐。

【输入样例】

50 100

【输出样例】

53 59 61 67 71 73 79 83 89 97

分析

代码参考

def IsS(num):
    for i in range(2, int(pow(num, 0.5)) + 1):
        if num % i == 0:
            return False
    return True


n, m = map(int, input().split())
num = 0  # 用于判断是否该换行了
for i in range(n, m + 1):
    if IsS(i):
        num += 1
        if num % 5 != 0:
            print("%5.d" % i, end='')
        else:
            print("%5.d" % i)

11.【Python0009】查找鞍点(写到实验报告中)

【题目描述】

对于给定 5X5 的整数矩阵,设计算法查找出所有的鞍点的信息(包括鞍点的值和行、 列坐标,坐标从 1 开始)。 提示:鞍点的特点:列上最小,行上最大。

【练习要求】

请给出源代码程序和运行测试结果,源代码程序要求添加必要的注释。

【输入格式】

输入 5 行 5 列整数,同行数据间以空格为间隔。

【输出格式】

在一行中以以下格式输出矩阵中的所有鞍点,每个鞍点的显示格式为: [<鞍点的行坐标>,<鞍点的列坐标>,<鞍点的值>]

【输入样例】

11 3 5 6 9 12 4 7 8 10 10 5 6 9 11 8 6 4 7 8 15 10 11 20 25

【输出样例】

[4,1,8][4,5,8]

分析

问题是这么处理行和列最大值和最小值多个的问题,一开始这里我是直接用max找行最大值,但是如果一行中有多个最大值的话,这个输出结果肯定是错的

代码参考

"""规定是五行五列的矩阵"""
row = []    # 行
low = []    # 列
for i in range(0, 5):
    a = list(map(int, input().split(' ')))
    row.append(a)   # 这里是按照一行一行录入到row,列表里面存5个列表(5行)
for i in range(0, 5):
    b = []
    for j in range(0, 5):
        b.append(row[j][i])
    low.append(b)   # 这里是按照一列录入到low中,列表里面存的是5个列表(5列)
for i in range(0, 5):
    # 问题是这么处理行和列最大值和最小值多个的问题,一开始这里我是直接用max找行最大值,但是如果一行中有多个最大值的话,这个输出结果肯定是错的
    for j in range(0, 5):
        if row[i][j] == max(row[i]):    # 如果行: 5 1 2 3 4 5,这样子写,两个5都会被遍历到
            if row[i][j] == min(low[j]):
                print("[%d,%d,%d]" % (i+1, j+1, row[i][j]), end='')

12.【Python0010】正整数的因子展开式

【题目描述】

编写程序,输出一个给定正整数 x(x>1)的质因子展开式。

【输入格式】

请在一行中输入整数 x 的值。

【输出格式】

对每一组输入的 x,按以下格式输出 x 的质因子展开式(假如 x 的质因子分别为 a、b、 c):x=abc

【输入样例 1】

72

【输出样例 1】

72=22233

分析

代码参考

n = int(input())
num = n
my_list = []
i = 2
while i <= n:
    if n % i == 0:
        n = n / i
        my_list.append(i)
    else:
        i += 1
print("%d=%d" % (num, my_list[0]), end='')
for i in range(1, len(my_list)):
    print("*%d" % my_list[i], end='')

13.【Python0011】牛顿迭代法(写到实验报告中)

【题目描述】

编写程序,使用牛顿迭代法求方程 ax3 + bx2 + cx + d = 0 在 x 附近的一个实根。

【练习要求】

请给出源代码程序和运行测试结果,源代码程序要求添加必要的注释。

【输入格式】

请在一行中输入方程系数 a、b、c、d 和实数 x,数据中间以空格为间隔。

【输出格式】

对每一组输入的数据,输出牛顿迭代法求出的实根(格式为保留小数点后 2 位,四舍五入)。

【输入样例】

1.0 2.0 3.0 4.0 1.0

【输出样例】

-1.65

分析

这题我对牛顿迭代法不是很懂…输出的next,还有条件f(x)-f(next)。

代码参考

"""
    牛顿迭代法的公式:
        xn+1 = xn - f(xn)/f`(xn)
    **终止条件:f(xn) - f(xn+1)足够小,参考范围:1e-6
"""


def f(xx):
    return n[0] * pow(xx, 3) + n[1] * pow(xx, 2) + n[2] * xx + n[3]


def fd(xx):
    return 3 * n[0] * pow(xx, 2) + 2 * n[1] * pow(xx, 1) + n[2]


a, b, c, d, x = map(float, input().split(' '))
n = [a, b, c, d]
next = x - f(x) / fd(x)
while f(x) - f(next) > 1e-6:
    x = next
    next = x - f(x) / fd(x)
print("%5.2f" % next)
  • 19
    点赞
  • 18
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值